From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m=20=28VMware=29?= Subject: [PATCH v6 6/9] drm/vmwgfx: Implement an infrastructure for write-coherent resources Date: Wed, 12 Jun 2019 17:19:47 +0200 Message-ID: <20190612151950.2870-7-thellstrom@vmwopensource.org> References: <20190612151950.2870-1-thellstrom@vmwopensource.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from ste-pvt-msa1.bahnhof.se (ste-pvt-msa1.bahnhof.se [213.80.101.70]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C69688924 for ; Wed, 12 Jun 2019 15:20:23 +0000 (UTC) In-Reply-To: <20190612151950.2870-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, hch@infradead.org, linux-graphics-maintainer@vmware.com, Deepak Rawat List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgoKVGhpcyBpbmZy YXN0cnVjdHVyZSB3aWxsLCBmb3IgY29oZXJlbnQgcmVzb3VyY2VzLCBtYWtlIHN1cmUgdGhhdApm cm9tIHRoZSB1c2VyLXNwYWNlIHBvaW50IG9mIHZpZXcsIGRhdGEgd3JpdHRlbiBieSB0aGUgQ1BV IGlzIGltbWVkaWF0ZWx5CmF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIHRvIHRoZSBHUFUgYXQgcmVz b3VyY2UgdmFsaWRhdGlvbiB0aW1lLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8 dGhlbGxzdHJvbUB2bXdhcmUuY29tPgpSZXZpZXdlZC1ieTogRGVlcGFrIFJhd2F0IDxkcmF3YXRA dm13YXJlLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWcgICAgICAgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZSAgICAgICAgICAg ICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jICAgICAgICAg ICAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jICAgICAgICAg ICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAgICAgICAgICAg fCAgMjYgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYyAgICAgICB8 ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9wYWdlX2RpcnR5LmMgICAgfCA0 MDkgKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNv dXJjZS5jICAgICAgfCAgNTcgKysrCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNv dXJjZV9wcml2LmggfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRh dGlvbi5jICAgIHwgIDcxICsrKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRh dGlvbi5oICAgIHwgIDE2ICstCiAxMSBmaWxlcyBjaGFuZ2VkLCA1ODQgaW5zZXJ0aW9ucygrKSwg MjAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfcGFnZV9kaXJ0eS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnCmluZGV4IDZiMjhhMzI2 ZjhiYi4uZDVmZDgxYTUyMWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tj b25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnCkBAIC04LDYgKzgsNyBA QCBjb25maWcgRFJNX1ZNV0dGWAogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJc2VsZWN0IERS TV9UVE0KIAlzZWxlY3QgRkIKKwlzZWxlY3QgQVNfRElSVFlfSEVMUEVSUwogCSMgT25seSBuZWVk ZWQgZm9yIHRoZSB0cmFuc2l0aW9uYWwgdXNlIG9mIGRybV9jcnRjX2luaXQgLSBjYW4gYmUgcmVt b3ZlZAogCSMgYWdhaW4gb25jZSB2bXdnZnggc2V0cyB1cCB0aGUgcHJpbWFyeSBwbGFuZSBpdHNl bGYuCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZQppbmRleCA4 ODQxYmQzMGUxZTUuLmM4NzdhMjFhMDczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCkBAIC04 LDcgKzgsNyBAQCB2bXdnZngteSA6PSB2bXdnZnhfZXhlY2J1Zi5vIHZtd2dmeF9nbXIubyB2bXdn Znhfa21zLm8gdm13Z2Z4X2Rydi5vIFwKIAkgICAgdm13Z2Z4X2NtZGJ1Zl9yZXMubyB2bXdnZnhf Y21kYnVmLm8gdm13Z2Z4X3N0ZHUubyBcCiAJICAgIHZtd2dmeF9jb3RhYmxlLm8gdm13Z2Z4X3Nv Lm8gdm13Z2Z4X2JpbmRpbmcubyB2bXdnZnhfbXNnLm8gXAogCSAgICB2bXdnZnhfc2ltcGxlX3Jl c291cmNlLm8gdm13Z2Z4X3ZhLm8gdm13Z2Z4X2JsaXQubyBcCi0JICAgIHZtd2dmeF92YWxpZGF0 aW9uLm8gXAorCSAgICB2bXdnZnhfdmFsaWRhdGlvbi5vIHZtd2dmeF9wYWdlX2RpcnR5Lm8gXAog CSAgICB0dG1fb2JqZWN0Lm8gdHRtX2xvY2subwogCiBvYmotJChDT05GSUdfRFJNX1ZNV0dGWCkg Oj0gdm13Z2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Jv LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jCmluZGV4IGMwODI5ZDUwZWVj Yy4uOTBjYTg2NjY0MGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JvLmMKQEAgLTQ2Myw2 ICs0NjMsNyBAQCB2b2lkIHZtd19ib19ib19mcmVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym8pCiB7CiAJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2bXdfYm8gPSB2bXdfYnVmZmVyX29i amVjdChibyk7CiAKKwlXQVJOX09OKHZtd19iby0+ZGlydHkpOwogCXZtd19ib191bm1hcCh2bXdf Ym8pOwogCWtmcmVlKHZtd19ibyk7CiB9CkBAIC00NzYsOCArNDc3LDEwIEBAIHZvaWQgdm13X2Jv X2JvX2ZyZWUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIHN0YXRpYyB2b2lkIHZtd191 c2VyX2JvX2Rlc3Ryb3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIHsKIAlzdHJ1Y3Qg dm13X3VzZXJfYnVmZmVyX29iamVjdCAqdm13X3VzZXJfYm8gPSB2bXdfdXNlcl9idWZmZXJfb2Jq ZWN0KGJvKTsKKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9ICZ2bXdfdXNlcl9iby0+ dmJvOwogCi0Jdm13X2JvX3VubWFwKCZ2bXdfdXNlcl9iby0+dmJvKTsKKwlXQVJOX09OKHZiby0+ ZGlydHkpOworCXZtd19ib191bm1hcCh2Ym8pOwogCXR0bV9wcmltZV9vYmplY3Rfa2ZyZWUodm13 X3VzZXJfYm8sIHByaW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwppbmRl eCA0ZmYxMWEwMDc3ZTEuLmQ1OWM0NzRiZTM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf ZHJ2LmMKQEAgLTgzMyw2ICs4MzMsMTEgQEAgc3RhdGljIGludCB2bXdfZHJpdmVyX2xvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBjaGlwc2V0KQogCQlEUk1fRVJST1Io IkZhaWxlZCBpbml0aWFsaXppbmcgVFRNIGJ1ZmZlciBvYmplY3QgZHJpdmVyLlxuIik7CiAJCWdv dG8gb3V0X25vX2JkZXY7CiAJfQorCWRldl9wcml2LT52bV9vcHMgPSAqZGV2X3ByaXYtPmJkZXYu dm1fb3BzOworCWRldl9wcml2LT52bV9vcHMuZmF1bHQgPSB2bXdfYm9fdm1fZmF1bHQ7CisJZGV2 X3ByaXYtPnZtX29wcy5wZm5fbWt3cml0ZSA9IHZtd19ib192bV9ta3dyaXRlOworCWRldl9wcml2 LT52bV9vcHMucGFnZV9ta3dyaXRlID0gdm13X2JvX3ZtX21rd3JpdGU7CisJZGV2X3ByaXYtPmJk ZXYudm1fb3BzID0gJmRldl9wcml2LT52bV9vcHM7CiAKIAkvKgogCSAqIEVuYWJsZSBWUkFNLCBi dXQgaW5pdGlhbGx5IGRvbid0IHVzZSBpdCB1bnRpbCBTVkdBIGlzIGVuYWJsZWQgYW5kCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDdjOTM1YzcyZDM2OC4uMjdjMjU5Mzk1Nzkw IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtOTQsNiArOTQsNyBAQCBzdHJ1 Y3Qgdm13X2Zwcml2IHsKICAqIEBkeF9xdWVyeV9jdHg6IERYIGNvbnRleHQgaWYgdGhpcyBidWZm ZXIgb2JqZWN0IGlzIHVzZWQgYXMgYSBEWCBxdWVyeSBNT0IKICAqIEBtYXA6IEttYXAgb2JqZWN0 IGZvciBzZW1pLXBlcnNpc3RlbnQgbWFwcGluZ3MKICAqIEByZXNfcHJpb3M6IEV2aWN0aW9uIHBy aW9yaXR5IGNvdW50cyBmb3IgYXR0YWNoZWQgcmVzb3VyY2VzCisgKiBAZGlydHk6IHN0cnVjdHVy ZSBmb3IgdXNlci1zcGFjZSBkaXJ0eS10cmFja2luZwogICovCiBzdHJ1Y3Qgdm13X2J1ZmZlcl9v YmplY3QgewogCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBiYXNlOwpAQCAtMTA0LDYgKzEwNSw3 IEBAIHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCB7CiAJLyogUHJvdGVjdGVkIGJ5IHJlc2VydmF0 aW9uICovCiAJc3RydWN0IHR0bV9ib19rbWFwX29iaiBtYXA7CiAJdTMyIHJlc19wcmlvc1tUVE1f TUFYX0JPX1BSSU9SSVRZXTsKKwlzdHJ1Y3Qgdm13X2JvX2RpcnR5ICpkaXJ0eTsKIH07CiAKIC8q KgpAQCAtMTM0LDcgKzEzNiw4IEBAIHN0cnVjdCB2bXdfcmVzX2Z1bmM7CiAgKiBAcmVzX2RpcnR5 OiBSZXNvdXJjZSBjb250YWlucyBkYXRhIG5vdCB5ZXQgaW4gdGhlIGJhY2t1cCBidWZmZXIuIFBy b3RlY3RlZAogICogYnkgcmVzb3VyY2UgcmVzZXJ2ZWQuCiAgKiBAYmFja3VwX2RpcnR5OiBCYWNr dXAgYnVmZmVyIGNvbnRhaW5zIGRhdGEgbm90IHlldCBpbiB0aGUgSFcgcmVzb3VyY2UuCi0gKiBQ cm90ZWN0ZSBieSByZXNvdXJjZSByZXNlcnZlZC4KKyAqIFByb3RlY3RlZCBieSByZXNvdXJjZSBy ZXNlcnZlZC4KKyAqIEBjb2hlcmVudDogRW11bGF0ZSBjb2hlcmVuY3kgYnkgdHJhY2tpbmcgdm0g YWNjZXNzZXMuCiAgKiBAYmFja3VwOiBUaGUgYmFja3VwIGJ1ZmZlciBpZiBhbnkuIFByb3RlY3Rl ZCBieSByZXNvdXJjZSByZXNlcnZlZC4KICAqIEBiYWNrdXBfb2Zmc2V0OiBPZmZzZXQgaW50byB0 aGUgYmFja3VwIGJ1ZmZlciBpZiBhbnkuIFByb3RlY3RlZCBieSByZXNvdXJjZQogICogcmVzZXJ2 ZWQuIE5vdGUgdGhhdCBvbmx5IGEgZmV3IHJlc291cmNlIHR5cGVzIGNhbiBoYXZlIGEgQGJhY2t1 cF9vZmZzZXQKQEAgLTE1MSwxNCArMTU0LDE2IEBAIHN0cnVjdCB2bXdfcmVzX2Z1bmM7CiAgKiBA aHdfZGVzdHJveTogQ2FsbGJhY2sgdG8gZGVzdHJveSB0aGUgcmVzb3VyY2Ugb24gdGhlIGRldmlj ZSwgYXMgcGFydCBvZgogICogcmVzb3VyY2UgZGVzdHJ1Y3Rpb24uCiAgKi8KK3N0cnVjdCB2bXdf cmVzb3VyY2VfZGlydHk7CiBzdHJ1Y3Qgdm13X3Jlc291cmNlIHsKIAlzdHJ1Y3Qga3JlZiBrcmVm OwogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJaW50IGlkOwogCXUzMiB1c2VkX3By aW87CiAJdW5zaWduZWQgbG9uZyBiYWNrdXBfc2l6ZTsKLQlib29sIHJlc19kaXJ0eTsKLQlib29s IGJhY2t1cF9kaXJ0eTsKKwl1MzIgcmVzX2RpcnR5IDogMTsKKwl1MzIgYmFja3VwX2RpcnR5IDog MTsKKwl1MzIgY29oZXJlbnQgOiAxOwogCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqYmFja3Vw OwogCXVuc2lnbmVkIGxvbmcgYmFja3VwX29mZnNldDsKIAl1bnNpZ25lZCBsb25nIHBpbl9jb3Vu dDsKQEAgLTE2Niw2ICsxNzEsNyBAQCBzdHJ1Y3Qgdm13X3Jlc291cmNlIHsKIAlzdHJ1Y3QgbGlz dF9oZWFkIGxydV9oZWFkOwogCXN0cnVjdCBsaXN0X2hlYWQgbW9iX2hlYWQ7CiAJc3RydWN0IGxp c3RfaGVhZCBiaW5kaW5nX2hlYWQ7CisJc3RydWN0IHZtd19yZXNvdXJjZV9kaXJ0eSAqZGlydHk7 CiAJdm9pZCAoKnJlc19mcmVlKSAoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKIAl2b2lkICgq aHdfZGVzdHJveSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7CiB9OwpAQCAtNjA2LDYgKzYx Miw5IEBAIHN0cnVjdCB2bXdfcHJpdmF0ZSB7CiAKIAkvKiBWYWxpZGF0aW9uIG1lbW9yeSByZXNl cnZhdGlvbiAqLwogCXN0cnVjdCB2bXdfdmFsaWRhdGlvbl9tZW0gdnZtOworCisJLyogVk0gb3Bl cmF0aW9ucyAqLworCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bV9vcHM7CiB9OwogCiBz dGF0aWMgaW5saW5lIHN0cnVjdCB2bXdfc3VyZmFjZSAqdm13X3Jlc190b19zcmYoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKQpAQCAtNzIyLDYgKzczMSw4IEBAIGV4dGVybiB2b2lkIHZtd19yZXNv dXJjZV9ldmljdF9hbGwoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9p ZCB2bXdfcmVzb3VyY2VfdW5iaW5kX2xpc3Qoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8p Owogdm9pZCB2bXdfcmVzb3VyY2VfbW9iX2F0dGFjaChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMp Owogdm9pZCB2bXdfcmVzb3VyY2VfbW9iX2RldGFjaChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMp Owordm9pZCB2bXdfcmVzb3VyY2VfZGlydHlfdXBkYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJl cywgcGdvZmZfdCBzdGFydCwKKwkJCSAgICAgICBwZ29mZl90IGVuZCk7CiAKIC8qKgogICogdm13 X3Jlc291cmNlX21vYl9hdHRhY2hlZCAtIFdoZXRoZXIgYSByZXNvdXJjZSBjdXJyZW50bHkgaGFz IGEgbW9iIGF0dGFjaGVkCkBAIC0xNDEwLDYgKzE0MjEsMTUgQEAgaW50IHZtd19ob3N0X2xvZyhj b25zdCBjaGFyICpsb2cpOwogI2RlZmluZSBWTVdfREVCVUdfVVNFUihmbXQsIC4uLikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCURSTV9ERUJVR19EUklW RVIoZm10LCAjI19fVkFfQVJHU19fKQogCisvKiBSZXNvdXJjZSBkaXJ0eWluZyAtIHZtd2dmeF9w YWdlX2RpcnR5LmMgKi8KK3ZvaWQgdm13X2JvX2RpcnR5X3NjYW4oc3RydWN0IHZtd19idWZmZXJf b2JqZWN0ICp2Ym8pOworaW50IHZtd19ib19kaXJ0eV9hZGQoc3RydWN0IHZtd19idWZmZXJfb2Jq ZWN0ICp2Ym8pOwordm9pZCB2bXdfYm9fZGlydHlfdHJhbnNmZXJfdG9fcmVzKHN0cnVjdCB2bXdf cmVzb3VyY2UgKnJlcyk7Cit2b2lkIHZtd19ib19kaXJ0eV9jbGVhcl9yZXMoc3RydWN0IHZtd19y ZXNvdXJjZSAqcmVzKTsKK3ZvaWQgdm13X2JvX2RpcnR5X3JlbGVhc2Uoc3RydWN0IHZtd19idWZm ZXJfb2JqZWN0ICp2Ym8pOwordm1fZmF1bHRfdCB2bXdfYm9fdm1fZmF1bHQoc3RydWN0IHZtX2Zh dWx0ICp2bWYpOwordm1fZmF1bHRfdCB2bXdfYm9fdm1fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQg KnZtZik7CisKIC8qKgogICogSW5saW5lIGhlbHBlciBmdW5jdGlvbnMKICAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IDMzNTMzZDEyNjI3Ny4uMzE5YzFjYTM1 NjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCkBAIC0yNTYwLDcg KzI1NjAsNiBAQCBzdGF0aWMgaW50IHZtd19jbWRfZHhfY2hlY2tfc3VicmVzb3VyY2Uoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgICBvZmZzZXRvZih0eXBlb2YoKmNtZCksIHNp ZCkpOwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIp OwotCiAJcmV0dXJuIHZtd19jbWRfcmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdf cmVzX3N1cmZhY2UsCiAJCQkJIFZNV19SRVNfRElSVFlfTk9ORSwgdXNlcl9zdXJmYWNlX2NvbnZl cnRlciwKIAkJCQkgJmNtZC0+c2lkLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3BhZ2VfZGlydHkuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X3BhZ2VfZGlydHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjhkMTU0ZjkwYmRjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3BhZ2VfZGlydHkuYwpAQCAtMCwwICsxLDQwOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5 cmlnaHQgMjAxOSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9u IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlz dHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisg KgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBT VVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9U SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKworLyoK KyAqIERpZmZlcmVudCBtZXRob2RzIGZvciB0cmFja2luZyBkaXJ0eToKKyAqIFZNV19CT19ESVJU WV9QQUdFVEFCTEUgLSBTY2FuIHRoZSBwYWdldGFibGUgZm9yIGhhcmR3YXJlIGRpcnR5IGJpdHMK KyAqIFZNV19CT19ESVJUWV9NS1dSSVRFIC0gV3JpdGUtcHJvdGVjdCBwYWdlIHRhYmxlIGVudHJp ZXMgYW5kIHJlY29yZCB3cml0ZS0KKyAqIGFjY2Vzc2VzIGluIHRoZSBWTSBta3dyaXRlKCkgY2Fs bGJhY2sKKyAqLworZW51bSB2bXdfYm9fZGlydHlfbWV0aG9kIHsKKwlWTVdfQk9fRElSVFlfUEFH RVRBQkxFLAorCVZNV19CT19ESVJUWV9NS1dSSVRFLAorfTsKKworLyoKKyAqIE5vIGRpcnRpZWQg cGFnZXMgYXQgc2NhbiB0cmlnZ2VyIGEgdHJhbnNpdGlvbiB0byB0aGUgX01LV1JJVEUgbWV0aG9k LAorICogc2ltaWxhcmx5IGEgY2VydGFpbiBwZXJjZW50YWdlIG9mIGRpcnR5IHBhZ2VzIHRyaWdn ZXIgYSB0cmFuc2l0aW9uIHRvCisgKiB0aGUgX1BBR0VUQUJMRSBtZXRob2QuIEhvdyBtYW55IHRy aWdnZXJzIHNob3VsZCB3ZSB3YWl0IGZvciBiZWZvcmUKKyAqIGNoYW5naW5nIG1ldGhvZD8KKyAq LworI2RlZmluZSBWTVdfRElSVFlfTlVNX0NIQU5HRV9UUklHR0VSUyAyCisKKy8qIFBlcmNlbnRh Z2UgdG8gdHJpZ2dlciBhIHRyYW5zaXRpb24gdG8gdGhlIF9QQUdFVEFCTEUgbWV0aG9kICovCisj ZGVmaW5lIFZNV19ESVJUWV9QRVJDRU5UQUdFIDEwCisKKy8qKgorICogc3RydWN0IHZtd19ib19k aXJ0eSAtIERpcnR5IGluZm9ybWF0aW9uIGZvciBidWZmZXIgb2JqZWN0cworICogQHN0YXJ0OiBG aXJzdCBjdXJyZW50bHkgZGlydHkgYml0CisgKiBAZW5kOiBMYXN0IGN1cnJlbnRseSBkaXJ0eSBi aXQgKyAxCisgKiBAbWV0aG9kOiBUaGUgY3VycmVudGx5IHVzZWQgZGlydHkgbWV0aG9kCisgKiBA Y2hhbmdlX2NvdW50OiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgbWV0aG9kIGNoYW5nZSB0cmlnZ2Vy cworICogQHJlZl9jb3VudDogUmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIHN0cnVjdHVyZQorICog QGJpdG1hcF9zaXplOiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwIGluIGJpdHMuIFR5cGljYWxseSBl cXVhbCB0byB0aGUKKyAqIG51YmVyIG9mIHBhZ2VzIGluIHRoZSBiby4KKyAqIEBzaXplOiBUaGUg YWNjb3VudGluZyBzaXplIGZvciB0aGlzIHN0cnVjdC4KKyAqIEBiaXRtYXA6IEEgYml0bWFwIHdo ZXJlIGVhY2ggYml0IHJlcHJlc2VudHMgYSBwYWdlLiBBIHNldCBiaXQgbWVhbnMgYQorICogZGly dHkgcGFnZS4KKyAqLworc3RydWN0IHZtd19ib19kaXJ0eSB7CisJdW5zaWduZWQgbG9uZyBzdGFy dDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwllbnVtIHZtd19ib19kaXJ0eV9tZXRob2QgbWV0aG9k OworCXVuc2lnbmVkIGludCBjaGFuZ2VfY291bnQ7CisJdW5zaWduZWQgaW50IHJlZl9jb3VudDsK Kwl1bnNpZ25lZCBsb25nIGJpdG1hcF9zaXplOworCXNpemVfdCBzaXplOworCXVuc2lnbmVkIGxv bmcgYml0bWFwWzBdOworfTsKKworLyoqCisgKiB2bXdfYm9fZGlydHlfc2Nhbl9wYWdldGFibGUg LSBQZXJmb3JtIGEgcGFnZXRhYmxlIHNjYW4gZm9yIGRpcnR5IGJpdHMKKyAqIEB2Ym86IFRoZSBi dWZmZXIgb2JqZWN0IHRvIHNjYW4KKyAqCisgKiBTY2FucyB0aGUgcGFnZXRhYmxlIGZvciBkaXJ0 eSBiaXRzLiBDbGVhciB0aG9zZSBiaXRzIGFuZCBtb2RpZnkgdGhlCisgKiBkaXJ0eSBzdHJ1Y3R1 cmUgd2l0aCB0aGUgcmVzdWx0cy4gVGhpcyBmdW5jdGlvbiBtYXkgY2hhbmdlIHRoZQorICogZGly dHktdHJhY2tpbmcgbWV0aG9kLgorICovCitzdGF0aWMgdm9pZCB2bXdfYm9fZGlydHlfc2Nhbl9w YWdldGFibGUoc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8pCit7CisJc3RydWN0IHZtd19i b19kaXJ0eSAqZGlydHkgPSB2Ym8tPmRpcnR5OworCXBnb2ZmX3Qgb2Zmc2V0ID0gZHJtX3ZtYV9u b2RlX3N0YXJ0KCZ2Ym8tPmJhc2Uudm1hX25vZGUpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpt YXBwaW5nID0gdmJvLT5iYXNlLmJkZXYtPmRldl9tYXBwaW5nOworCXBnb2ZmX3QgbnVtX21hcmtl ZDsKKworCW51bV9tYXJrZWQgPSBhcHBseV9hc19jbGVhbihtYXBwaW5nLAorCQkJCSAgICBvZmZz ZXQsIGRpcnR5LT5iaXRtYXBfc2l6ZSwKKwkJCQkgICAgb2Zmc2V0LCAmZGlydHktPmJpdG1hcFsw XSwKKwkJCQkgICAgJmRpcnR5LT5zdGFydCwgJmRpcnR5LT5lbmQpOworCWlmIChudW1fbWFya2Vk ID09IDApCisJCWRpcnR5LT5jaGFuZ2VfY291bnQrKzsKKwllbHNlCisJCWRpcnR5LT5jaGFuZ2Vf Y291bnQgPSAwOworCisJaWYgKGRpcnR5LT5jaGFuZ2VfY291bnQgPiBWTVdfRElSVFlfTlVNX0NI QU5HRV9UUklHR0VSUykgeworCQlkaXJ0eS0+Y2hhbmdlX2NvdW50ID0gMDsKKwkJZGlydHktPm1l dGhvZCA9IFZNV19CT19ESVJUWV9NS1dSSVRFOworCQlhcHBseV9hc193cnByb3RlY3QobWFwcGlu ZywKKwkJCQkgICBvZmZzZXQsIGRpcnR5LT5iaXRtYXBfc2l6ZSk7CisJCWFwcGx5X2FzX2NsZWFu KG1hcHBpbmcsCisJCQkgICAgICAgb2Zmc2V0LCBkaXJ0eS0+Yml0bWFwX3NpemUsCisJCQkgICAg ICAgb2Zmc2V0LCAmZGlydHktPmJpdG1hcFswXSwKKwkJCSAgICAgICAmZGlydHktPnN0YXJ0LCAm ZGlydHktPmVuZCk7CisJfQorfQorCisvKioKKyAqIHZtd19ib19kaXJ0eV9zY2FuX21rd3JpdGUg LSBSZXNldCB0aGUgbWt3cml0ZSBkaXJ0eS10cmFja2luZyBtZXRob2QKKyAqIEB2Ym86IFRoZSBi dWZmZXIgb2JqZWN0IHRvIHNjYW4KKyAqCisgKiBXcml0ZS1wcm90ZWN0IHBhZ2VzIHdyaXR0ZW4g dG8gc28gdGhhdCBjb25zZWN1dGl2ZSB3cml0ZSBhY2Nlc3NlcyB3aWxsCisgKiB0cmlnZ2VyIGEg Y2FsbCB0byBta3dyaXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGNoYW5nZSB0aGUgZGly dHktdHJhY2tpbmcgbWV0aG9kLgorICovCitzdGF0aWMgdm9pZCB2bXdfYm9fZGlydHlfc2Nhbl9t a3dyaXRlKHN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJvKQoreworCXN0cnVjdCB2bXdfYm9f ZGlydHkgKmRpcnR5ID0gdmJvLT5kaXJ0eTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGRybV92 bWFfbm9kZV9zdGFydCgmdmJvLT5iYXNlLnZtYV9ub2RlKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFj ZSAqbWFwcGluZyA9IHZiby0+YmFzZS5iZGV2LT5kZXZfbWFwcGluZzsKKwlwZ29mZl90IG51bV9t YXJrZWQ7CisKKwlpZiAoZGlydHktPmVuZCA8PSBkaXJ0eS0+c3RhcnQpCisJCXJldHVybjsKKwor CW51bV9tYXJrZWQgPSBhcHBseV9hc193cnByb3RlY3QodmJvLT5iYXNlLmJkZXYtPmRldl9tYXBw aW5nLAorCQkJCQlkaXJ0eS0+c3RhcnQgKyBvZmZzZXQsCisJCQkJCWRpcnR5LT5lbmQgLSBkaXJ0 eS0+c3RhcnQpOworCisJaWYgKDEwMFVMICogbnVtX21hcmtlZCAvIGRpcnR5LT5iaXRtYXBfc2l6 ZSA+CisJICAgIFZNV19ESVJUWV9QRVJDRU5UQUdFKSB7CisJCWRpcnR5LT5jaGFuZ2VfY291bnQr KzsKKwl9IGVsc2UgeworCQlkaXJ0eS0+Y2hhbmdlX2NvdW50ID0gMDsKKwl9CisKKwlpZiAoZGly dHktPmNoYW5nZV9jb3VudCA+IFZNV19ESVJUWV9OVU1fQ0hBTkdFX1RSSUdHRVJTKSB7CisJCXBn b2ZmX3Qgc3RhcnQgPSAwOworCQlwZ29mZl90IGVuZCA9IGRpcnR5LT5iaXRtYXBfc2l6ZTsKKwor CQlkaXJ0eS0+bWV0aG9kID0gVk1XX0JPX0RJUlRZX1BBR0VUQUJMRTsKKwkJYXBwbHlfYXNfY2xl YW4obWFwcGluZywgb2Zmc2V0LCBlbmQsIG9mZnNldCwgJmRpcnR5LT5iaXRtYXBbMF0sCisJCQkg ICAgICAgJnN0YXJ0LCAmZW5kKTsKKwkJYml0bWFwX2NsZWFyKCZkaXJ0eS0+Yml0bWFwWzBdLCAw LCBkaXJ0eS0+Yml0bWFwX3NpemUpOworCQlpZiAoZGlydHktPnN0YXJ0IDwgZGlydHktPmVuZCkK KwkJCWJpdG1hcF9zZXQoJmRpcnR5LT5iaXRtYXBbMF0sIGRpcnR5LT5zdGFydCwKKwkJCQkgICBk aXJ0eS0+ZW5kIC0gZGlydHktPnN0YXJ0KTsKKwkJZGlydHktPmNoYW5nZV9jb3VudCA9IDA7CisJ fQorfQorCisKKy8qKgorICogdm13X2JvX2RpcnR5X3NjYW4gLSBTY2FuIGZvciBkaXJ0eSBwYWdl cyBhbmQgYWRkIHRoZW0gdG8gdGhlIGRpcnR5CisgKiB0cmFja2luZyBzdHJ1Y3R1cmUKKyAqIEB2 Ym86IFRoZSBidWZmZXIgb2JqZWN0IHRvIHNjYW4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBj aGFuZ2UgdGhlIGRpcnR5IHRyYWNraW5nIG1ldGhvZC4KKyAqLwordm9pZCB2bXdfYm9fZGlydHlf c2NhbihzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibykKK3sKKwlzdHJ1Y3Qgdm13X2JvX2Rp cnR5ICpkaXJ0eSA9IHZiby0+ZGlydHk7CisKKwlpZiAoZGlydHktPm1ldGhvZCA9PSBWTVdfQk9f RElSVFlfUEFHRVRBQkxFKQorCQl2bXdfYm9fZGlydHlfc2Nhbl9wYWdldGFibGUodmJvKTsKKwll bHNlCisJCXZtd19ib19kaXJ0eV9zY2FuX21rd3JpdGUodmJvKTsKK30KKworLyoqCisgKiB2bXdf Ym9fZGlydHlfYWRkIC0gQWRkIGEgZGlydHktdHJhY2tpbmcgdXNlciB0byBhIGJ1ZmZlciBvYmpl Y3QKKyAqIEB2Ym86IFRoZSBidWZmZXIgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiByZWdp c3RlcnMgYSBkaXJ0eS10cmFja2luZyB1c2VyIHRvIGEgYnVmZmVyIG9iamVjdC4KKyAqIEEgdXNl ciBjYW4gYmUgZm9yIGV4YW1wbGUgYSByZXNvdXJjZSBvciBhIHZtYSBpbiBhIHNwZWNpYWwgdXNl ci1zcGFjZQorICogbWFwcGluZy4KKyAqCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgLUVO T01FTSBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCitpbnQgdm13X2JvX2RpcnR5 X2FkZChzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibykKK3sKKwlzdHJ1Y3Qgdm13X2JvX2Rp cnR5ICpkaXJ0eSA9IHZiby0+ZGlydHk7CisJcGdvZmZfdCBudW1fcGFnZXMgPSB2Ym8tPmJhc2Uu bnVtX3BhZ2VzOworCXNpemVfdCBzaXplLCBhY2Nfc2l6ZTsKKwlpbnQgcmV0OworCXN0YXRpYyBz dHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geworCQkuaW50ZXJydXB0aWJsZSA9IGZhbHNl LAorCQkubm9fd2FpdF9ncHUgPSBmYWxzZQorCX07CisKKwlpZiAoZGlydHkpIHsKKwkJZGlydHkt PnJlZl9jb3VudCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwlzaXplID0gc2l6ZW9mKCpkaXJ0eSkg KyBCSVRTX1RPX0xPTkdTKG51bV9wYWdlcykgKiBzaXplb2YobG9uZyk7CisJYWNjX3NpemUgPSB0 dG1fcm91bmRfcG90KHNpemUpOworCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKCZ0dG1fbWVt X2dsb2IsIGFjY19zaXplLCAmY3R4KTsKKwlpZiAocmV0KSB7CisJCVZNV19ERUJVR19VU0VSKCJP dXQgb2YgZ3JhcGhpY3MgbWVtb3J5IGZvciBidWZmZXIgb2JqZWN0ICIKKwkJCSAgICAgICAiZGly dHkgdHJhY2tlci5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkaXJ0eSA9IGt2emFsbG9jKHNp emUsIEdGUF9LRVJORUwpOworCWlmICghZGlydHkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290 byBvdXRfbm9fZGlydHk7CisJfQorCisJZGlydHktPnNpemUgPSBhY2Nfc2l6ZTsKKwlkaXJ0eS0+ Yml0bWFwX3NpemUgPSBudW1fcGFnZXM7CisJZGlydHktPnN0YXJ0ID0gZGlydHktPmJpdG1hcF9z aXplOworCWRpcnR5LT5lbmQgPSAwOworCWRpcnR5LT5yZWZfY291bnQgPSAxOworCWlmIChudW1f cGFnZXMgPCBQQUdFX1NJWkUgLyBzaXplb2YocHRlX3QpKSB7CisJCWRpcnR5LT5tZXRob2QgPSBW TVdfQk9fRElSVFlfUEFHRVRBQkxFOworCX0gZWxzZSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNl ICptYXBwaW5nID0gdmJvLT5iYXNlLmJkZXYtPmRldl9tYXBwaW5nOworCQlwZ29mZl90IG9mZnNl dCA9IGRybV92bWFfbm9kZV9zdGFydCgmdmJvLT5iYXNlLnZtYV9ub2RlKTsKKworCQlkaXJ0eS0+ bWV0aG9kID0gVk1XX0JPX0RJUlRZX01LV1JJVEU7CisKKwkJLyogV3JpdGUtcHJvdGVjdCBhbmQg dGhlbiBwaWNrIHVwIGFscmVhZHkgZGlydHkgYml0cyAqLworCQlhcHBseV9hc193cnByb3RlY3Qo bWFwcGluZywgb2Zmc2V0LCBudW1fcGFnZXMpOworCQlhcHBseV9hc19jbGVhbihtYXBwaW5nLCBv ZmZzZXQsIG51bV9wYWdlcywgb2Zmc2V0LAorCQkJICAgICAgICZkaXJ0eS0+Yml0bWFwWzBdLCAm ZGlydHktPnN0YXJ0LCAmZGlydHktPmVuZCk7CisJfQorCisJdmJvLT5kaXJ0eSA9IGRpcnR5Owor CisJcmV0dXJuIDA7CisKK291dF9ub19kaXJ0eToKKwl0dG1fbWVtX2dsb2JhbF9mcmVlKCZ0dG1f bWVtX2dsb2IsIGFjY19zaXplKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd19ib19k aXJ0eV9yZWxlYXNlIC0gUmVsZWFzZSBhIGRpcnR5LXRyYWNraW5nIHVzZXIgZnJvbSBhIGJ1ZmZl ciBvYmplY3QKKyAqIEB2Ym86IFRoZSBidWZmZXIgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlv biByZWxlYXNlcyBhIGRpcnR5LXRyYWNraW5nIHVzZXIgZnJvbSBhIGJ1ZmZlciBvYmplY3QuCisg KiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVybywgdGhlbiB0aGUgZGlydHktdHJh Y2tpbmcgb2JqZWN0IGlzCisgKiBmcmVlZCBhbmQgdGhlIHBvaW50ZXIgdG8gaXQgY2xlYXJlZC4K KyAqCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcywgLUVOT01FTSBvbiBtZW1vcnkgYWxsb2Nh dGlvbiBmYWlsdXJlLgorICovCit2b2lkIHZtd19ib19kaXJ0eV9yZWxlYXNlKHN0cnVjdCB2bXdf YnVmZmVyX29iamVjdCAqdmJvKQoreworCXN0cnVjdCB2bXdfYm9fZGlydHkgKmRpcnR5ID0gdmJv LT5kaXJ0eTsKKworCWlmIChkaXJ0eSAmJiAtLWRpcnR5LT5yZWZfY291bnQgPT0gMCkgeworCQlz aXplX3QgYWNjX3NpemUgPSBkaXJ0eS0+c2l6ZTsKKworCQlrdmZyZWUoZGlydHkpOworCQl0dG1f bWVtX2dsb2JhbF9mcmVlKCZ0dG1fbWVtX2dsb2IsIGFjY19zaXplKTsKKwkJdmJvLT5kaXJ0eSA9 IE5VTEw7CisJfQorfQorCisvKioKKyAqIHZtd19ib19kaXJ0eV90cmFuc2Zlcl90b19yZXMgLSBQ aWNrIHVwIGEgcmVzb3VyY2UncyBkaXJ0eSByZWdpb24gZnJvbQorICogaXRzIGJhY2tpbmcgbW9i LgorICogQHJlczogVGhlIHJlc291cmNlCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHBpY2sg dXAgYWxsIGRpcnR5IHJhbmdlcyBhZmZlY3RpbmcgdGhlIHJlc291cmNlIGZyb20KKyAqIGl0J3Mg YmFja3VwIG1vYiwgYW5kIGNhbGwgdm13X3Jlc291cmNlX2RpcnR5X3VwZGF0ZSgpIG9uY2UgZm9y IGVhY2gKKyAqIHJhbmdlLiBUaGUgdHJhbnNmZXJyZWQgcmFuZ2VzIHdpbGwgYmUgY2xlYXJlZCBm cm9tIHRoZSBiYWNraW5nIG1vYidzCisgKiBkaXJ0eSB0cmFja2luZy4KKyAqLwordm9pZCB2bXdf Ym9fZGlydHlfdHJhbnNmZXJfdG9fcmVzKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlz dHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9IHJlcy0+YmFja3VwOworCXN0cnVjdCB2bXdf Ym9fZGlydHkgKmRpcnR5ID0gdmJvLT5kaXJ0eTsKKwlwZ29mZl90IHN0YXJ0LCBjdXIsIGVuZDsK Kwl1bnNpZ25lZCBsb25nIHJlc19zdGFydCA9IHJlcy0+YmFja3VwX29mZnNldDsKKwl1bnNpZ25l ZCBsb25nIHJlc19lbmQgPSByZXMtPmJhY2t1cF9vZmZzZXQgKyByZXMtPmJhY2t1cF9zaXplOwor CisJV0FSTl9PTl9PTkNFKHJlc19zdGFydCAmIH5QQUdFX01BU0spOworCXJlc19zdGFydCA+Pj0g UEFHRV9TSElGVDsKKwlyZXNfZW5kID0gRElWX1JPVU5EX1VQKHJlc19lbmQsIFBBR0VfU0laRSk7 CisKKwlpZiAocmVzX3N0YXJ0ID49IGRpcnR5LT5lbmQgfHwgcmVzX2VuZCA8PSBkaXJ0eS0+c3Rh cnQpCisJCXJldHVybjsKKworCWN1ciA9IG1heChyZXNfc3RhcnQsIGRpcnR5LT5zdGFydCk7CisJ cmVzX2VuZCA9IG1heChyZXNfZW5kLCBkaXJ0eS0+ZW5kKTsKKwl3aGlsZSAoY3VyIDwgcmVzX2Vu ZCkgeworCQl1bnNpZ25lZCBsb25nIG51bTsKKworCQlzdGFydCA9IGZpbmRfbmV4dF9iaXQoJmRp cnR5LT5iaXRtYXBbMF0sIHJlc19lbmQsIGN1cik7CisJCWlmIChzdGFydCA+PSByZXNfZW5kKQor CQkJYnJlYWs7CisKKwkJZW5kID0gZmluZF9uZXh0X3plcm9fYml0KCZkaXJ0eS0+Yml0bWFwWzBd LCByZXNfZW5kLCBzdGFydCArIDEpOworCQljdXIgPSBlbmQgKyAxOworCQludW0gPSBlbmQgLSBz dGFydDsKKwkJYml0bWFwX2NsZWFyKCZkaXJ0eS0+Yml0bWFwWzBdLCBzdGFydCwgbnVtKTsKKwkJ dm13X3Jlc291cmNlX2RpcnR5X3VwZGF0ZShyZXMsIHN0YXJ0LCBlbmQpOworCX0KKworCWlmIChy ZXNfc3RhcnQgPD0gZGlydHktPnN0YXJ0ICYmIHJlc19lbmQgPiBkaXJ0eS0+c3RhcnQpCisJCWRp cnR5LT5zdGFydCA9IHJlc19lbmQ7CisJaWYgKHJlc19zdGFydCA8IGRpcnR5LT5lbmQgJiYgcmVz X2VuZCA+PSBkaXJ0eS0+ZW5kKQorCQlkaXJ0eS0+ZW5kID0gcmVzX3N0YXJ0OworfQorCisvKioK KyAqIHZtd19ib19kaXJ0eV9jbGVhcl9yZXMgLSBDbGVhciBhIHJlc291cmNlJ3MgZGlydHkgcmVn aW9uIGZyb20KKyAqIGl0cyBiYWNraW5nIG1vYi4KKyAqIEByZXM6IFRoZSByZXNvdXJjZQorICoK KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBhbGwgZGlydHkgcmFuZ2VzIGFmZmVjdGluZyB0 aGUgcmVzb3VyY2UgZnJvbQorICogaXQncyBiYWNrdXAgbW9iJ3MgZGlydHkgdHJhY2tpbmcuCisg Ki8KK3ZvaWQgdm13X2JvX2RpcnR5X2NsZWFyX3JlcyhzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMp Cit7CisJdW5zaWduZWQgbG9uZyByZXNfc3RhcnQgPSByZXMtPmJhY2t1cF9vZmZzZXQ7CisJdW5z aWduZWQgbG9uZyByZXNfZW5kID0gcmVzLT5iYWNrdXBfb2Zmc2V0ICsgcmVzLT5iYWNrdXBfc2l6 ZTsKKwlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9IHJlcy0+YmFja3VwOworCXN0cnVj dCB2bXdfYm9fZGlydHkgKmRpcnR5ID0gdmJvLT5kaXJ0eTsKKworCXJlc19zdGFydCA+Pj0gUEFH RV9TSElGVDsKKwlyZXNfZW5kID0gRElWX1JPVU5EX1VQKHJlc19lbmQsIFBBR0VfU0laRSk7CisK KwlpZiAocmVzX3N0YXJ0ID49IGRpcnR5LT5lbmQgfHwgcmVzX2VuZCA8PSBkaXJ0eS0+c3RhcnQp CisJCXJldHVybjsKKworCXJlc19zdGFydCA9IG1heChyZXNfc3RhcnQsIGRpcnR5LT5zdGFydCk7 CisJcmVzX2VuZCA9IG1pbihyZXNfZW5kLCBkaXJ0eS0+ZW5kKTsKKwliaXRtYXBfY2xlYXIoJmRp cnR5LT5iaXRtYXBbMF0sIHJlc19zdGFydCwgcmVzX2VuZCAtIHJlc19zdGFydCk7CisKKwlpZiAo cmVzX3N0YXJ0IDw9IGRpcnR5LT5zdGFydCAmJiByZXNfZW5kID4gZGlydHktPnN0YXJ0KQorCQlk aXJ0eS0+c3RhcnQgPSByZXNfZW5kOworCWlmIChyZXNfc3RhcnQgPCBkaXJ0eS0+ZW5kICYmIHJl c19lbmQgPj0gZGlydHktPmVuZCkKKwkJZGlydHktPmVuZCA9IHJlc19zdGFydDsKK30KKwordm1f ZmF1bHRfdCB2bXdfYm9fdm1fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOworCXN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8gPSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopCisJICAgIHZtYS0+dm1fcHJp dmF0ZV9kYXRhOworCXZtX2ZhdWx0X3QgcmV0OworCXVuc2lnbmVkIGxvbmcgcGFnZV9vZmZzZXQ7 CisJc3RydWN0IHZtd19idWZmZXJfb2JqZWN0ICp2Ym8gPQorCQljb250YWluZXJfb2YoYm8sIHR5 cGVvZigqdmJvKSwgYmFzZSk7CisKKwlyZXQgPSB0dG1fYm9fdm1fcmVzZXJ2ZShibywgdm1mKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGFnZV9vZmZzZXQgPSB2bWYtPnBnb2ZmIC0g ZHJtX3ZtYV9ub2RlX3N0YXJ0KCZiby0+dm1hX25vZGUpOworCWlmICh1bmxpa2VseShwYWdlX29m ZnNldCA+PSBiby0+bnVtX3BhZ2VzKSkgeworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWdv dG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAodmJvLT5kaXJ0eSAmJiB2Ym8tPmRpcnR5LT5tZXRo b2QgPT0gVk1XX0JPX0RJUlRZX01LV1JJVEUgJiYKKwkgICAgIXRlc3RfYml0KHBhZ2Vfb2Zmc2V0 LCAmdmJvLT5kaXJ0eS0+Yml0bWFwWzBdKSkgeworCQlzdHJ1Y3Qgdm13X2JvX2RpcnR5ICpkaXJ0 eSA9IHZiby0+ZGlydHk7CisKKwkJX19zZXRfYml0KHBhZ2Vfb2Zmc2V0LCAmZGlydHktPmJpdG1h cFswXSk7CisJCWRpcnR5LT5zdGFydCA9IG1pbihkaXJ0eS0+c3RhcnQsIHBhZ2Vfb2Zmc2V0KTsK KwkJZGlydHktPmVuZCA9IG1heChkaXJ0eS0+ZW5kLCBwYWdlX29mZnNldCArIDEpOworCX0KKwor b3V0X3VubG9jazoKKwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJvLT5yZXN2KTsKKwlyZXR1 cm4gcmV0OworfQorCit2bV9mYXVsdF90IHZtd19ib192bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQg KnZtZikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOworCXN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopCisJ ICAgIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2bXdfYnVmZmVyX29iamVjdCAqdmJv ID0KKwkJY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QsIGJhc2UpOwor CXBnb2ZmX3QgbnVtX3ByZWZhdWx0OworCXBncHJvdF90IHByb3Q7CisJdm1fZmF1bHRfdCByZXQ7 CisKKwlyZXQgPSB0dG1fYm9fdm1fcmVzZXJ2ZShibywgdm1mKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyoKKwkgKiBUaGlzIHdpbGwgY2F1c2UgbWt3cml0ZSgpIHRvIGJlIGNhbGxl ZCBmb3IgZWFjaCBwdGUgb24KKwkgKiB3cml0ZS1lbmFibGUgdm1hcy4KKwkgKi8KKwlpZiAodmJv LT5kaXJ0eSAmJiB2Ym8tPmRpcnR5LT5tZXRob2QgPT0gVk1XX0JPX0RJUlRZX01LV1JJVEUpCisJ CXByb3QgPSB2bWEtPnZtX3BhZ2VfcHJvdDsKKwllbHNlCisJCXByb3QgPSB2bV9nZXRfcGFnZV9w cm90KHZtYS0+dm1fZmxhZ3MpOworCisJbnVtX3ByZWZhdWx0ID0gKHZtYS0+dm1fZmxhZ3MgJiBW TV9SQU5EX1JFQUQpID8gMCA6CisJCVRUTV9CT19WTV9OVU1fUFJFRkFVTFQ7CisJcmV0ID0gdHRt X2JvX3ZtX2ZhdWx0X3Jlc2VydmVkKHZtZiwgcHJvdCwgbnVtX3ByZWZhdWx0KTsKKwlpZiAocmV0 ID09IFZNX0ZBVUxUX1JFVFJZICYmICEodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfUkVUUllfTk9X QUlUKSkKKwkJcmV0dXJuIHJldDsKKworCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYm8tPnJl c3YpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9yZXNvdXJjZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3Vy Y2UuYwppbmRleCBiZTdkNDE0OWExMjkuLmRhOWFmYTgzZmI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCkBAIC0xMjEsNiArMTIxLDEwIEBAIHN0YXRpYyB2b2lk IHZtd19yZXNvdXJjZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCQl9CiAJCXJlcy0+YmFj a3VwX2RpcnR5ID0gZmFsc2U7CiAJCXZtd19yZXNvdXJjZV9tb2JfZGV0YWNoKHJlcyk7CisJCWlm IChyZXMtPmRpcnR5KQorCQkJcmVzLT5mdW5jLT5kaXJ0eV9mcmVlKHJlcyk7CisJCWlmIChyZXMt PmNvaGVyZW50KQorCQkJdm13X2JvX2RpcnR5X3JlbGVhc2UocmVzLT5iYWNrdXApOwogCQl0dG1f Ym9fdW5yZXNlcnZlKGJvKTsKIAkJdm13X2JvX3VucmVmZXJlbmNlKCZyZXMtPmJhY2t1cCk7CiAJ fQpAQCAtMjEwLDcgKzIxNCw5IEBAIGludCB2bXdfcmVzb3VyY2VfaW5pdChzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJcmVzLT5iYWNrdXBf b2Zmc2V0ID0gMDsKIAlyZXMtPmJhY2t1cF9kaXJ0eSA9IGZhbHNlOwogCXJlcy0+cmVzX2RpcnR5 ID0gZmFsc2U7CisJcmVzLT5jb2hlcmVudCA9IGZhbHNlOwogCXJlcy0+dXNlZF9wcmlvID0gMzsK KwlyZXMtPmRpcnR5ID0gTlVMTDsKIAlpZiAoZGVsYXlfaWQpCiAJCXJldHVybiAwOwogCWVsc2UK QEAgLTM5Nyw2ICs0MDMsMzAgQEAgc3RhdGljIGludCB2bXdfcmVzb3VyY2VfZG9fdmFsaWRhdGUo c3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCQkJdm13X3Jlc291cmNlX21vYl9hdHRhY2gocmVz KTsKIAl9CiAKKwkvKgorCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgYmFja3VwIG1vYiBp cyBtYXJrZWQgY29oZXJlbnQgYnV0CisJICogdGhlIHJlc291cmNlIGlzbid0LgorCSAqLworCWlm IChmdW5jLT5kaXJ0eV9hbGxvYyAmJiB2bXdfcmVzb3VyY2VfbW9iX2F0dGFjaGVkKHJlcykgJiYK KwkgICAgIXJlcy0+Y29oZXJlbnQpIHsKKwkJaWYgKHJlcy0+YmFja3VwLT5kaXJ0eSAmJiAhcmVz LT5kaXJ0eSkgeworCQkJcmV0ID0gZnVuYy0+ZGlydHlfYWxsb2MocmVzKTsKKwkJCWlmIChyZXQp CisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmICghcmVzLT5iYWNrdXAtPmRpcnR5ICYmIHJl cy0+ZGlydHkpIHsKKwkJCWZ1bmMtPmRpcnR5X2ZyZWUocmVzKTsKKwkJfQorCX0KKworCS8qCisJ ICogVHJhbnNmZXIgdGhlIGRpcnR5IHJlZ2lvbnMgdG8gdGhlIHJlc291cmNlIGFuZCB1cGRhdGUK KwkgKiB0aGUgcmVzb3VyY2UuCisJICovCisJaWYgKHJlcy0+ZGlydHkpIHsKKwkJdm13X2JvX2Rp cnR5X3RyYW5zZmVyX3RvX3JlcyhyZXMpOworCQlyZXR1cm4gZnVuYy0+ZGlydHlfc3luYyhyZXMp OworCX0KKwogCXJldHVybiAwOwogCiBvdXRfYmluZF9mYWlsZWQ6CkBAIC00MzUsMTYgKzQ2NSwy OCBAQCB2b2lkIHZtd19yZXNvdXJjZV91bnJlc2VydmUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVz LAogCWlmIChzd2l0Y2hfYmFja3VwICYmIG5ld19iYWNrdXAgIT0gcmVzLT5iYWNrdXApIHsKIAkJ aWYgKHJlcy0+YmFja3VwKSB7CiAJCQl2bXdfcmVzb3VyY2VfbW9iX2RldGFjaChyZXMpOworCQkJ aWYgKHJlcy0+Y29oZXJlbnQpCisJCQkJdm13X2JvX2RpcnR5X3JlbGVhc2UocmVzLT5iYWNrdXAp OwogCQkJdm13X2JvX3VucmVmZXJlbmNlKCZyZXMtPmJhY2t1cCk7CiAJCX0KIAogCQlpZiAobmV3 X2JhY2t1cCkgewogCQkJcmVzLT5iYWNrdXAgPSB2bXdfYm9fcmVmZXJlbmNlKG5ld19iYWNrdXAp OworCisJCQkvKgorCQkJICogVGhlIHZhbGlkYXRpb24gY29kZSBzaG91bGQgYWxyZWFkeSBoYXZl IGFkZGVkIGEKKwkJCSAqIGRpcnR5IHRyYWNrZXIgaGVyZS4KKwkJCSAqLworCQkJV0FSTl9PTihy ZXMtPmNvaGVyZW50ICYmICFuZXdfYmFja3VwLT5kaXJ0eSk7CisKIAkJCXZtd19yZXNvdXJjZV9t b2JfYXR0YWNoKHJlcyk7CiAJCX0gZWxzZSB7CiAJCQlyZXMtPmJhY2t1cCA9IE5VTEw7CiAJCX0K Kwl9IGVsc2UgaWYgKHN3aXRjaF9iYWNrdXAgJiYgcmVzLT5jb2hlcmVudCkgeworCQl2bXdfYm9f ZGlydHlfcmVsZWFzZShyZXMtPmJhY2t1cCk7CiAJfQorCiAJaWYgKHN3aXRjaF9iYWNrdXApCiAJ CXJlcy0+YmFja3VwX29mZnNldCA9IG5ld19iYWNrdXBfb2Zmc2V0OwogCkBAIC0xMDEwLDMgKzEw NTIsMTggQEAgZW51bSB2bXdfcmVzX3R5cGUgdm13X3Jlc190eXBlKGNvbnN0IHN0cnVjdCB2bXdf cmVzb3VyY2UgKnJlcykKIHsKIAlyZXR1cm4gcmVzLT5mdW5jLT5yZXNfdHlwZTsKIH0KKworLyoq CisgKiB2bXdfcmVzb3VyY2VfdXBkYXRlX2RpcnR5IC0gVXBkYXRlIGEgcmVzb3VyY2UncyBkaXJ0 eSB0cmFja2VyIHdpdGggYQorICogc2VxdWVudGlhbCByYW5nZSBvZiB0b3VjaGVkIGJhY2tpbmcg c3RvcmUgbWVtb3J5LgorICogQHJlczogVGhlIHJlc291cmNlLgorICogQHN0YXJ0OiBUaGUgZmly c3QgcGFnZSB0b3VjaGVkLgorICogQGVuZDogVGhlIGxhc3QgcGFnZSB0b3VjaGVkICsgMS4KKyAq Lwordm9pZCB2bXdfcmVzb3VyY2VfZGlydHlfdXBkYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJl cywgcGdvZmZfdCBzdGFydCwKKwkJCSAgICAgICBwZ29mZl90IGVuZCkKK3sKKwlpZiAocmVzLT5k aXJ0eSkKKwkJcmVzLT5mdW5jLT5kaXJ0eV9yYW5nZV9hZGQocmVzLCBzdGFydCA8PCBQQUdFX1NI SUZULAorCQkJCQkgICBlbmQgPDwgUEFHRV9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZV9wcml2LmggYi9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZV9wcml2LmgKaW5kZXggOTg0ZTU4OGM2MmNhLi5jODUxNDQy ODZjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNl X3ByaXYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZV9wcml2 LmgKQEAgLTcxLDYgKzcxLDEyIEBAIHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9jb252IHsKICAq IEBjb21taXRfbm90aWZ5OiAgICAgSWYgdGhlIHJlc291cmNlIGlzIGEgY29tbWFuZCBidWZmZXIg bWFuYWdlZCByZXNvdXJjZSwKICAqICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgdG8gbm90 aWZ5IHRoYXQgYSBkZWZpbmUgb3IgcmVtb3ZlIGNvbW1hbmQKICAqICAgICAgICAgICAgICAgICAg ICAgaGFzIGJlZW4gY29tbWl0dGVkIHRvIHRoZSBkZXZpY2UuCisgKiBAZGlydHlfYWxsb2M6ICAg ICAgIEFsbG9jYXRlIGEgZGlydHkgdHJhY2tlci4gTlVMTCBpZiBkaXJ0eS10cmFja2luZyBpcyBu b3QKKyAqICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICogQGRpcnR5X2ZyZWU6ICAg ICAgICBGcmVlIHRoZSBkaXJ0eSB0cmFja2VyLgorICogQGRpcnR5X3N5bmM6ICAgICAgICBVcGxv YWQgdGhlIGRpcnR5IG1vYiBjb250ZW50cyB0byB0aGUgcmVzb3VyY2UuCisgKiBAZGlydHlfYWRk X3JhbmdlOiAgIEFkZCBhIHNlcXVlbnRpYWwgZGlydHkgcmFuZ2UgdG8gdGhlIHJlc291cmNlCisg KiAgICAgICAgICAgICAgICAgICAgIGRpcnR5IHRyYWNrZXIuCiAgKi8KIHN0cnVjdCB2bXdfcmVz X2Z1bmMgewogCWVudW0gdm13X3Jlc190eXBlIHJlc190eXBlOwpAQCAtOTAsNiArOTYsMTEgQEAg c3RydWN0IHZtd19yZXNfZnVuYyB7CiAJCSAgICAgICBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZl ciAqdmFsX2J1Zik7CiAJdm9pZCAoKmNvbW1pdF9ub3RpZnkpKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcywKIAkJCSAgICAgIGVudW0gdm13X2NtZGJ1Zl9yZXNfc3RhdGUgc3RhdGUpOworCWludCAo KmRpcnR5X2FsbG9jKShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworCXZvaWQgKCpkaXJ0eV9m cmVlKShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworCWludCAoKmRpcnR5X3N5bmMpKHN0cnVj dCB2bXdfcmVzb3VyY2UgKnJlcyk7CisJdm9pZCAoKmRpcnR5X3JhbmdlX2FkZCkoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzLCBzaXplX3Qgc3RhcnQsCisJCQkJIHNpemVfdCBlbmQpOwogfTsKIAog LyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9u LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmMKaW5kZXggZjYx MWIyMjkwYTFiLi43MTM0OWE3YmFlOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X3ZhbGlkYXRpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF92YWxpZGF0aW9uLmMKQEAgLTMzLDYgKzMzLDggQEAKICAqIHN0cnVjdCB2bXdfdmFsaWRhdGlv bl9ib19ub2RlIC0gQnVmZmVyIG9iamVjdCB2YWxpZGF0aW9uIG1ldGFkYXRhLgogICogQGJhc2U6 IE1ldGFkYXRhIHVzZWQgZm9yIFRUTSByZXNlcnZhdGlvbi0gYW5kIHZhbGlkYXRpb24uCiAgKiBA aGFzaDogQSBoYXNoIGVudHJ5IHVzZWQgZm9yIHRoZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGhhc2gg dGFibGUuCisgKiBAY29oZXJlbnRfY291bnQ6IElmIHN3aXRjaGluZyBiYWNrdXAgYnVmZmVycywg bnVtYmVyIG9mIG5ldyBjb2hlcmVudAorICogcmVzb3VyY2VzIHRoYXQgd2lsbCBoYXZlIHRoaXMg YnVmZmVyIGFzIGEgYmFja3VwIGJ1ZmZlci4KICAqIEBhc19tb2I6IFZhbGlkYXRlIGFzIG1vYi4K ICAqIEBjcHVfYmxpdDogVmFsaWRhdGUgZm9yIGNwdSBibGl0IGFjY2Vzcy4KICAqCkBAIC00Miw2 ICs0NCw3IEBACiBzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fYm9fbm9kZSB7CiAJc3RydWN0IHR0bV92 YWxpZGF0ZV9idWZmZXIgYmFzZTsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSBoYXNoOworCXVuc2ln bmVkIGludCBjb2hlcmVudF9jb3VudDsKIAl1MzIgYXNfbW9iIDogMTsKIAl1MzIgY3B1X2JsaXQg OiAxOwogfTsKQEAgLTQ1OSw2ICs0NjIsMTkgQEAgaW50IHZtd192YWxpZGF0aW9uX3Jlc19yZXNl cnZlKHN0cnVjdCB2bXdfdmFsaWRhdGlvbl9jb250ZXh0ICpjdHgsCiAJCQlpZiAocmV0KQogCQkJ CWdvdG8gb3V0X3VucmVzZXJ2ZTsKIAkJfQorCisJCWlmICh2YWwtPnN3aXRjaGluZ19iYWNrdXAg JiYgdmFsLT5uZXdfYmFja3VwICYmCisJCSAgICByZXMtPmNvaGVyZW50KSB7CisJCQlzdHJ1Y3Qg dm13X3ZhbGlkYXRpb25fYm9fbm9kZSAqYm9fbm9kZSA9CisJCQkJdm13X3ZhbGlkYXRpb25fZmlu ZF9ib19kdXAoY3R4LAorCQkJCQkJCSAgIHZhbC0+bmV3X2JhY2t1cCk7CisKKwkJCWlmIChXQVJO X09OKCFib19ub2RlKSkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfdW5yZXNl cnZlOworCQkJfQorCQkJYm9fbm9kZS0+Y29oZXJlbnRfY291bnQrKzsKKwkJfQogCX0KIAogCXJl dHVybiAwOwpAQCAtNTYyLDYgKzU3OCw5IEBAIGludCB2bXdfdmFsaWRhdGlvbl9ib192YWxpZGF0 ZShzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29udGV4dCAqY3R4LCBib29sIGludHIpCiAJaW50IHJl dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZjdHgtPmJvX2xpc3QsIGJhc2UuaGVh ZCkgeworCQlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9CisJCQljb250YWluZXJfb2Yo ZW50cnktPmJhc2UuYm8sIHR5cGVvZigqdmJvKSwgYmFzZSk7CisKIAkJaWYgKGVudHJ5LT5jcHVf YmxpdCkgewogCQkJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsKIAkJCQkuaW50ZXJy dXB0aWJsZSA9IGludHIsCkBAIC01NzYsNiArNTk1LDI3IEBAIGludCB2bXdfdmFsaWRhdGlvbl9i b192YWxpZGF0ZShzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29udGV4dCAqY3R4LCBib29sIGludHIp CiAJCX0KIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CisKKwkJLyoKKwkJICogUmF0aGVyIHRo YW4gaGF2aW5nIHRoZSByZXNvdXJjZSBjb2RlIGFsbG9jYXRpbmcgdGhlIGJvCisJCSAqIGRpcnR5 IHRyYWNrZXIgaW4gcmVzb3VyY2VfdW5yZXNlcnZlKCkgd2hlcmUgd2UgY2FuJ3QgZmFpbCwKKwkJ ICogRG8gaXQgaGVyZSB3aGVuIHZhbGlkYXRpbmcgdGhlIGJ1ZmZlciBvYmplY3QuCisJCSAqLwor CQlpZiAoZW50cnktPmNvaGVyZW50X2NvdW50KSB7CisJCQl1bnNpZ25lZCBpbnQgY29oZXJlbnRf Y291bnQgPSBlbnRyeS0+Y29oZXJlbnRfY291bnQ7CisKKwkJCXdoaWxlIChjb2hlcmVudF9jb3Vu dCkgeworCQkJCXJldCA9IHZtd19ib19kaXJ0eV9hZGQodmJvKTsKKwkJCQlpZiAocmV0KQorCQkJ CQlyZXR1cm4gcmV0OworCisJCQkJY29oZXJlbnRfY291bnQtLTsKKwkJCX0KKwkJCWVudHJ5LT5j b2hlcmVudF9jb3VudCAtPSBjb2hlcmVudF9jb3VudDsKKwkJfQorCisJCWlmICh2Ym8tPmRpcnR5 KQorCQkJdm13X2JvX2RpcnR5X3NjYW4odmJvKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04Mjgs MyArODY4LDM0IEBAIGludCB2bXdfdmFsaWRhdGlvbl9wcmVsb2FkX3JlcyhzdHJ1Y3Qgdm13X3Zh bGlkYXRpb25fY29udGV4dCAqY3R4LAogCWN0eC0+bWVtX3NpemVfbGVmdCArPSBzaXplOwogCXJl dHVybiAwOwogfQorCisvKioKKyAqIHZtd192YWxpZGF0aW9uX2JvX2JhY2tvZmYgLSBVbnJlc2Vy dmUgYnVmZmVyIG9iamVjdHMgcmVnaXN0ZXJlZCB3aXRoIGEKKyAqIHZhbGlkYXRpb24gY29udGV4 dAorICogQGN0eDogVGhlIHZhbGlkYXRpb24gY29udGV4dAorICoKKyAqIFRoaXMgZnVuY3Rpb24g dW5yZXNlcnZlcyB0aGUgYnVmZmVyIG9iamVjdHMgcHJldmlvdXNseSByZXNlcnZlZCB1c2luZwor ICogdm13X3ZhbGlkYXRpb25fYm9fcmVzZXJ2ZS4gSXQncyB0eXBpY2FsbHkgdXNlZCBhcyBwYXJ0 IG9mIGFuIGVycm9yIHBhdGgKKyAqLwordm9pZCB2bXdfdmFsaWRhdGlvbl9ib19iYWNrb2ZmKHN0 cnVjdCB2bXdfdmFsaWRhdGlvbl9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHZtd192YWxpZGF0 aW9uX2JvX25vZGUgKmVudHJ5OworCisJLyoKKwkgKiBTd2l0Y2hpbmcgY29oZXJlbnQgcmVzb3Vy Y2UgYmFja3VwIGJ1ZmZlcnMgZmFpbGVkLgorCSAqIFJlbGVhc2UgY29ycmVzcG9uZGluZyBidWZm ZXIgb2JqZWN0IGRpcnR5IHRyYWNrZXJzLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50 cnksICZjdHgtPmJvX2xpc3QsIGJhc2UuaGVhZCkgeworCQlpZiAoZW50cnktPmNvaGVyZW50X2Nv dW50KSB7CisJCQl1bnNpZ25lZCBpbnQgY29oZXJlbnRfY291bnQgPSBlbnRyeS0+Y29oZXJlbnRf Y291bnQ7CisJCQlzdHJ1Y3Qgdm13X2J1ZmZlcl9vYmplY3QgKnZibyA9CisJCQkJY29udGFpbmVy X29mKGVudHJ5LT5iYXNlLmJvLCB0eXBlb2YoKnZibyksCisJCQkJCSAgICAgYmFzZSk7CisKKwkJ CXdoaWxlIChjb2hlcmVudF9jb3VudC0tKQorCQkJCXZtd19ib19kaXJ0eV9yZWxlYXNlKHZibyk7 CisJCX0KKwl9CisKKwl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmY3R4LT50aWNrZXQsICZj dHgtPmJvX2xpc3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfdmFsaWRhdGlvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlv bi5oCmluZGV4IDFkMjMyMmFkNmZkNS4uZmQ4M2UwMTdjMmE1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5oCkBAIC0xNzIsMjAgKzE3Miw2IEBAIHZtd192YWxp ZGF0aW9uX2JvX3Jlc2VydmUoc3RydWN0IHZtd192YWxpZGF0aW9uX2NvbnRleHQgKmN0eCwKIAkJ CQkgICAgICBOVUxMLCB0cnVlKTsKIH0KIAotLyoqCi0gKiB2bXdfdmFsaWRhdGlvbl9ib19iYWNr b2ZmIC0gVW5yZXNlcnZlIGJ1ZmZlciBvYmplY3RzIHJlZ2lzdGVyZWQgd2l0aCBhCi0gKiB2YWxp ZGF0aW9uIGNvbnRleHQKLSAqIEBjdHg6IFRoZSB2YWxpZGF0aW9uIGNvbnRleHQKLSAqCi0gKiBU aGlzIGZ1bmN0aW9uIHVucmVzZXJ2ZXMgdGhlIGJ1ZmZlciBvYmplY3RzIHByZXZpb3VzbHkgcmVz ZXJ2ZWQgdXNpbmcKLSAqIHZtd192YWxpZGF0aW9uX2JvX3Jlc2VydmUuIEl0J3MgdHlwaWNhbGx5 IHVzZWQgYXMgcGFydCBvZiBhbiBlcnJvciBwYXRoCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot dm13X3ZhbGlkYXRpb25fYm9fYmFja29mZihzdHJ1Y3Qgdm13X3ZhbGlkYXRpb25fY29udGV4dCAq Y3R4KQotewotCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZjdHgtPnRpY2tldCwgJmN0eC0+ Ym9fbGlzdCk7Ci19Ci0KIC8qKgogICogdm13X3ZhbGlkYXRpb25fYm9fZmVuY2UgLSBVbnJlc2Vy dmUgYW5kIGZlbmNlIGJ1ZmZlciBvYmplY3RzIHJlZ2lzdGVyZWQKICAqIHdpdGggYSB2YWxpZGF0 aW9uIGNvbnRleHQKQEAgLTI2OCw0ICsyNTQsNiBAQCBpbnQgdm13X3ZhbGlkYXRpb25fcHJlbG9h ZF9yZXMoc3RydWN0IHZtd192YWxpZGF0aW9uX2NvbnRleHQgKmN0eCwKIAkJCSAgICAgICB1bnNp Z25lZCBpbnQgc2l6ZSk7CiB2b2lkIHZtd192YWxpZGF0aW9uX3Jlc19zZXRfZGlydHkoc3RydWN0 IHZtd192YWxpZGF0aW9uX2NvbnRleHQgKmN0eCwKIAkJCQkgIHZvaWQgKnZhbF9wcml2YXRlLCB1 MzIgZGlydHkpOwordm9pZCB2bXdfdmFsaWRhdGlvbl9ib19iYWNrb2ZmKHN0cnVjdCB2bXdfdmFs aWRhdGlvbl9jb250ZXh0ICpjdHgpOworCiAjZW5kaWYKLS0gCjIuMjAuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs