From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m=20=28VMware=29?= Subject: [PATCH v5 9/9] drm/vmwgfx: Add surface dirty-tracking callbacks Date: Wed, 12 Jun 2019 08:42:43 +0200 Message-ID: <20190612064243.55340-10-thellstrom@vmwopensource.org> References: <20190612064243.55340-1-thellstrom@vmwopensource.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from pio-pvt-msa2.bahnhof.se (pio-pvt-msa2.bahnhof.se [79.136.2.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1249D8922B for ; Wed, 12 Jun 2019 06:43:09 +0000 (UTC) In-Reply-To: <20190612064243.55340-1-thellstrom@vmwopensource.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thomas Hellstrom , pv-drivers@vmware.com, linux-kernel@vger.kernel.org, linux-graphics-maintainer@vmware.com, Deepak Rawat , nadav.amit@gmail.com List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgoKQWRkIHRoZSBj YWxsYmFja3MgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBlbXVsYXRlZCBjb2hlcmVudCBtZW1vcnkg Zm9yCnN1cmZhY2VzLiBBZGQgYSBmbGFnIHRvIHRoZSBnYl9zdXJmYWNlX2NyZWF0ZSBpb2N0bCB0 byBpbmRpY2F0ZSB0aGF0CnN1cmZhY2UgbWVtb3J5IHNob3VsZCBiZSBjb2hlcmVudC4KQWxzbyBi dW1wIHRoZSBkcm0gbWlub3IgdmVyc2lvbiB0byBzaWduYWwgdGhlIGF2YWlsYWJpbGl0eSBvZiBj b2hlcmVudApzdXJmYWNlcy4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxs c3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IERlZXBhayBSYXdhdCA8ZHJhd2F0QHZtd2Fy ZS5jb20+Ci0tLQogLi4uL2RldmljZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVmcy5oICAgICAg IHwgMjMzICsrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAg ICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2Uu YyAgICAgICB8IDM5NSArKysrKysrKysrKysrKysrKy0KIGluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4 X2RybS5oICAgICAgICAgICAgICAgICB8ICAgNCArLQogNCBmaWxlcyBjaGFuZ2VkLCA2MjkgaW5z ZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L2RldmljZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVmcy5oIGIvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC9kZXZpY2VfaW5jbHVkZS9zdmdhM2Rfc3VyZmFjZWRlZnMuaAppbmRleCBmMmJm ZDNkODA1OTguLjYxNDE0ZjEwNWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC9kZXZpY2VfaW5jbHVkZS9zdmdhM2Rfc3VyZmFjZWRlZnMuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L2RldmljZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVmcy5oCkBAIC0xMjgwLDcg KzEyODAsNiBAQCBzdmdhM2RzdXJmYWNlX2dldF9waXhlbF9vZmZzZXQoU1ZHQTNkU3VyZmFjZUZv cm1hdCBmb3JtYXQsCiAJcmV0dXJuIG9mZnNldDsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHUzMgog c3ZnYTNkc3VyZmFjZV9nZXRfaW1hZ2Vfb2Zmc2V0KFNWR0EzZFN1cmZhY2VGb3JtYXQgZm9ybWF0 LAogCQkJICAgICAgIHN1cmZfc2l6ZV9zdHJ1Y3QgYmFzZUxldmVsU2l6ZSwKQEAgLTEzNzUsNCAr MTM3NCwyMzYgQEAgc3ZnYTNkc3VyZmFjZV9pc19zY3JlZW5fdGFyZ2V0X2Zvcm1hdChTVkdBM2RT dXJmYWNlRm9ybWF0IGZvcm1hdCkKIAlyZXR1cm4gc3ZnYTNkc3VyZmFjZV9pc19keF9zY3JlZW5f dGFyZ2V0X2Zvcm1hdChmb3JtYXQpOwogfQogCisvKioKKyAqIHN0cnVjdCBzdmdhM2RzdXJmYWNl X21pcCAtIE1pbXBtYXAgbGV2ZWwgaW5mb3JtYXRpb24KKyAqIEBieXRlczogQnl0ZXMgcmVxdWly ZWQgaW4gdGhlIGJhY2tpbmcgc3RvcmUgb2YgdGhpcyBtaXBtYXAgbGV2ZWwuCisgKiBAaW1nX3N0 cmlkZTogQnl0ZSBzdHJpZGUgcGVyIGltYWdlLgorICogQHJvd19zdHJpZGU6IEJ5dGUgc3RyaWRl IHBlciBibG9jayByb3cuCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIG1pcG1hcC4KKyAqLwor c3RydWN0IHN2Z2EzZHN1cmZhY2VfbWlwIHsKKwlzaXplX3QgYnl0ZXM7CisJc2l6ZV90IGltZ19z dHJpZGU7CisJc2l6ZV90IHJvd19zdHJpZGU7CisJc3RydWN0IGRybV92bXdfc2l6ZSBzaXplOwor Cit9OworCisvKioKKyAqIHN0cnVjdCBzdmdhM2RzdXJmYWNlX2NhY2hlIC0gQ2FjaGVkIHN1cmZh Y2UgaW5mb3JtYXRpb24KKyAqIEBkZXNjOiBQb2ludGVyIHRvIHRoZSBzdXJmYWNlIGRlc2NyaXB0 b3IKKyAqIEBtaXA6IEFycmF5IG9mIG1pcG1hcCBsZXZlbCBpbmZvcm1hdGlvbi4gVmFsaWQgc2l6 ZSBpcyBAbnVtX21pcF9sZXZlbHMuCisgKiBAbWlwX2NoYWluX2J5dGVzOiBCeXRlcyByZXF1aXJl ZCBpbiB0aGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIHdob2xlIGNoYWluCisgKiBvZiBtaXAgbGV2 ZWxzLgorICogQHNoZWV0X2J5dGVzOiBCeXRlcyByZXF1aXJlZCBpbiB0aGUgYmFja2luZyBzdG9y ZSBmb3IgYSBzaGVldAorICogcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNhbXBsZS4KKyAqIEBudW1f bWlwX2xldmVsczogVmFsaWQgc2l6ZSBvZiB0aGUgQG1pcCBhcnJheS4gTnVtYmVyIG9mIG1pcG1h cCBsZXZlbHMgaW4KKyAqIGEgY2hhaW4uCisgKiBAbnVtX2xheWVyczogTnVtYmVyIG9mIHNsaWNl cyBpbiBhbiBhcnJheSB0ZXh0dXJlIG9yIG51bWJlciBvZiBmYWNlcyBpbgorICogYSBjdWJlbWFw IHRleHR1cmUuCisgKi8KK3N0cnVjdCBzdmdhM2RzdXJmYWNlX2NhY2hlIHsKKwljb25zdCBzdHJ1 Y3Qgc3ZnYTNkX3N1cmZhY2VfZGVzYyAqZGVzYzsKKwlzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9taXAg bWlwW0RSTV9WTVdfTUFYX01JUF9MRVZFTFNdOworCXNpemVfdCBtaXBfY2hhaW5fYnl0ZXM7CisJ c2l6ZV90IHNoZWV0X2J5dGVzOworCXUzMiBudW1fbWlwX2xldmVsczsKKwl1MzIgbnVtX2xheWVy czsKK307CisKKy8qKgorICogc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jIC0gU3VyZmFjZSBsb2Nh dGlvbgorICogQHN1Yl9yZXNvdXJjZTogU3VyZmFjZSBzdWJyZXNvdXJjZS4gRGVmaW5lZCBhcyBs YXllciAqIG51bV9taXBfbGV2ZWxzICsKKyAqIG1pcF9sZXZlbC4KKyAqIEB4OiBYIGNvb3JkaW5h dGUuCisgKiBAeTogWSBjb29yZGluYXRlLgorICogQHo6IFogY29vcmRpbmF0ZS4KKyAqLworc3Ry dWN0IHN2Z2EzZHN1cmZhY2VfbG9jIHsKKwl1MzIgc3ViX3Jlc291cmNlOworCXUzMiB4LCB5LCB6 OworfTsKKworLyoqCisgKiBzdmdhM2RzdXJmYWNlX3N1YnJlcyAtIENvbXB1dGUgdGhlIHN1YnJl c291cmNlIGZyb20gbGF5ZXIgYW5kIG1pcG1hcC4KKyAqIEBjYWNoZTogU3VyZmFjZSBsYXlvdXQg ZGF0YS4KKyAqIEBtaXBfbGV2ZWw6IFRoZSBtaXBtYXAgbGV2ZWwuCisgKiBAbGF5ZXI6IFRoZSBz dXJmYWNlIGxheWVyIChmYWNlIG9yIGFycmF5IHNsaWNlKS4KKyAqCisgKiBSZXR1cm46IFRoZSBz dWJyZXNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgc3ZnYTNkc3VyZmFjZV9zdWJyZXMo Y29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICB1MzIg bWlwX2xldmVsLCB1MzIgbGF5ZXIpCit7CisJcmV0dXJuIGNhY2hlLT5udW1fbWlwX2xldmVscyAq IGxheWVyICsgbWlwX2xldmVsOworfQorCisvKioKKyAqIHN2Z2EzZHN1cmZhY2Vfc2V0dXBfY2Fj aGUgLSBCdWlsZCBhIHN1cmZhY2UgY2FjaGUgZW50cnkKKyAqIEBzaXplOiBUaGUgc3VyZmFjZSBi YXNlIGxldmVsIGRpbWVuc2lvbnMuCisgKiBAZm9ybWF0OiBUaGUgc3VyZmFjZSBmb3JtYXQuCisg KiBAbnVtX21pcF9sZXZlbHM6IE51bWJlciBvZiBtaXBtYXAgbGV2ZWxzLgorICogQG51bV9sYXll cnM6IE51bWJlciBvZiBsYXllcnMuCisgKiBAY2FjaGU6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc3Zn YTNkc3VyZmFjZV9jYWNoIG9iamVjdCB0byBiZSBmaWxsZWQgaW4uCisgKgorICogUmV0dXJuOiBa ZXJvIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgb24gaW52YWxpZCBzdXJmYWNlIGxheW91dC4KKyAqLwor c3RhdGljIGlubGluZSBpbnQgc3ZnYTNkc3VyZmFjZV9zZXR1cF9jYWNoZShjb25zdCBzdHJ1Y3Qg ZHJtX3Ztd19zaXplICpzaXplLAorCQkJCQkgICAgU1ZHQTNkU3VyZmFjZUZvcm1hdCBmb3JtYXQs CisJCQkJCSAgICB1MzIgbnVtX21pcF9sZXZlbHMsCisJCQkJCSAgICB1MzIgbnVtX2xheWVycywK KwkJCQkJICAgIHUzMiBudW1fc2FtcGxlcywKKwkJCQkJICAgIHN0cnVjdCBzdmdhM2RzdXJmYWNl X2NhY2hlICpjYWNoZSkKK3sKKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkX3N1cmZhY2VfZGVzYyAqZGVz YzsKKwl1MzIgaTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOworCWNhY2hl LT5kZXNjID0gZGVzYyA9IHN2Z2EzZHN1cmZhY2VfZ2V0X2Rlc2MoZm9ybWF0KTsKKwljYWNoZS0+ bnVtX21pcF9sZXZlbHMgPSBudW1fbWlwX2xldmVsczsKKwljYWNoZS0+bnVtX2xheWVycyA9IG51 bV9sYXllcnM7CisJZm9yIChpID0gMDsgaSA8IGNhY2hlLT5udW1fbWlwX2xldmVsczsgaSsrKSB7 CisJCXN0cnVjdCBzdmdhM2RzdXJmYWNlX21pcCAqbWlwID0gJmNhY2hlLT5taXBbaV07CisKKwkJ bWlwLT5zaXplID0gc3ZnYTNkc3VyZmFjZV9nZXRfbWlwX3NpemUoKnNpemUsIGkpOworCQltaXAt PmJ5dGVzID0gc3ZnYTNkc3VyZmFjZV9nZXRfaW1hZ2VfYnVmZmVyX3NpemUKKwkJCShkZXNjLCAm bWlwLT5zaXplLCAwKTsKKwkJbWlwLT5yb3dfc3RyaWRlID0KKwkJCV9fS0VSTkVMX0RJVl9ST1VO RF9VUChtaXAtPnNpemUud2lkdGgsCisJCQkJCSAgICAgIGRlc2MtPmJsb2NrX3NpemUud2lkdGgp ICoKKwkJCWRlc2MtPmJ5dGVzX3Blcl9ibG9jayAqIG51bV9zYW1wbGVzOworCQlpZiAoIW1pcC0+ cm93X3N0cmlkZSkKKwkJCWdvdG8gaW52YWxpZF9kaW07CisKKwkJbWlwLT5pbWdfc3RyaWRlID0K KwkJCV9fS0VSTkVMX0RJVl9ST1VORF9VUChtaXAtPnNpemUuaGVpZ2h0LAorCQkJCQkgICAgICBk ZXNjLT5ibG9ja19zaXplLmhlaWdodCkgKgorCQkJbWlwLT5yb3dfc3RyaWRlOworCQlpZiAoIW1p cC0+aW1nX3N0cmlkZSkKKwkJCWdvdG8gaW52YWxpZF9kaW07CisKKwkJY2FjaGUtPm1pcF9jaGFp bl9ieXRlcyArPSBtaXAtPmJ5dGVzOworCX0KKwljYWNoZS0+c2hlZXRfYnl0ZXMgPSBjYWNoZS0+ bWlwX2NoYWluX2J5dGVzICogbnVtX2xheWVyczsKKwlpZiAoIWNhY2hlLT5zaGVldF9ieXRlcykK KwkJZ290byBpbnZhbGlkX2RpbTsKKworCXJldHVybiAwOworCitpbnZhbGlkX2RpbToKKwlWTVdf REVCVUdfVVNFUigiSW52YWxpZCBzdXJmYWNlIGxheW91dCBmb3IgZGlydHkgdHJhY2tpbmcuXG4i KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBzdmdhM2RzdXJmYWNlX2dldF9sb2Mg LSBHZXQgYSBzdXJmYWNlIGxvY2F0aW9uIGZyb20gYW4gb2Zmc2V0IGludG8gdGhlCisgKiBiYWNr aW5nIHN0b3JlCisgKiBAY2FjaGU6IFN1cmZhY2UgbGF5b3V0IGRhdGEuCisgKiBAbG9jOiBQb2lu dGVyIHRvIGEgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jIHRvIGJlIGZpbGxlZCBpbi4KKyAqIEBv ZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBzdXJmYWNlIGJhY2tpbmcgc3RvcmUuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAorc3ZnYTNkc3VyZmFjZV9nZXRfbG9jKGNvbnN0IHN0cnVjdCBzdmdhM2Rz dXJmYWNlX2NhY2hlICpjYWNoZSwKKwkJICAgICAgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jICps b2MsCisJCSAgICAgIHNpemVfdCBvZmZzZXQpCit7CisJY29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZh Y2VfbWlwICptaXAgPSAmY2FjaGUtPm1pcFswXTsKKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkX3N1cmZh Y2VfZGVzYyAqZGVzYyA9IGNhY2hlLT5kZXNjOworCXUzMiBsYXllcjsKKwlpbnQgaTsKKworCWlm IChvZmZzZXQgPj0gY2FjaGUtPnNoZWV0X2J5dGVzKQorCQlvZmZzZXQgJT0gY2FjaGUtPnNoZWV0 X2J5dGVzOworCisJbGF5ZXIgPSBvZmZzZXQgLyBjYWNoZS0+bWlwX2NoYWluX2J5dGVzOworCW9m ZnNldCAtPSBsYXllciAqIGNhY2hlLT5taXBfY2hhaW5fYnl0ZXM7CisJZm9yIChpID0gMDsgaSA8 IGNhY2hlLT5udW1fbWlwX2xldmVsczsgKytpLCArK21pcCkgeworCQlpZiAobWlwLT5ieXRlcyA+ IG9mZnNldCkKKwkJCWJyZWFrOworCQlvZmZzZXQgLT0gbWlwLT5ieXRlczsKKwl9CisKKwlsb2Mt PnN1Yl9yZXNvdXJjZSA9IHN2Z2EzZHN1cmZhY2Vfc3VicmVzKGNhY2hlLCBpLCBsYXllcik7CisJ bG9jLT56ID0gb2Zmc2V0IC8gbWlwLT5pbWdfc3RyaWRlOworCW9mZnNldCAtPSBsb2MtPnogKiBt aXAtPmltZ19zdHJpZGU7CisJbG9jLT56ICo9IGRlc2MtPmJsb2NrX3NpemUuZGVwdGg7CisJbG9j LT55ID0gb2Zmc2V0IC8gbWlwLT5yb3dfc3RyaWRlOworCW9mZnNldCAtPSBsb2MtPnkgKiBtaXAt PnJvd19zdHJpZGU7CisJbG9jLT55ICo9IGRlc2MtPmJsb2NrX3NpemUuaGVpZ2h0OworCWxvYy0+ eCA9IG9mZnNldCAvIGRlc2MtPmJ5dGVzX3Blcl9ibG9jazsKKwlsb2MtPnggKj0gZGVzYy0+Ymxv Y2tfc2l6ZS53aWR0aDsKK30KKworLyoqCisgKiBzdmdhM2RzdXJmYWNlX2luY19sb2MgLSBDbGFt cCBpbmNyZW1lbnQgYSBzdXJmYWNlIGxvY2F0aW9uIHdpdGggb25lIGJsb2NrCisgKiBzaXplCisg KiBpbiBlYWNoIGRpbWVuc2lvbi4KKyAqIEBsb2M6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc3ZnYTNk c3VyZmFjZV9sb2MgdG8gYmUgaW5jcmVtZW50ZWQuCisgKgorICogV2hlbiBjb21wdXRpbmcgdGhl IHNpemUgb2YgYSByYW5nZSBhcyBzaXplID0gZW5kIC0gc3RhcnQsIHRoZSByYW5nZSBkb2VzIG5v dAorICogaW5jbHVkZSB0aGUgZW5kIGVsZW1lbnQuIEhvd2V2ZXIgYSBsb2NhdGlvbiByZXByZXNl bnRpbmcgdGhlIGxhc3QgYnl0ZQorICogb2YgYSB0b3VjaGVkIHJlZ2lvbiBpbiB0aGUgYmFja2lu ZyBzdG9yZSAqaXMqIGluY2x1ZGVkIGluIHRoZSByYW5nZS4KKyAqIFRoaXMgZnVuY3Rpb24gbW9k aWZpZXMgc3VjaCBhIGxvY2F0aW9uIHRvIG1hdGNoIHRoZSBlbmQgZGVmaW5pdGlvbgorICogZ2l2 ZW4gYXMgc3RhcnQgKyBzaXplIHdoaWNoIGlzIHRoZSBvbmUgdXNlZCBpbiBhIFNWR0EzZEJveC4K KyAqLworc3RhdGljIGlubGluZSB2b2lkCitzdmdhM2RzdXJmYWNlX2luY19sb2MoY29uc3Qgc3Ry dWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlLAorCQkgICAgICBzdHJ1Y3Qgc3ZnYTNkc3Vy ZmFjZV9sb2MgKmxvYykKK3sKKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkX3N1cmZhY2VfZGVzYyAqZGVz YyA9IGNhY2hlLT5kZXNjOworCXUzMiBtaXAgPSBsb2MtPnN1Yl9yZXNvdXJjZSAlIGNhY2hlLT5u dW1fbWlwX2xldmVsczsKKwljb25zdCBzdHJ1Y3QgZHJtX3Ztd19zaXplICpzaXplID0gJmNhY2hl LT5taXBbbWlwXS5zaXplOworCisJbG9jLT5zdWJfcmVzb3VyY2UrKzsKKwlsb2MtPnggKz0gZGVz Yy0+YmxvY2tfc2l6ZS53aWR0aDsKKwlpZiAobG9jLT54ID4gc2l6ZS0+d2lkdGgpCisJCWxvYy0+ eCA9IHNpemUtPndpZHRoOworCWxvYy0+eSArPSBkZXNjLT5ibG9ja19zaXplLmhlaWdodDsKKwlp ZiAobG9jLT55ID4gc2l6ZS0+aGVpZ2h0KQorCQlsb2MtPnkgPSBzaXplLT5oZWlnaHQ7CisJbG9j LT56ICs9IGRlc2MtPmJsb2NrX3NpemUuZGVwdGg7CisJaWYgKGxvYy0+eiA+IHNpemUtPmRlcHRo KQorCQlsb2MtPnogPSBzaXplLT5kZXB0aDsKK30KKworLyoqCisgKiBzdmdhM2RzdXJmYWNlX21p bl9sb2MgLSBUaGUgc3RhcnQgbG9jYXRpb24gaW4gYSBzdWJyZXNvdXJjZQorICogQGNhY2hlOiBT dXJmYWNlIGxheW91dCBkYXRhLgorICogQHN1Yl9yZXNvdXJjZTogVGhlIHN1YnJlc291cmNlLgor ICogQGxvYzogUG9pbnRlciB0byBhIHN0cnVjdCBzdmdhM2RzdXJmYWNlX2xvYyB0byBiZSBmaWxs ZWQgaW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc3ZnYTNkc3VyZmFjZV9taW5fbG9jKGNv bnN0IHN0cnVjdCBzdmdhM2RzdXJmYWNlX2NhY2hlICpjYWNoZSwKKwkJICAgICAgdTMyIHN1Yl9y ZXNvdXJjZSwKKwkJICAgICAgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jICpsb2MpCit7CisJbG9j LT5zdWJfcmVzb3VyY2UgPSBzdWJfcmVzb3VyY2U7CisJbG9jLT54ID0gbG9jLT55ID0gbG9jLT56 ID0gMDsKK30KKworLyoqCisgKiBzdmdhM2RzdXJmYWNlX21pbl9sb2MgLSBUaGUgZW5kIGxvY2F0 aW9uIGluIGEgc3VicmVzb3VyY2UKKyAqIEBjYWNoZTogU3VyZmFjZSBsYXlvdXQgZGF0YS4KKyAq IEBzdWJfcmVzb3VyY2U6IFRoZSBzdWJyZXNvdXJjZS4KKyAqIEBsb2M6IFBvaW50ZXIgdG8gYSBz dHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9sb2MgdG8gYmUgZmlsbGVkIGluLgorICoKKyAqIEZvbGxvd2lu ZyB0aGUgZW5kIGRlZmluaXRpb24gZ2l2ZW4gaW4gc3ZnYTNkc3VyZmFjZV9pbmNfbG9jKCksCisg KiBDb21wdXRlIHRoZSBlbmQgbG9jYXRpb24gb2YgYSBzdXJmYWNlIHN1YnJlc291cmNlLgorICov CitzdGF0aWMgaW5saW5lIHZvaWQKK3N2Z2EzZHN1cmZhY2VfbWF4X2xvYyhjb25zdCBzdHJ1Y3Qg c3ZnYTNkc3VyZmFjZV9jYWNoZSAqY2FjaGUsCisJCSAgICAgIHUzMiBzdWJfcmVzb3VyY2UsCisJ CSAgICAgIHN0cnVjdCBzdmdhM2RzdXJmYWNlX2xvYyAqbG9jKQoreworCWNvbnN0IHN0cnVjdCBk cm1fdm13X3NpemUgKnNpemU7CisJdTMyIG1pcDsKKworCWxvYy0+c3ViX3Jlc291cmNlID0gc3Vi X3Jlc291cmNlICsgMTsKKwltaXAgPSBzdWJfcmVzb3VyY2UgJSBjYWNoZS0+bnVtX21pcF9sZXZl bHM7CisJc2l6ZSA9ICZjYWNoZS0+bWlwW21pcF0uc2l6ZTsKKwlsb2MtPnggPSBzaXplLT53aWR0 aDsKKwlsb2MtPnkgPSBzaXplLT5oZWlnaHQ7CisJbG9jLT56ID0gc2l6ZS0+ZGVwdGg7Cit9CisK ICNlbmRpZiAvKiBfU1ZHQTNEX1NVUkZBQ0VERUZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2Rydi5oCmluZGV4IGRhZTNhMzliZjQwMi4uNTk3MWMwZDQ3NTA3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5 bmNfZmlsZS5oPgogCiAjZGVmaW5lIFZNV0dGWF9EUklWRVJfTkFNRSAidm13Z2Z4IgotI2RlZmlu ZSBWTVdHRlhfRFJJVkVSX0RBVEUgIjIwMTgwNzA0IgorI2RlZmluZSBWTVdHRlhfRFJJVkVSX0RB VEUgIjIwMTkwMzI4IgogI2RlZmluZSBWTVdHRlhfRFJJVkVSX01BSk9SIDIKLSNkZWZpbmUgVk1X R0ZYX0RSSVZFUl9NSU5PUiAxNQorI2RlZmluZSBWTVdHRlhfRFJJVkVSX01JTk9SIDE2CiAjZGVm aW5lIFZNV0dGWF9EUklWRVJfUEFUQ0hMRVZFTCAwCiAjZGVmaW5lIFZNV0dGWF9GSUZPX1NUQVRJ Q19TSVpFICgxMDI0KjEwMjQpCiAjZGVmaW5lIFZNV0dGWF9NQVhfUkVMT0NBVElPTlMgMjA0OApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFjZS5jIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFjZS5jCmluZGV4IGM0MGQ0NGY0ZDlhZi4u NjM3MDQzZjFiZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9z dXJmYWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3VyZmFjZS5jCkBA IC02OCw2ICs2OCwyMCBAQCBzdHJ1Y3Qgdm13X3N1cmZhY2Vfb2Zmc2V0IHsKIAl1aW50MzJfdCBi b19vZmZzZXQ7CiB9OwogCisvKioKKyAqIHZtd19zdXJmYWNlX2RpcnR5IC0gU3VyZmFjZSBkaXJ0 eS10cmFja2VyCisgKiBAY2FjaGU6IENhY2hlZCBsYXlvdXQgaW5mb3JtYXRpb24gb2YgdGhlIHN1 cmZhY2UuCisgKiBAc2l6ZTogQWNjb3VudGluZyBzaXplIGZvciB0aGUgc3RydWN0IHZtd19zdXJm YWNlX2RpcnR5LgorICogQG51bV9zdWJyZXM6IE51bWJlciBvZiBzdWJyZXNvdXJjZXMuCisgKiBA Ym94ZXM6IEFycmF5IG9mIFNWR0EzZEJveGVzIGluZGljYXRpbmcgZGlydHkgcmVnaW9ucy4gT25l IHBlciBzdWJyZXNvdXJjZS4KKyAqLworc3RydWN0IHZtd19zdXJmYWNlX2RpcnR5IHsKKwlzdHJ1 Y3Qgc3ZnYTNkc3VyZmFjZV9jYWNoZSBjYWNoZTsKKwlzaXplX3Qgc2l6ZTsKKwl1MzIgbnVtX3N1 YnJlczsKKwlTVkdBM2RCb3ggYm94ZXNbMF07Cit9OworCiBzdGF0aWMgdm9pZCB2bXdfdXNlcl9z dXJmYWNlX2ZyZWUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKIHN0YXRpYyBzdHJ1Y3Qgdm13 X3Jlc291cmNlICoKIHZtd191c2VyX3N1cmZhY2VfYmFzZV90b19yZXMoc3RydWN0IHR0bV9iYXNl X29iamVjdCAqYmFzZSk7CkBAIC05Niw2ICsxMTAsMTMgQEAgdm13X2diX3N1cmZhY2VfcmVmZXJl bmNlX2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZHJtX3Zt d19nYl9zdXJmYWNlX3JlZl9leHRfcmVwICpyZXAsCiAJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7CiAKK3N0YXRpYyB2b2lkIHZtd19zdXJmYWNlX2RpcnR5X2ZyZWUoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyBpbnQgdm13X3N1cmZhY2VfZGlydHlfYWxsb2Moc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyBpbnQgdm13X3N1cmZhY2VfZGlydHlfc3lu YyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworc3RhdGljIHZvaWQgdm13X3N1cmZhY2VfZGly dHlfcmFuZ2VfYWRkKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywgc2l6ZV90IHN0YXJ0LAorCQkJ CQlzaXplX3QgZW5kKTsKK3N0YXRpYyBpbnQgdm13X3N1cmZhY2VfY2xlYW4oc3RydWN0IHZtd19y ZXNvdXJjZSAqcmVzKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9j b252IHVzZXJfc3VyZmFjZV9jb252ID0gewogCS5vYmplY3RfdHlwZSA9IFZNV19SRVNfU1VSRkFD RSwKIAkuYmFzZV9vYmpfdG9fcmVzID0gdm13X3VzZXJfc3VyZmFjZV9iYXNlX3RvX3JlcywKQEAg LTEzMyw3ICsxNTQsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2bXdfcmVzX2Z1bmMgdm13X2di X3N1cmZhY2VfZnVuYyA9IHsKIAkuY3JlYXRlID0gdm13X2diX3N1cmZhY2VfY3JlYXRlLAogCS5k ZXN0cm95ID0gdm13X2diX3N1cmZhY2VfZGVzdHJveSwKIAkuYmluZCA9IHZtd19nYl9zdXJmYWNl X2JpbmQsCi0JLnVuYmluZCA9IHZtd19nYl9zdXJmYWNlX3VuYmluZAorCS51bmJpbmQgPSB2bXdf Z2Jfc3VyZmFjZV91bmJpbmQsCisJLmRpcnR5X2FsbG9jID0gdm13X3N1cmZhY2VfZGlydHlfYWxs b2MsCisJLmRpcnR5X2ZyZWUgPSB2bXdfc3VyZmFjZV9kaXJ0eV9mcmVlLAorCS5kaXJ0eV9zeW5j ID0gdm13X3N1cmZhY2VfZGlydHlfc3luYywKKwkuZGlydHlfcmFuZ2VfYWRkID0gdm13X3N1cmZh Y2VfZGlydHlfcmFuZ2VfYWRkLAorCS5jbGVhbiA9IHZtd19zdXJmYWNlX2NsZWFuLAogfTsKIAog LyoqCkBAIC02NDEsNiArNjY3LDcgQEAgc3RhdGljIHZvaWQgdm13X3VzZXJfc3VyZmFjZV9mcmVl KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKIAlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 ID0gc3JmLT5yZXMuZGV2X3ByaXY7CiAJdWludDMyX3Qgc2l6ZSA9IHVzZXJfc3JmLT5zaXplOwog CisJV0FSTl9PTl9PTkNFKHJlcy0+ZGlydHkpOwogCWlmICh1c2VyX3NyZi0+bWFzdGVyKQogCQlk cm1fbWFzdGVyX3B1dCgmdXNlcl9zcmYtPm1hc3Rlcik7CiAJa2ZyZWUoc3JmLT5vZmZzZXRzKTsK QEAgLTExNzQsMTAgKzEyMDEsMTYgQEAgc3RhdGljIGludCB2bXdfZ2Jfc3VyZmFjZV9iaW5kKHN0 cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkJY21kMi0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURf VVBEQVRFX0dCX1NVUkZBQ0U7CiAJCWNtZDItPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZDItPmJv ZHkpOwogCQljbWQyLT5ib2R5LnNpZCA9IHJlcy0+aWQ7Ci0JCXJlcy0+YmFja3VwX2RpcnR5ID0g ZmFsc2U7CiAJfQogCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc3VibWl0X3NpemUpOwogCisJ aWYgKHJlcy0+YmFja3VwLT5kaXJ0eSAmJiByZXMtPmJhY2t1cF9kaXJ0eSkgeworCQkvKiBXZSd2 ZSBqdXN0IG1hZGUgYSBmdWxsIHVwbG9hZC4gQ2VhciBkaXJ0eSByZWdpb25zLiAqLworCQl2bXdf Ym9fZGlydHlfY2xlYXJfcmVzKHJlcyk7CisJfQorCisJcmVzLT5iYWNrdXBfZGlydHkgPSBmYWxz ZTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjQyLDcgKzE2NzUsOCBAQCB2bXdfZ2Jfc3VyZmFj ZV9kZWZpbmVfaW50ZXJuYWwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCX0KIAkJfQogCX0g ZWxzZSBpZiAocmVxLT5iYXNlLmRybV9zdXJmYWNlX2ZsYWdzICYKLQkJICAgZHJtX3Ztd19zdXJm YWNlX2ZsYWdfY3JlYXRlX2J1ZmZlcikKKwkJICAgKGRybV92bXdfc3VyZmFjZV9mbGFnX2NyZWF0 ZV9idWZmZXIgfAorCQkgICAgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY29oZXJlbnQpKQogCQlyZXQg PSB2bXdfdXNlcl9ib19hbGxvYyhkZXZfcHJpdiwgdGZpbGUsCiAJCQkJCXJlcy0+YmFja3VwX3Np emUsCiAJCQkJCXJlcS0+YmFzZS5kcm1fc3VyZmFjZV9mbGFncyAmCkBAIC0xNjU2LDYgKzE2OTAs MjYgQEAgdm13X2diX3N1cmZhY2VfZGVmaW5lX2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwlpZiAocmVxLT5iYXNlLmRybV9zdXJmYWNl X2ZsYWdzICYgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY29oZXJlbnQpIHsKKwkJc3RydWN0IHZtd19i dWZmZXJfb2JqZWN0ICpiYWNrdXAgPSByZXMtPmJhY2t1cDsKKworCQl0dG1fYm9fcmVzZXJ2ZSgm YmFja3VwLT5iYXNlLCBmYWxzZSwgZmFsc2UsIE5VTEwpOworCQlpZiAoIXJlcy0+ZnVuYy0+ZGly dHlfYWxsb2MpCisJCQlyZXQgPSAtRUlOVkFMOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHZtd19i b19kaXJ0eV9hZGQoYmFja3VwKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXJlcy0+Y29oZXJlbnQgPSB0 cnVlOworCQkJcmV0ID0gcmVzLT5mdW5jLT5kaXJ0eV9hbGxvYyhyZXMpOworCQl9CisJCXR0bV9i b191bnJlc2VydmUoJmJhY2t1cC0+YmFzZSk7CisJCWlmIChyZXQpIHsKKwkJCXZtd19yZXNvdXJj ZV91bnJlZmVyZW5jZSgmcmVzKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJfQorCiAJ dG1wID0gdm13X3Jlc291cmNlX3JlZmVyZW5jZShyZXMpOwogCXJldCA9IHR0bV9wcmltZV9vYmpl Y3RfaW5pdCh0ZmlsZSwgcmVzLT5iYWNrdXBfc2l6ZSwgJnVzZXJfc3JmLT5wcmltZSwKIAkJCQkg ICAgcmVxLT5iYXNlLmRybV9zdXJmYWNlX2ZsYWdzICYKQEAgLTE3NjQsMyArMTgxOCwzMzggQEAg dm13X2diX3N1cmZhY2VfcmVmZXJlbmNlX2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAKIAlyZXR1cm4gcmV0OwogfQorCisvKioKKyAqIHZtd19zdWJyZXNfZGlydHlfYWRkIC0gQWRk IGEgZGlydHkgcmVnaW9uIHRvIGEgc3VicmVzb3VyY2UKKyAqIEBkaXJ0eTogVGhlIHN1cmZhY2Vz J3MgZGlydHkgdHJhY2tlci4KKyAqIEBsb2Nfc3RhcnQ6IFRoZSBsb2NhdGlvbiBjb3JyZXNwb25k aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmVnaW9uLgorICogQGxvY19lbmQ6IFRoZSBsb2NhdGlv biBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4KKyAqCisgKiBBcyB3ZSBh cmUgYXNzdW1pbmcgdGhhdCBAbG9jX3N0YXJ0IGFuZCBAbG9jX2VuZCByZXByZXNlbnQgYSBzZXF1 ZW50aWFsCisgKiByYW5nZSBvZiBiYWNraW5nIHN0b3JlIG1lbW9yeSwgaWYgdGhlIHJlZ2lvbiBz cGFucyBtdWx0aXBsZSBsaW5lcyB0aGVuCisgKiByZWdhcmRsZXNzIG9mIHRoZSB4IGNvb3JkaW5h dGUsIHRoZSBmdWxsIGxpbmVzIGFyZSBkaXJ0aWVkLgorICogQ29ycmVzcG9uZGluZ2x5IGlmIHRo ZSByZWdpb24gc3BhbnMgbXVsdGlwbGUgeiBzbGljZXMsIHRoZW4gZnVsbCByYXRoZXIKKyAqIHRo YW4gcGFydGlhbCB6IHNsaWNlcyBhcmUgZGlydGllZC4KKyAqLworc3RhdGljIHZvaWQgdm13X3N1 YnJlc19kaXJ0eV9hZGQoc3RydWN0IHZtd19zdXJmYWNlX2RpcnR5ICpkaXJ0eSwKKwkJCQkgY29u c3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfbG9jICpsb2Nfc3RhcnQsCisJCQkJIGNvbnN0IHN0cnVj dCBzdmdhM2RzdXJmYWNlX2xvYyAqbG9jX2VuZCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkc3Vy ZmFjZV9jYWNoZSAqY2FjaGUgPSAmZGlydHktPmNhY2hlOworCVNWR0EzZEJveCAqYm94ID0gJmRp cnR5LT5ib3hlc1tsb2Nfc3RhcnQtPnN1Yl9yZXNvdXJjZV07CisJdTMyIG1pcCA9IGxvY19zdGFy dC0+c3ViX3Jlc291cmNlICUgY2FjaGUtPm51bV9taXBfbGV2ZWxzOworCWNvbnN0IHN0cnVjdCBk cm1fdm13X3NpemUgKnNpemUgPSAmY2FjaGUtPm1pcFttaXBdLnNpemU7CisJdTMyIGJveF9jMiA9 IGJveC0+eiArIGJveC0+ZDsKKworCWlmIChXQVJOX09OKGxvY19zdGFydC0+c3ViX3Jlc291cmNl ID49IGRpcnR5LT5udW1fc3VicmVzKSkKKwkJcmV0dXJuOworCisJaWYgKGJveC0+ZCA9PSAwIHx8 IGJveC0+eiA+IGxvY19zdGFydC0+eikKKwkJYm94LT56ID0gbG9jX3N0YXJ0LT56OworCWlmIChi b3hfYzIgPCBsb2NfZW5kLT56KQorCQlib3gtPmQgPSBsb2NfZW5kLT56IC0gYm94LT56OworCisJ aWYgKGxvY19zdGFydC0+eiArIDEgPT0gbG9jX2VuZC0+eikgeworCQlib3hfYzIgPSBib3gtPnkg KyBib3gtPmg7CisJCWlmIChib3gtPmggPT0gMCB8fCBib3gtPnkgPiBsb2Nfc3RhcnQtPnkpCisJ CQlib3gtPnkgPSBsb2Nfc3RhcnQtPnk7CisJCWlmIChib3hfYzIgPCBsb2NfZW5kLT55KQorCQkJ Ym94LT5oID0gbG9jX2VuZC0+eSAtIGJveC0+eTsKKworCQlpZiAobG9jX3N0YXJ0LT55ICsgMSA9 PSBsb2NfZW5kLT55KSB7CisJCQlib3hfYzIgPSBib3gtPnggKyBib3gtPnc7CisJCQlpZiAoYm94 LT53ID09IDAgfHwgYm94LT54ID4gbG9jX3N0YXJ0LT54KQorCQkJCWJveC0+eCA9IGxvY19zdGFy dC0+eDsKKwkJCWlmIChib3hfYzIgPCBsb2NfZW5kLT54KQorCQkJCWJveC0+dyA9IGxvY19lbmQt PnggLSBib3gtPng7CisJCX0gZWxzZSB7CisJCQlib3gtPnggPSAwOworCQkJYm94LT53ID0gc2l6 ZS0+d2lkdGg7CisJCX0KKwl9IGVsc2UgeworCQlib3gtPnkgPSAwOworCQlib3gtPmggPSBzaXpl LT5oZWlnaHQ7CisJCWJveC0+eCA9IDA7CisJCWJveC0+dyA9IHNpemUtPndpZHRoOworCX0KK30K KworLyoqCisgKiB2bXdfc3VicmVzX2RpcnR5X2Z1bGwgLSBNYXJrIGEgZnVsbCBzdWJyZXNvdXJj ZSBhcyBkaXJ0eQorICogQGRpcnR5OiBUaGUgc3VyZmFjZSdzIGRpcnR5IHRyYWNrZXIuCisgKiBA c3VicmVzOiBUaGUgc3VicmVzb3VyY2UKKyAqLworc3RhdGljIHZvaWQgdm13X3N1YnJlc19kaXJ0 eV9mdWxsKHN0cnVjdCB2bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHksIHUzMiBzdWJyZXMpCit7CisJ Y29uc3Qgc3RydWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlID0gJmRpcnR5LT5jYWNoZTsK Kwl1MzIgbWlwID0gc3VicmVzICUgY2FjaGUtPm51bV9taXBfbGV2ZWxzOworCWNvbnN0IHN0cnVj dCBkcm1fdm13X3NpemUgKnNpemUgPSAmY2FjaGUtPm1pcFttaXBdLnNpemU7CisJU1ZHQTNkQm94 ICpib3ggPSAmZGlydHktPmJveGVzW3N1YnJlc107CisKKwlib3gtPnggPSAwOworCWJveC0+eSA9 IDA7CisJYm94LT56ID0gMDsKKwlib3gtPncgPSBzaXplLT53aWR0aDsKKwlib3gtPmggPSBzaXpl LT5oZWlnaHQ7CisJYm94LT5kID0gc2l6ZS0+ZGVwdGg7Cit9CisKKy8qCisgKiB2bXdfc3VyZmFj ZV90ZXhfZGlydHlfYWRkX3JhbmdlIC0gVGhlIGRpcnR5X2FkZF9yYW5nZSBjYWxsYmFjayBmb3Ig dGV4dHVyZQorICogc3VyZmFjZXMuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19zdXJmYWNlX3RleF9k aXJ0eV9yYW5nZV9hZGQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJCQkgICAgc2l6ZV90 IHN0YXJ0LCBzaXplX3QgZW5kKQoreworCXN0cnVjdCB2bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHkg PQorCQkoc3RydWN0IHZtd19zdXJmYWNlX2RpcnR5ICopIHJlcy0+ZGlydHk7CisJc2l6ZV90IGJh Y2t1cF9lbmQgPSByZXMtPmJhY2t1cF9vZmZzZXQgKyByZXMtPmJhY2t1cF9zaXplOworCXN0cnVj dCBzdmdhM2RzdXJmYWNlX2xvYyBsb2MxLCBsb2MyOworCWNvbnN0IHN0cnVjdCBzdmdhM2RzdXJm YWNlX2NhY2hlICpjYWNoZTsKKworCXN0YXJ0ID0gbWF4X3Qoc2l6ZV90LCBzdGFydCwgcmVzLT5i YWNrdXBfb2Zmc2V0KSAtIHJlcy0+YmFja3VwX29mZnNldDsKKwllbmQgPSBtaW4oZW5kLCBiYWNr dXBfZW5kKSAtIHJlcy0+YmFja3VwX29mZnNldDsKKwljYWNoZSA9ICZkaXJ0eS0+Y2FjaGU7CisJ c3ZnYTNkc3VyZmFjZV9nZXRfbG9jKGNhY2hlLCAmbG9jMSwgc3RhcnQpOworCXN2Z2EzZHN1cmZh Y2VfZ2V0X2xvYyhjYWNoZSwgJmxvYzIsIGVuZCAtIDEpOworCXN2Z2EzZHN1cmZhY2VfaW5jX2xv YyhjYWNoZSwgJmxvYzIpOworCisJaWYgKGxvYzEuc3ViX3Jlc291cmNlICsgMSA9PSBsb2MyLnN1 Yl9yZXNvdXJjZSkgeworCQkvKiBEaXJ0eSByYW5nZSBjb3ZlcnMgYSBzaW5nbGUgc3ViLXJlc291 cmNlICovCisJCXZtd19zdWJyZXNfZGlydHlfYWRkKGRpcnR5LCAmbG9jMSwgJmxvYzIpOworCX0g ZWxzZSB7CisJCS8qIERpcnR5IHJhbmdlIGNvdmVycyBtdWx0aXBsZSBzdWItcmVzb3VyY2VzICov CisJCXN0cnVjdCBzdmdhM2RzdXJmYWNlX2xvYyBsb2NfbWluLCBsb2NfbWF4OworCQl1MzIgc3Vi X3JlcyA9IGxvYzEuc3ViX3Jlc291cmNlOworCisJCXN2Z2EzZHN1cmZhY2VfbWF4X2xvYyhjYWNo ZSwgbG9jMS5zdWJfcmVzb3VyY2UsICZsb2NfbWF4KTsKKwkJdm13X3N1YnJlc19kaXJ0eV9hZGQo ZGlydHksICZsb2MxLCAmbG9jX21heCk7CisJCXN2Z2EzZHN1cmZhY2VfbWluX2xvYyhjYWNoZSwg bG9jMi5zdWJfcmVzb3VyY2UgLSAxLCAmbG9jX21pbik7CisJCXZtd19zdWJyZXNfZGlydHlfYWRk KGRpcnR5LCAmbG9jX21pbiwgJmxvYzIpOworCQlmb3IgKHN1Yl9yZXMgPSBsb2MxLnN1Yl9yZXNv dXJjZSArIDE7CisJCSAgICAgc3ViX3JlcyA8IGxvYzIuc3ViX3Jlc291cmNlIC0gMTsgKytzdWJf cmVzKQorCQkJdm13X3N1YnJlc19kaXJ0eV9mdWxsKGRpcnR5LCBzdWJfcmVzKTsKKwl9Cit9CisK Ky8qCisgKiB2bXdfc3VyZmFjZV90ZXhfZGlydHlfYWRkX3JhbmdlIC0gVGhlIGRpcnR5X2FkZF9y YW5nZSBjYWxsYmFjayBmb3IgYnVmZmVyCisgKiBzdXJmYWNlcy4KKyAqLworc3RhdGljIHZvaWQg dm13X3N1cmZhY2VfYnVmX2RpcnR5X3JhbmdlX2FkZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMs CisJCQkJCSAgICBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCit7CisJc3RydWN0IHZtd19zdXJm YWNlX2RpcnR5ICpkaXJ0eSA9CisJCShzdHJ1Y3Qgdm13X3N1cmZhY2VfZGlydHkgKikgcmVzLT5k aXJ0eTsKKwljb25zdCBzdHJ1Y3Qgc3ZnYTNkc3VyZmFjZV9jYWNoZSAqY2FjaGUgPSAmZGlydHkt PmNhY2hlOworCXNpemVfdCBiYWNrdXBfZW5kID0gcmVzLT5iYWNrdXBfb2Zmc2V0ICsgY2FjaGUt Pm1pcF9jaGFpbl9ieXRlczsKKwlTVkdBM2RCb3ggKmJveCA9ICZkaXJ0eS0+Ym94ZXNbMF07CisJ dTMyIGJveF9jMjsKKworCWJveC0+aCA9IGJveC0+ZCA9IDE7CisJc3RhcnQgPSBtYXhfdChzaXpl X3QsIHN0YXJ0LCByZXMtPmJhY2t1cF9vZmZzZXQpIC0gcmVzLT5iYWNrdXBfb2Zmc2V0OworCWVu ZCA9IG1pbihlbmQsIGJhY2t1cF9lbmQpIC0gcmVzLT5iYWNrdXBfb2Zmc2V0OworCWJveF9jMiA9 IGJveC0+eCArIGJveC0+dzsKKwlpZiAoYm94LT53ID09IDAgfHwgYm94LT54ID4gc3RhcnQpCisJ CWJveC0+eCA9IHN0YXJ0OworCWlmIChib3hfYzIgPCBlbmQpCisJCWJveC0+dyA9IGVuZCAtIGJv eC0+eDsKK30KKworLyoKKyAqIHZtd19zdXJmYWNlX3RleF9kaXJ0eV9hZGRfcmFuZ2UgLSBUaGUg ZGlydHlfYWRkX3JhbmdlIGNhbGxiYWNrIGZvciBzdXJmYWNlcworICovCitzdGF0aWMgdm9pZCB2 bXdfc3VyZmFjZV9kaXJ0eV9yYW5nZV9hZGQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLCBzaXpl X3Qgc3RhcnQsCisJCQkJCXNpemVfdCBlbmQpCit7CisJc3RydWN0IHZtd19zdXJmYWNlICpzcmYg PSB2bXdfcmVzX3RvX3NyZihyZXMpOworCisJaWYgKFdBUk5fT04oZW5kIDw9IHJlcy0+YmFja3Vw X29mZnNldCB8fAorCQkgICAgc3RhcnQgPj0gcmVzLT5iYWNrdXBfb2Zmc2V0ICsgcmVzLT5iYWNr dXBfc2l6ZSkpCisJCXJldHVybjsKKworCWlmIChzcmYtPmZvcm1hdCA9PSBTVkdBM0RfQlVGRkVS KQorCQl2bXdfc3VyZmFjZV9idWZfZGlydHlfcmFuZ2VfYWRkKHJlcywgc3RhcnQsIGVuZCk7CisJ ZWxzZQorCQl2bXdfc3VyZmFjZV90ZXhfZGlydHlfcmFuZ2VfYWRkKHJlcywgc3RhcnQsIGVuZCk7 Cit9CisKKy8qCisgKiB2bXdfc3VyZmFjZV9kaXJ0eV9zeW5jIC0gVGhlIHN1cmZhY2UncyBkaXJ0 eV9zeW5jIGNhbGxiYWNrLgorICovCitzdGF0aWMgaW50IHZtd19zdXJmYWNlX2RpcnR5X3N5bmMo c3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSByZXMtPmRldl9wcml2OworCWJvb2wgaGFzX2R4ID0gMDsKKwl1MzIgaSwgbnVtX2RpcnR5 OworCXN0cnVjdCB2bXdfc3VyZmFjZV9kaXJ0eSAqZGlydHkgPQorCQkoc3RydWN0IHZtd19zdXJm YWNlX2RpcnR5ICopIHJlcy0+ZGlydHk7CisJc2l6ZV90IGFsbG9jX3NpemU7CisJY29uc3Qgc3Ry dWN0IHN2Z2EzZHN1cmZhY2VfY2FjaGUgKmNhY2hlID0gJmRpcnR5LT5jYWNoZTsKKwlzdHJ1Y3Qg eworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWFVwZGF0ZVN1YlJlc291 cmNlIGJvZHk7CisJfSAqY21kMTsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVy OworCQlTVkdBM2RDbWRVcGRhdGVHQkltYWdlIGJvZHk7CisJfSAqY21kMjsKKwl2b2lkICpjbWQ7 CisKKwludW1fZGlydHkgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkaXJ0eS0+bnVtX3N1YnJlczsg KytpKSB7CisJCWNvbnN0IFNWR0EzZEJveCAqYm94ID0gJmRpcnR5LT5ib3hlc1tpXTsKKworCQlp ZiAoYm94LT5kKQorCQkJbnVtX2RpcnR5Kys7CisJfQorCisJaWYgKCFudW1fZGlydHkpCisJCWdv dG8gb3V0OworCisJYWxsb2Nfc2l6ZSA9IG51bV9kaXJ0eSAqICgoaGFzX2R4KSA/IHNpemVvZigq Y21kMSkgOiBzaXplb2YoKmNtZDIpKTsKKwljbWQgPSBWTVdfRklGT19SRVNFUlZFKGRldl9wcml2 LCBhbGxvY19zaXplKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQxID0g Y21kOworCWNtZDIgPSBjbWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlydHktPm51bV9zdWJyZXM7 ICsraSkgeworCQljb25zdCBTVkdBM2RCb3ggKmJveCA9ICZkaXJ0eS0+Ym94ZXNbaV07CisKKwkJ aWYgKCFib3gtPmQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEWF9VUERBVEVfU1VCUkVT T1VSQ0UgaXMgYXdhcmUgb2YgYXJyYXkgc3VyZmFjZXMuCisJCSAqIFVQREFURV9HQl9JTUFHRSBp cyBub3QuCisJCSAqLworCQlpZiAoaGFzX2R4KSB7CisJCQljbWQxLT5oZWFkZXIuaWQgPSBTVkdB XzNEX0NNRF9EWF9VUERBVEVfU1VCUkVTT1VSQ0U7CisJCQljbWQxLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQxLT5ib2R5KTsKKwkJCWNtZDEtPmJvZHkuc2lkID0gcmVzLT5pZDsKKwkJCWNtZDEt PmJvZHkuc3ViUmVzb3VyY2UgPSBpOworCQkJY21kMS0+Ym9keS5ib3ggPSAqYm94OworCQkJY21k MSsrOworCQl9IGVsc2UgeworCQkJY21kMi0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfVVBEQVRF X0dCX0lNQUdFOworCQkJY21kMi0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kMi0+Ym9keSk7CisJ CQljbWQyLT5ib2R5LmltYWdlLnNpZCA9IHJlcy0+aWQ7CisJCQljbWQyLT5ib2R5LmltYWdlLmZh Y2UgPSBpIC8gY2FjaGUtPm51bV9taXBfbGV2ZWxzOworCQkJY21kMi0+Ym9keS5pbWFnZS5taXBt YXAgPSBpIC0KKwkJCQkoY2FjaGUtPm51bV9taXBfbGV2ZWxzICogY21kMi0+Ym9keS5pbWFnZS5m YWNlKTsKKwkJCWNtZDItPmJvZHkuYm94ID0gKmJveDsKKwkJCWNtZDIrKzsKKwkJfQorCisJfQor CXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgYWxsb2Nfc2l6ZSk7Cisgb3V0OgorCW1lbXNldCgm ZGlydHktPmJveGVzWzBdLCAwLCBzaXplb2YoZGlydHktPmJveGVzWzBdKSAqCisJICAgICAgIGRp cnR5LT5udW1fc3VicmVzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdm13X3N1cmZhY2Vf ZGlydHlfYWxsb2MgLSBUaGUgc3VyZmFjZSdzIGRpcnR5X2FsbG9jIGNhbGxiYWNrLgorICovCitz dGF0aWMgaW50IHZtd19zdXJmYWNlX2RpcnR5X2FsbG9jKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJl cykKK3sKKwlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiA9IHZtd19yZXNfdG9fc3JmKHJlcyk7CisJ c3RydWN0IHZtd19zdXJmYWNlX2RpcnR5ICpkaXJ0eTsKKwl1MzIgbnVtX2xheWVycyA9IDE7CisJ dTMyIG51bV9taXA7CisJdTMyIG51bV9zdWJyZXM7CisJdTMyIG51bV9zYW1wbGVzOworCXNpemVf dCBkaXJ0eV9zaXplLCBhY2Nfc2l6ZTsKKwlzdGF0aWMgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4 IGN0eCA9IHsKKwkJLmludGVycnVwdGlibGUgPSBmYWxzZSwKKwkJLm5vX3dhaXRfZ3B1ID0gZmFs c2UKKwl9OworCWludCByZXQ7CisKKwlpZiAoc3JmLT5hcnJheV9zaXplKQorCQludW1fbGF5ZXJz ID0gc3JmLT5hcnJheV9zaXplOworCWVsc2UgaWYgKHNyZi0+ZmxhZ3MgJiBTVkdBM0RfU1VSRkFD RV9DVUJFTUFQKQorCQludW1fbGF5ZXJzICo9IFNWR0EzRF9NQVhfU1VSRkFDRV9GQUNFUzsKKwor CW51bV9taXAgPSBzcmYtPm1pcF9sZXZlbHNbMF07CisJaWYgKCFudW1fbWlwKQorCQludW1fbWlw ID0gMTsKKworCW51bV9zdWJyZXMgPSBudW1fbGF5ZXJzICogbnVtX21pcDsKKwlkaXJ0eV9zaXpl ID0gc2l6ZW9mKCpkaXJ0eSkgKyBudW1fc3VicmVzICogc2l6ZW9mKGRpcnR5LT5ib3hlc1swXSk7 CisJYWNjX3NpemUgPSB0dG1fcm91bmRfcG90KGRpcnR5X3NpemUpOworCXJldCA9IHR0bV9tZW1f Z2xvYmFsX2FsbG9jKHZtd19tZW1fZ2xvYihyZXMtPmRldl9wcml2KSwKKwkJCQkgICBhY2Nfc2l6 ZSwgJmN0eCk7CisJaWYgKHJldCkgeworCQlWTVdfREVCVUdfVVNFUigiT3V0IG9mIGdyYXBoaWNz IG1lbW9yeSBmb3Igc3VyZmFjZSAiCisJCQkgICAgICAgImRpcnR5IHRyYWNrZXIuXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlkaXJ0eSA9IGt2emFsbG9jKGRpcnR5X3NpemUsIEdGUF9LRVJO RUwpOworCWlmICghZGlydHkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fZGly dHk7CisJfQorCisJbnVtX3NhbXBsZXMgPSBtYXhfdCh1MzIsIDEsIHNyZi0+bXVsdGlzYW1wbGVf Y291bnQpOworCXJldCA9IHN2Z2EzZHN1cmZhY2Vfc2V0dXBfY2FjaGUoJnNyZi0+YmFzZV9zaXpl LCBzcmYtPmZvcm1hdCwgbnVtX21pcCwKKwkJCQkJbnVtX2xheWVycywgbnVtX3NhbXBsZXMsICZk aXJ0eS0+Y2FjaGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X25vX2NhY2hlOworCisJZGlydHkt Pm51bV9zdWJyZXMgPSBudW1fc3VicmVzOworCWRpcnR5LT5zaXplID0gYWNjX3NpemU7CisJcmVz LT5kaXJ0eSA9IChzdHJ1Y3Qgdm13X3Jlc291cmNlX2RpcnR5ICopIGRpcnR5OworCisJcmV0dXJu IDA7CisKK291dF9ub19jYWNoZToKKwlrdmZyZWUoZGlydHkpOworb3V0X25vX2RpcnR5OgorCXR0 bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKHJlcy0+ZGV2X3ByaXYpLCBhY2Nfc2l6ZSk7 CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZtd19zdXJmYWNlX2RpcnR5X2ZyZWUgLSBUaGUg c3VyZmFjZSdzIGRpcnR5X2ZyZWUgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgdm13X3N1cmZh Y2VfZGlydHlfZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJc3RydWN0IHZtd19z dXJmYWNlX2RpcnR5ICpkaXJ0eSA9CisJCShzdHJ1Y3Qgdm13X3N1cmZhY2VfZGlydHkgKikgcmVz LT5kaXJ0eTsKKwlzaXplX3QgYWNjX3NpemUgPSBkaXJ0eS0+c2l6ZTsKKworCWt2ZnJlZShkaXJ0 eSk7CisJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdfbWVtX2dsb2IocmVzLT5kZXZfcHJpdiksIGFj Y19zaXplKTsKKwlyZXMtPmRpcnR5ID0gTlVMTDsKK30KKworLyoKKyAqIHZtd19zdXJmYWNlX2Ns ZWFuIC0gVGhlIHN1cmZhY2UncyBjbGVhbiBjYWxsYmFjaworICovCitzdGF0aWMgaW50IHZtd19z dXJmYWNlX2NsZWFuKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKKwlz dHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRSZWFkYmFja0dC U3VyZmFjZSBib2R5OworCX0gKmNtZDsKKworCWFsbG9jX3NpemUgPSBzaXplb2YoKmNtZCk7CisJ Y21kID0gVk1XX0ZJRk9fUkVTRVJWRShkZXZfcHJpdiwgYWxsb2Nfc2l6ZSk7CisJaWYgKCFjbWQp CisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9SRUFE QkFDS19HQl9TVVJGQUNFOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsK KwljbWQtPmJvZHkuc2lkID0gcmVzLT5pZDsKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIGFs bG9jX3NpemUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJt L3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oCmluZGV4IDM5OWY1 ODMxN2NmZi4uMDJjYWIzM2YyZjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dm eF9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaApAQCAtODkxLDExICs4 OTEsMTMgQEAgc3RydWN0IGRybV92bXdfc2hhZGVyX2FyZyB7CiAgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZS4KICAqIEBkcm1fdm13X3N1cmZhY2VfZmxhZ19j cmVhdGVfYnVmZmVyOiBDcmVhdGUgYSBiYWNrdXAgYnVmZmVyIGlmIG5vbmUgaXMKICAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbi4KKyAqIEBkcm1fdm13X3N1cmZh Y2VfZmxhZ19jb2hlcmVudDogICAgICBCYWNrIHN1cmZhY2Ugd2l0aCBjb2hlcmVudCBtZW1vcnku CiAgKi8KIGVudW0gZHJtX3Ztd19zdXJmYWNlX2ZsYWdzIHsKIAlkcm1fdm13X3N1cmZhY2VfZmxh Z19zaGFyZWFibGUgPSAoMSA8PCAwKSwKIAlkcm1fdm13X3N1cmZhY2VfZmxhZ19zY2Fub3V0ID0g KDEgPDwgMSksCi0JZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlciA9ICgxIDw8IDIp CisJZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlciA9ICgxIDw8IDIpLAorCWRybV92 bXdfc3VyZmFjZV9mbGFnX2NvaGVyZW50ID0gKDEgPDwgMyksCiB9OwogCiAvKioKLS0gCjIuMjAu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs