From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Goel, Sameer" Subject: Re: [RFC v2 7/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Mon, 25 Sep 2017 18:03:07 -0600 Message-ID: <7ccbb6c0-8ee1-6e57-92a3-2ee1612ead79@codeaurora.org> References: <1505954230-18892-1-git-send-email-sgoel@codeaurora.org> <1505954230-18892-8-git-send-email-sgoel@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dwdLK-0004N9-Jy for xen-devel@lists.xenproject.org; Tue, 26 Sep 2017 00:03:18 +0000 In-Reply-To: <1505954230-18892-8-git-send-email-sgoel@codeaurora.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, wei.liu2@citrix.com, george.dunlap@eu.citrix.com, Andrew.Cooper3@citrix.com, jbeulich@suse.com, Ian.Jackson@citrix.com, nd@arm.com, robin.murphy@arm.com, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org CgpPbiA5LzIwLzIwMTcgNjozNyBQTSwgU2FtZWVyIEdvZWwgd3JvdGU6Cj4gVGhpcyBkcml2ZXIg Zm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBUaGUgaW50ZW50IGhl cmUKPiBpcyB0byByZXVzZSBhcyBtdWNoIExpbnV4IGNvZGUgYXMgcG9zc2libGUuCj4gLSBHbHVl IGNvZGUgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBicmlkZ2UgdGhlIEFQSSBjYWxscy4KPiAtIENh bGxlZCBMaW51eCBmdW5jdGlvbnMgZnJvbSB0aGUgWGVuIElPTU1VIGZ1bmN0aW9uIGNhbGxzLgo+ IC0gWGVuIG1vZGlmaWNhdGlvbnMgYXJlIHByZWNlZGVkIGJ5IC8qWGVuOiBjb21tZW50ICovCj4g Cj4gU2lnbmVkLW9mZi1ieTogU2FtZWVyIEdvZWwgPHNnb2VsQGNvZGVhdXJvcmEub3JnPgo+IC0t LQo+ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgIHwgICAxICsKPiAgeGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyB8IDg1MyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tCj4gIDIgZmlsZXMgY2hhbmdlZCwgNzM4IGluc2VydGlvbnMoKyks IDExNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvYXJtL01ha2VmaWxlIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4g aW5kZXggZjRjZDI2ZS4uNTdhNmRhNiAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC9hcm0vTWFrZWZpbGUKPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFr ZWZpbGUKPiBAQCAtMSwyICsxLDMgQEAKPiAgb2JqLXkgKz0gaW9tbXUubwo+ICBvYmoteSArPSBz bW11Lm8KPiArb2JqLXkgKz0gc21tdS12My5vCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL2FybS9zbW11LXYzLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21t dS12My5jCj4gaW5kZXggMzgwOTY5YS4uOGYzYjQzZCAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvYXJtL3NtbXUtdjMuYwo+IEBAIC0xOCwyOCArMTgsMjY2IEBACj4gICAqIEF1dGhvcjogV2ls bCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+Cj4gICAqCj4gICAqIFRoaXMgZHJpdmVyIGlz IHBvd2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQgYm9tYmF5IG1peC4KPiArICoKPiArICoKPiArICog QmFzZWQgb24gTGludXggZHJpdmVycy9pb21tdS9hcm0tc21tdS12My5jCj4gKyAqID0+IGNvbW1p dCBiZGY5NTkyMzA4NmZiMzU5Y2NiNDRjODE1NzI0YzNhY2UxNjExYzkwCj4gKyAqCj4gKyAqIFhl biBtb2RpZmljYXRpb25zOgo+ICsgKiBTYW1lZXIgR29lbCA8c2dvZWxAY29kZWF1cm9yYS5vcmc+ Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNywgVGhlIExpbnV4IEZvdW5kYXRpb24sIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCj4gKyAqCj4gICAqLwo+ICAKPiAtI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4K PiAtI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW9ydC5oPgo+IC0jaW5jbHVkZSA8bGludXgvZGVsYXku aD4KPiAtI2luY2x1ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgo+IC0jaW5jbHVkZSA8bGludXgvZXJy Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2lv bW11Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvbXNpLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZi5o Pgo+IC0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+IC0jaW5jbHVkZSA8bGludXgvb2Zf aW9tbXUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gLSNpbmNsdWRlIDxs aW51eC9wY2kuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+IC0KPiAt I2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Cj4gLQo+IC0jaW5jbHVkZSAiaW8tcGd0YWJsZS5o Igo+ICsjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+Cj4g KyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KPiArI2luY2x1ZGUgPHhlbi9lcnIuaD4KPiArI2luY2x1 ZGUgPHhlbi9pcnEuaD4KPiArI2luY2x1ZGUgPHhlbi9saWIuaD4KPiArI2luY2x1ZGUgPHhlbi9s aXN0Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbW0uaD4KPiArI2luY2x1ZGUgPHhlbi92bWFwLmg+Cj4g KyNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiArI2lu Y2x1ZGUgPHhlbi9zaXplcy5oPgo+ICsjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgo+ICsjaW5jbHVk ZSA8YXNtL2RldmljZS5oPgo+ICsjaW5jbHVkZSA8YXNtL2lvLmg+Cj4gKyNpbmNsdWRlIDxhc20v cGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPHhlbi9hY3BpLmg+Cj4gKwo+ICt0eXBlZGVmIHBhZGRy X3QgcGh5c19hZGRyX3Q7Cj4gK3R5cGVkZWYgcGFkZHJfdCBkbWFfYWRkcl90Owo+ICsKPiArLyog QWxpYXMgdG8gWGVuIGRldmljZSB0cmVlIGhlbHBlcnMgKi8KPiArI2RlZmluZSBkZXZpY2Vfbm9k ZSBkdF9kZXZpY2Vfbm9kZQo+ICsjZGVmaW5lIG9mX3BoYW5kbGVfYXJncyBkdF9waGFuZGxlX2Fy Z3MKPiArI2RlZmluZSBvZl9kZXZpY2VfaWQgZHRfZGV2aWNlX21hdGNoCj4gKyNkZWZpbmUgb2Zf bWF0Y2hfbm9kZSBkdF9tYXRjaF9ub2RlCj4gKyNkZWZpbmUgb2ZfcHJvcGVydHlfcmVhZF91MzIo bnAsIHBuYW1lLCBvdXQpICghZHRfcHJvcGVydHlfcmVhZF91MzIobnAsIHBuYW1lLCBvdXQpKQo+ ICsjZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfYm9vbCBkdF9wcm9wZXJ0eV9yZWFkX2Jvb2wKPiAr I2RlZmluZSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyBkdF9wYXJzZV9waGFuZGxlX3dpdGhf YXJncwo+ICsjZGVmaW5lIG11dGV4IHNwaW5sb2NrX3QKPiArI2RlZmluZSBtdXRleF9pbml0IHNw aW5fbG9ja19pbml0Cj4gKyNkZWZpbmUgbXV0ZXhfbG9jayBzcGluX2xvY2sKPiArI2RlZmluZSBt dXRleF91bmxvY2sgc3Bpbl91bmxvY2sKPiArCj4gKy8qIFhlbjogSGVscGVycyB0byBnZXQgZGV2 aWNlIE1NSU8gYW5kIElSUXMgKi8KPiArc3RydWN0IHJlc291cmNlIHsKPiArCXU2NCBhZGRyOwo+ ICsJdTY0IHNpemU7Cj4gKwl1bnNpZ25lZCBpbnQgdHlwZTsKPiArfTsKPiArCj4gKyNkZWZpbmUg cmVzb3VyY2Vfc2l6ZShyZXMpICgocmVzKS0+c2l6ZSkKPiArCj4gKyNkZWZpbmUgcGxhdGZvcm1f ZGV2aWNlIGRldmljZQo+ICsKPiArI2RlZmluZSBJT1JFU09VUkNFX01FTSAwCj4gKyNkZWZpbmUg SU9SRVNPVVJDRV9JUlEgMQo+ICsKPiArc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJCQkJICAgICAg dW5zaWduZWQgaW50IHR5cGUsCj4gKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG51bSkKPiArewo+ ICsJLyoKPiArCSAqIFRoZSByZXNvdXJjZSBpcyBvbmx5IHVzZWQgYmV0d2VlbiAyIGNhbGxzIG9m IHBsYXRmb3JtX2dldF9yZXNvdXJjZS4KPiArCSAqIEl0J3MgcXVpdGUgdWdseSBidXQgaXQncyBh dm9pZCB0byBhZGQgdG9vIG11Y2ggY29kZSBpbiB0aGUgcGFydAo+ICsJICogaW1wb3J0ZWQgZnJv bSBMaW51eAo+ICsJICovCj4gKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlczsKPiArCXN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOwo+ICsJc3RydWN0IGFjcGlfaW9ydF9zbW11X3Yz ICpub2RlX3NtbXVfZGF0YTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXJlcy50eXBlID0gdHlw ZTsKPiArCj4gKwlzd2l0Y2ggKHR5cGUpIHsKPiArCWNhc2UgSU9SRVNPVVJDRV9NRU06Cj4gKwkJ aWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPiArCQkJcmV0ID0gMTsKPiArCQkJaW9ydF9u b2RlID0gcGRldi0+YWNwaV9ub2RlOwo+ICsJCQlub2RlX3NtbXVfZGF0YSA9Cj4gKwkJCQkoc3Ry dWN0IGFjcGlfaW9ydF9zbW11X3YzICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7Cj4gKwo+ICsJCQlp ZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkgewo+ICsJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVf ZGF0YS0+YmFzZV9hZGRyZXNzOwo+ICsJCQkJcmVzLnNpemUgPSBTWl8xMjhLOwo+ICsJCQkJcmV0 ID0gMDsKPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJldCA9IGR0X2RldmljZV9nZXRfYWRk cmVzcyhkZXZfdG9fZHQocGRldiksIG51bSwKPiArCQkJCQkJICAgICZyZXMuYWRkciwgJnJlcy5z aXplKTsKPiArCQl9Cj4gKwo+ICsJCXJldHVybiAoKHJldCkgPyBOVUxMIDogJnJlcyk7Cj4gKwo+ ICsJY2FzZSBJT1JFU09VUkNFX0lSUToKPiArCQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldl90 b19kdChwZGV2KSwgbnVtKTsKPiArCj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiBOVUxM Owo+ICsKPiArCQlyZXMuYWRkciA9IHJldDsKPiArCQlyZXMuc2l6ZSA9IDE7Cj4gKwo+ICsJCXJl dHVybiAmcmVzOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwgY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGR0 X3Byb3BlcnR5ICpkdHByb3A7Cj4gKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsK PiArCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqbm9kZV9zbW11X2RhdGE7Cj4gKwlpbnQgcmV0 ID0gMDsKPiArCj4gKwlpZiAocGRldi0+dHlwZSA9PSBERVZfQUNQSSkgewo+ICsJCWlvcnRfbm9k ZSA9IHBkZXYtPmFjcGlfbm9kZTsKPiArCQlub2RlX3NtbXVfZGF0YSA9IChzdHJ1Y3QgYWNwaV9p b3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKPiArCj4gKwkJaWYgKG5vZGVfc21t dV9kYXRhICE9IE5VTEwpIHsKPiArCQkJaWYgKCFzdHJjbXAobmFtZSwgImV2ZW50cSIpKQo+ICsJ CQkJcmV0ID0gbm9kZV9zbW11X2RhdGEtPmV2ZW50X2dzaXY7Cj4gKwkJCWVsc2UgaWYgKCFzdHJj bXAobmFtZSwgInByaXEiKSkKPiArCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5wcmlfZ3NpdjsK PiArCQkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY21kcS1zeW5jIikpCj4gKwkJCQlyZXQgPSBu b2RlX3NtbXVfZGF0YS0+c3luY19nc2l2Owo+ICsJCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJn ZXJyb3IiKSkKPiArCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5nZXJyX2dzaXY7Cj4gKwkJCWVs c2UKPiArCQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlkdHByb3Ag PSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVycnVwdC1uYW1lcyIsIE5V TEwpOwo+ICsJCWlmICghZHRwcm9wKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJaWYg KCFkdHByb3AtPnZhbHVlKQo+ICsJCQlyZXR1cm4gLUVOT0RBVEE7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArI2RlZmluZSByZWFkeF9wb2xsX3RpbWVvdXQob3AsIGFkZHIs IHZhbCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwKPiArKHsgXAo+ICsJc190aW1lX3Qg ZGVhZGxpbmUgPSBOT1coKSArIE1JQ1JPU0VDUyh0aW1lb3V0X3VzKTsgXAo+ICsJZm9yICg7Oykg eyBcCj4gKwkJKHZhbCkgPSBvcChhZGRyKTsgXAo+ICsJCWlmIChjb25kKSBcCj4gKwkJCWJyZWFr OyBcCj4gKwkJaWYgKE5PVygpID4gZGVhZGxpbmUpIHsgXAo+ICsJCQkodmFsKSA9IG9wKGFkZHIp OyBcCj4gKwkJCWJyZWFrOyBcCj4gKwkJfSBcCj4gKwkJY3B1X3JlbGF4KCk7IFwKPiArCQl1ZGVs YXkoc2xlZXBfdXMpOyBcCj4gKwl9IFwKPiArCShjb25kKSA/IDAgOiAtRVRJTUVET1VUOyBcCj4g K30pCj4gKwo+ICsjZGVmaW5lIHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZhbCwg Y29uZCwgZGVsYXlfdXMsIHRpbWVvdXRfdXMpIFwKPiArCXJlYWR4X3BvbGxfdGltZW91dChyZWFk bF9yZWxheGVkLCBhZGRyLCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKQo+ICsKPiAr LyogWGVuOiBIZWxwZXJzIGZvciBJUlEgZnVuY3Rpb25zICovCj4gKyNkZWZpbmUgcmVxdWVzdF9p cnEoaXJxLCBmdW5jLCBmbGFncywgbmFtZSwgZGV2KSByZXF1ZXN0X2lycShpcnEsIGZsYWdzLCBm dW5jLCBuYW1lLCBkZXYpCj4gKyNkZWZpbmUgZnJlZV9pcnEgcmVsZWFzZV9pcnEKPiArCj4gK2Vu dW0gaXJxcmV0dXJuIHsKPiArCUlSUV9OT05FCT0gKDAgPDwgMCksCj4gKwlJUlFfSEFORExFRAk9 ICgxIDw8IDApLAo+ICt9Owo+ICsKPiArdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5f dDsKPiArCj4gKy8qIERldmljZSBsb2dnZXIgZnVuY3Rpb25zICovCj4gKyNkZWZpbmUgZGV2X3By aW50KGRldiwgbHZsLCBmbXQsIC4uLikJCQkJCQlcCj4gKwkgcHJpbnRrKGx2bCAic21tdTogIiBm bXQsICMjIF9fVkFfQVJHU19fKQo+ICsKPiArI2RlZmluZSBkZXZfZGJnKGRldiwgZm10LCAuLi4p IGRldl9wcmludChkZXYsIFhFTkxPR19ERUJVRywgZm10LCAjIyBfX1ZBX0FSR1NfXykKPiArI2Rl ZmluZSBkZXZfbm90aWNlKGRldiwgZm10LCAuLi4pIGRldl9wcmludChkZXYsIFhFTkxPR19JTkZP LCBmbXQsICMjIF9fVkFfQVJHU19fKQo+ICsjZGVmaW5lIGRldl93YXJuKGRldiwgZm10LCAuLi4p IGRldl9wcmludChkZXYsIFhFTkxPR19XQVJOSU5HLCBmbXQsICMjIF9fVkFfQVJHU19fKQo+ICsj ZGVmaW5lIGRldl9lcnIoZGV2LCBmbXQsIC4uLikgZGV2X3ByaW50KGRldiwgWEVOTE9HX0VSUiwg Zm10LCAjIyBfX1ZBX0FSR1NfXykKPiArI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZtdCwgLi4uKSBk ZXZfcHJpbnQoZGV2LCBYRU5MT0dfSU5GTywgZm10LCAjIyBfX1ZBX0FSR1NfXykKPiArCj4gKyNk ZWZpbmUgZGV2X2Vycl9yYXRlbGltaXRlZChkZXYsIGZtdCwgLi4uKQkJCQkJXAo+ICsJIGRldl9w cmludChkZXYsIFhFTkxPR19FUlIsIGZtdCwgIyMgX19WQV9BUkdTX18pCj4gKwo+ICsjZGVmaW5l IGRldl9uYW1lKGRldikgZHRfbm9kZV9mdWxsX25hbWUoZGV2X3RvX2R0KGRldikpCj4gKwo+ICsv KiBBbGlhcyB0byBYZW4gYWxsb2NhdGlvbiBoZWxwZXJzICovCj4gKyNkZWZpbmUga2ZyZWUgeGZy ZWUKPiArI2RlZmluZSBrbWFsbG9jKHNpemUsIGZsYWdzKQkJX3htYWxsb2Moc2l6ZSwgc2l6ZW9m KHZvaWQgKikpCj4gKyNkZWZpbmUga3phbGxvYyhzaXplLCBmbGFncykJCV94emFsbG9jKHNpemUs IHNpemVvZih2b2lkICopKQo+ICsjZGVmaW5lIGRldm1fa3phbGxvYyhkZXYsIHNpemUsIGZsYWdz KQlfeHphbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkKPiArI2RlZmluZSBrbWFsbG9jX2FycmF5 KHNpemUsIG4sIGZsYWdzKQlfeG1hbGxvY19hcnJheShzaXplLCBzaXplb2Yodm9pZCAqKSwgbikK PiArCj4gKy8qIENvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwo+ICsjdW5kZWYgV0FSTl9PTgo+ICsj ZGVmaW5lIFdBUk5fT04oY29uZCkgKCEhY29uZCkKPiArI2RlZmluZSBXQVJOX09OX09OQ0UoY29u ZCkgV0FSTl9PTihjb25kKQo+ICsKPiArc3RhdGljIHZvaWQgX19pb21lbSAqZGV2bV9pb3JlbWFw X3Jlc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCQkgICBzdHJ1Y3QgcmVzb3VyY2Ug KnJlcykKPiArewo+ICsJdm9pZCBfX2lvbWVtICpwdHI7Cj4gKwo+ICsJaWYgKCFyZXMgfHwgcmVz LT50eXBlICE9IElPUkVTT1VSQ0VfTUVNKSB7Cj4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJl c291cmNlXG4iKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCX0KPiArCj4gKwlw dHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNpemUpOwo+ICsJaWYgKCFwdHIp IHsKPiArCQlkZXZfZXJyKGRldiwKPiArCQkJImlvcmVtYXAgZmFpbGVkIChhZGRyIDB4JSJQUkl4 NjQiIHNpemUgMHglIlBSSXg2NCIpXG4iLAo+ICsJCQlyZXMtPmFkZHIsIHJlcy0+c2l6ZSk7Cj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHB0cjsKPiAr fQo+ICsKPiArLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4gKi8KPiArc3RydWN0IGlvbW11X2Rv bWFpbiB7Cj4gKwkvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpb21tdV9k b21haW4gKi8KPiArCXN0cnVjdCBhcm1fc21tdV9kb21haW4JCSpwcml2Owo+ICsJdW5zaWduZWQg aW50CQkJdHlwZTsKPiArCj4gKwlhdG9taWNfdCByZWY7Cj4gKwkvKiBVc2VkIHRvIGxpbmsgaW9t bXVfZG9tYWluIGNvbnRleHRzIGZvciBhIHNhbWUgZG9tYWluLgo+ICsJICogVGhlcmUgaXMgYXQg bGVhc3Qgb25lIHBlci1TTU1VIHRvIHVzZWQgYnkgdGhlIGRvbWFpbi4KPiArCSAqLwo+ICsJc3Ry dWN0IGxpc3RfaGVhZAkJbGlzdDsKPiArfTsKPiArLyogWGVuOiBEb21haW4gdHlwZSBkZWZpbml0 aW9ucy4gTm90IHJlYWxseSBuZWVkZWQgZm9yIFhlbiwgZGVmaW5pbmcgdG8gcG9ydAo+ICsgKiBM aW51eCBjb2RlIGFzLWlzCj4gKyAqLwo+ICsjZGVmaW5lIElPTU1VX0RPTUFJTl9VTk1BTkFHRUQg MAo+ICsjZGVmaW5lIElPTU1VX0RPTUFJTl9ETUEgMQo+ICsjZGVmaW5lIElPTU1VX0RPTUFJTl9J REVOVElUWSAyCj4gKwo+ICsvKiBYZW46IERlc2NyaWJlcyBpbmZvcm1hdGlvbiByZXF1aXJlZCBm b3IgYSBYZW4gZG9tYWluICovCj4gK3N0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluIHsKPiArCXNw aW5sb2NrX3QJCQlsb2NrOwo+ICsJLyogTGlzdCBvZiBpb21tdSBkb21haW5zIGFzc29jaWF0ZWQg dG8gdGhpcyBkb21haW4gKi8KPiArCXN0cnVjdCBsaXN0X2hlYWQJCWlvbW11X2RvbWFpbnM7Cj4g K307Cj4gKwo+ICsvKgo+ICsgKiBYZW46IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0 b3JlZCBpbiBkZXYtPmFyY2hkYXRhLmlvbW11Cj4gKyAqCj4gKyAqIFRoZSBkZXYtPmFyY2hkYXRh LmlvbW11IHN0b3JlcyB0aGUgaW9tbXVfZG9tYWluIChydW50aW1lIGNvbmZpZ3VyYXRpb24gb2YK PiArICogdGhlIFNNTVUpLgo+ICsgKi8KPiArc3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2Ugewo+ ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+ICt9Owo+ICAKPiAgLyogTU1JTyByZWdp c3RlcnMgKi8KPiAgI2RlZmluZSBBUk1fU01NVV9JRFIwCQkJMHgwCj4gQEAgLTQxMiwxMCArNjUw LDEyIEBACj4gICNkZWZpbmUgTVNJX0lPVkFfQkFTRQkJCTB4ODAwMDAwMAo+ICAjZGVmaW5lIE1T SV9JT1ZBX0xFTkdUSAkJCTB4MTAwMDAwCj4gIAo+ICsjaWYgMCAvKiBOb3QgYXBwbGljYWJsZSBm b3IgWGVuICovCj4gIHN0YXRpYyBib29sIGRpc2FibGVfYnlwYXNzOwo+ICBtb2R1bGVfcGFyYW1f bmFtZWQoZGlzYWJsZV9ieXBhc3MsIGRpc2FibGVfYnlwYXNzLCBib29sLCBTX0lSVUdPKTsKPiAg TU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2J5cGFzcywKPiAgCSJEaXNhYmxlIGJ5cGFzcyBzdHJl YW1zIHN1Y2ggdGhhdCBpbmNvbWluZyB0cmFuc2FjdGlvbnMgZnJvbSBkZXZpY2VzIHRoYXQgYXJl IG5vdCBhdHRhY2hlZCB0byBhbiBpb21tdSBkb21haW4gd2lsbCByZXBvcnQgYW4gYWJvcnQgYmFj ayB0byB0aGUgZGV2aWNlIGFuZCB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvIHBhc3MgdGhyb3VnaCB0 aGUgU01NVS4iKTsKPiArI2VuZGlmCj4gIAo+ICBlbnVtIHByaV9yZXNwIHsKPiAgCVBSSV9SRVNQ X0RFTlksCj4gQEAgLTQyMyw2ICs2NjMsNyBAQCBlbnVtIHByaV9yZXNwIHsKPiAgCVBSSV9SRVNQ X1NVQ0MsCj4gIH07Cj4gIAo+ICsjaWYgMCAvKiBYZW46IE5vIE1TSSBzdXBwb3J0IGluIHRoaXMg aXRlcmF0aW9uICovCj4gIGVudW0gYXJtX3NtbXVfbXNpX2luZGV4IHsKPiAgCUVWVFFfTVNJX0lO REVYLAo+ICAJR0VSUk9SX01TSV9JTkRFWCwKPiBAQCAtNDQ3LDYgKzY4OCw3IEBAIHN0YXRpYyBw aHlzX2FkZHJfdCBhcm1fc21tdV9tc2lfY2ZnW0FSTV9TTU1VX01BWF9NU0lTXVszXSA9IHsKPiAg CQlBUk1fU01NVV9QUklRX0lSUV9DRkcyLAo+ICAJfSwKPiAgfTsKPiArI2VuZGlmCj4gIAo+ICBz dHJ1Y3QgYXJtX3NtbXVfY21kcV9lbnQgewo+ICAJLyogQ29tbW9uIGZpZWxkcyAqLwo+IEBAIC01 NTEsNiArNzkzLDggQEAgc3RydWN0IGFybV9zbW11X3MyX2NmZyB7Cj4gIAl1MTYJCQkJdm1pZDsK PiAgCXU2NAkJCQl2dHRicjsKPiAgCXU2NAkJCQl2dGNyOwo+ICsJLyogWGVuOiBEb21haW4gYXNz b2NpYXRlZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gKi8KPiArCXN0cnVjdCBkb21haW4JCQkqZG9t YWluOwo+ICB9Owo+ICAKPiAgc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewo+IEBAIC02MjMs OSArODY3LDIwIEBAIHN0cnVjdCBhcm1fc21tdV9kZXZpY2Ugewo+ICAJc3RydWN0IGFybV9zbW11 X3N0cnRhYl9jZmcJc3RydGFiX2NmZzsKPiAgCj4gIAkvKiBJT01NVSBjb3JlIGNvZGUgaGFuZGxl ICovCj4gLQlzdHJ1Y3QgaW9tbXVfZGV2aWNlCQlpb21tdTsKPiArCS8vc3RydWN0IGlvbW11X2Rl dmljZQkJaW9tbXU7Cj4gKwo+ICsJLyogWGVuOiBOZWVkIHRvIGtlZXAgYSBsaXN0IG9mIFNNTVUg ZGV2aWNlcyAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBkZXZpY2VzOwo+ ICB9Owo+ICAKPiArLyogWGVuOiBLZWVwIGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0 aCB0aGlzIGRyaXZlciAqLwo+ICtzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFybV9zbW11X2Rldmlj ZXNfbG9jayk7Cj4gK3N0YXRpYyBMSVNUX0hFQUQoYXJtX3NtbXVfZGV2aWNlcyk7Cj4gKy8qIFhl bjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwo+ICtzdGF0aWMK PiArc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3Qg Zndub2RlX2hhbmRsZSAqZndub2RlKTsKPiArCj4gKwo+ICAvKiBTTU1VIHByaXZhdGUgZGF0YSBm b3IgZWFjaCBtYXN0ZXIgKi8KPiAgc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhIHsKPiAgCXN0 cnVjdCBhcm1fc21tdV9kZXZpY2UJCSpzbW11Owo+IEBAIC02NDIsNyArODk3LDcgQEAgZW51bSBh cm1fc21tdV9kb21haW5fc3RhZ2Ugewo+ICAKPiAgc3RydWN0IGFybV9zbW11X2RvbWFpbiB7Cj4g IAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlCQkqc21tdTsKPiAtCXN0cnVjdCBtdXRleAkJCWluaXRf bXV0ZXg7IC8qIFByb3RlY3RzIHNtbXUgcG9pbnRlciAqLwo+ICsJbXV0ZXgJCQlpbml0X211dGV4 OyAvKiBQcm90ZWN0cyBzbW11IHBvaW50ZXIgKi8KPiAgCj4gIAlzdHJ1Y3QgaW9fcGd0YWJsZV9v cHMJCSpwZ3RibF9vcHM7Cj4gIAlzcGlubG9ja190CQkJcGd0YmxfbG9jazsKPiBAQCAtNzM3LDE1 ICs5OTIsMTYgQEAgc3RhdGljIHZvaWQgcXVldWVfaW5jX3Byb2Qoc3RydWN0IGFybV9zbW11X3F1 ZXVlICpxKQo+ICAgKi8KPiAgc3RhdGljIGludCBxdWV1ZV9wb2xsX2NvbnMoc3RydWN0IGFybV9z bW11X3F1ZXVlICpxLCBib29sIGRyYWluLCBib29sIHdmZSkKPiAgewo+IC0Ja3RpbWVfdCB0aW1l b3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRfVVMp Owo+ICsJc190aW1lX3QgZGVhZGxpbmUgPSBOT1coKSArIE1JQ1JPU0VDUyhBUk1fU01NVV9QT0xM X1RJTUVPVVRfVVMpOwo+ICAKPiAgCXdoaWxlIChxdWV1ZV9zeW5jX2NvbnMocSksIChkcmFpbiA/ ICFxdWV1ZV9lbXB0eShxKSA6IHF1ZXVlX2Z1bGwocSkpKSB7Cj4gLQkJaWYgKGt0aW1lX2NvbXBh cmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkKPiArCj4gKwkJaWYgKE5PVygpID4gZGVhZGxp bmUpCj4gIAkJCXJldHVybiAtRVRJTUVET1VUOwo+ICAKPiAtCQlpZiAod2ZlKSB7Cj4gKwkJaWYg KHdmZSkKPiAgCQkJd2ZlKCk7Cj4gLQkJfSBlbHNlIHsKPiArCQllbHNlIHsKPiAgCQkJY3B1X3Jl bGF4KCk7Cj4gIAkJCXVkZWxheSgxKTsKPiAgCQl9Cj4gQEAgLTkzMSw3ICsxMTg3LDcgQEAgc3Rh dGljIHZvaWQgYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWQoc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSwKPiAgCQlkZXZfZXJyX3JhdGVsaW1pdGVkKHNtbXUtPmRldiwgIkNNRF9TWU5DIHRpbWVv dXRcbiIpOwo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21tdS0+Y21kcS5sb2NrLCBmbGFn cyk7Cj4gIH0KPiAtCj4gKyNpZiAwCj4gIC8qIENvbnRleHQgZGVzY3JpcHRvciBtYW5pcHVsYXRp b24gZnVuY3Rpb25zICovCj4gIHN0YXRpYyB1NjQgYXJtX3NtbXVfY3B1X3Rjcl90b19jZCh1NjQg dGNyKQo+ICB7Cj4gQEAgLTk3NCw3ICsxMjMwLDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfd3Jp dGVfY3R4X2Rlc2Moc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPiAgCj4gIAljZmctPmNk cHRyWzNdID0gY3B1X3RvX2xlNjQoY2ZnLT5jZC5tYWlyIDw8IENUWERFU0NfQ0RfM19NQUlSX1NI SUZUKTsKPiAgfQo+IC0KPiArI2VuZGlmCj4gIC8qIFN0cmVhbSB0YWJsZSBtYW5pcHVsYXRpb24g ZnVuY3Rpb25zICovCj4gIHN0YXRpYyB2b2lkCj4gIGFybV9zbW11X3dyaXRlX3N0cnRhYl9sMV9k ZXNjKF9fbGU2NCAqZHN0LCBzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2wxX2Rlc2MgKmRlc2MpCj4g QEAgLTEwNDQsNyArMTMwMCw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3dyaXRlX3N0cnRhYl9l bnQoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPiAgCQkJc3RlX2xpdmUg PSB0cnVlOwo+ICAJCQlicmVhazsKPiAgCQljYXNlIFNUUlRBQl9TVEVfMF9DRkdfQUJPUlQ6Cj4g LQkJCWlmIChkaXNhYmxlX2J5cGFzcykKPiArCQkJLy9ObyBieXBhc3Mgb3ZlcnJpZGUgZm9yIFhl bgo+ICAJCQkJYnJlYWs7Cj4gIAkJZGVmYXVsdDoKPiAgCQkJQlVHKCk7IC8qIFNURSBjb3JydXB0 aW9uICovCj4gQEAgLTEwNTYsNyArMTMxMiw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3dyaXRl X3N0cnRhYl9lbnQoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCwKPiAgCj4g IAkvKiBCeXBhc3MvZmF1bHQgKi8KPiAgCWlmICghc3RlLT5hc3NpZ25lZCB8fCAhKHN0ZS0+czFf Y2ZnIHx8IHN0ZS0+czJfY2ZnKSkgewo+IC0JCWlmICghc3RlLT5hc3NpZ25lZCAmJiBkaXNhYmxl X2J5cGFzcykKPiArCQlpZiAoIXN0ZS0+YXNzaWduZWQpCj4gIAkJCXZhbCB8PSBTVFJUQUJfU1RF XzBfQ0ZHX0FCT1JUOwo+ICAJCWVsc2UKPiAgCQkJdmFsIHw9IFNUUlRBQl9TVEVfMF9DRkdfQllQ QVNTOwo+IEBAIC0xMTM1LDE2ICsxMzkxLDIwIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9s Ml9zdHJ0YWIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPiAgCXZvaWQg KnN0cnRhYjsKPiAgCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnICpjZmcgPSAmc21tdS0+c3Ry dGFiX2NmZzsKPiAgCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfbDFfZGVzYyAqZGVzYyA9ICZjZmct PmwxX2Rlc2Nbc2lkID4+IFNUUlRBQl9TUExJVF07Cj4gKwl1MzIgYWxpZ25tZW50ID0gMDsKPiAg Cj4gIAlpZiAoZGVzYy0+bDJwdHIpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0Jc2l6ZSA9IDEgPDwg KFNUUlRBQl9TUExJVCArIGlsb2cyKFNUUlRBQl9TVEVfRFdPUkRTKSArIDMpOwo+ICsJc2l6ZSA9 IDEgPDwgKFNUUlRBQl9TUExJVCArIExPR18yKFNUUlRBQl9TVEVfRFdPUkRTKSArIDMpOwo+ICAJ c3RydGFiID0gJmNmZy0+c3RydGFiWyhzaWQgPj4gU1RSVEFCX1NQTElUKSAqIFNUUlRBQl9MMV9E RVNDX0RXT1JEU107Cj4gIAo+ICAJZGVzYy0+c3BhbiA9IFNUUlRBQl9TUExJVCArIDE7Cj4gLQlk ZXNjLT5sMnB0ciA9IGRtYW1fYWxsb2NfY29oZXJlbnQoc21tdS0+ZGV2LCBzaXplLCAmZGVzYy0+ bDJwdHJfZG1hLAo+IC0JCQkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ICsKPiArCWFs aWdubWVudCA9IDEgPDwgKCg1ICsgKGRlc2MtPnNwYW4gLSAxKSkpOwo+ICsJZGVzYy0+bDJwdHIg PSBfeHphbGxvYyhzaXplLCBhbGlnbm1lbnQpOwo+ICsJZGVzYy0+bDJwdHJfZG1hID0gdmlydF90 b19tYWRkcihkZXNjLT5sMnB0cik7Cj4gKwo+ICAJaWYgKCFkZXNjLT5sMnB0cikgewo+ICAJCWRl dl9lcnIoc21tdS0+ZGV2LAo+ICAJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGwyIHN0cmVhbSB0YWJs ZSBmb3IgU0lEICV1XG4iLAo+IEBAIC0xMTU4LDcgKzE0MTgsNyBAQCBzdGF0aWMgaW50IGFybV9z bW11X2luaXRfbDJfc3RydGFiKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQp Cj4gIH0KPiAgCj4gIC8qIElSUSBhbmQgZXZlbnQgaGFuZGxlcnMgKi8KPiAtc3RhdGljIGlycXJl dHVybl90IGFybV9zbW11X2V2dHFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldikKPiArc3RhdGlj IHZvaWQgYXJtX3NtbXVfZXZ0cV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKPiAgewo+ICAJaW50IGk7Cj4gIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11ID0gZGV2Owo+IEBAIC0xMTg2LDcgKzE0NDYsNiBAQCBzdGF0aWMgaXJxcmV0dXJu X3QgYXJtX3NtbXVfZXZ0cV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2KQo+ICAKPiAgCS8qIFN5 bmMgb3VyIG92ZXJmbG93IGZsYWcsIGFzIHdlIGJlbGlldmUgd2UncmUgdXAgdG8gc3BlZWQgKi8K PiAgCXEtPmNvbnMgPSBRX09WRihxLCBxLT5wcm9kKSB8IFFfV1JQKHEsIHEtPmNvbnMpIHwgUV9J RFgocSwgcS0+Y29ucyk7Cj4gLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gIH0KPiAgCj4gIHN0YXRp YyB2b2lkIGFybV9zbW11X2hhbmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwg dTY0ICpldnQpCj4gQEAgLTEyMDMsNyArMTQ2Miw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2hh bmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTY0ICpldnQpCj4gIAo+ICAJ ZGV2X2luZm8oc21tdS0+ZGV2LCAidW5leHBlY3RlZCBQUkkgcmVxdWVzdCByZWNlaXZlZDpcbiIp Owo+ICAJZGV2X2luZm8oc21tdS0+ZGV2LAo+IC0JCSAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1 JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgMHglMDE2bGx4XG4iLAo+ICsJ CSAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNz IGF0IGlvdmEgMHglMDE2bHhcbiIsCj4gIAkJIHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3QgPyAiTCIg OiAiIiwKPiAgCQkgZXZ0WzBdICYgUFJJUV8wX1BFUk1fUFJJViA/ICIiIDogInVuIiwKPiAgCQkg ZXZ0WzBdICYgUFJJUV8wX1BFUk1fUkVBRCA/ICJSIiA6ICIiLAo+IEBAIC0xMjI3LDcgKzE0ODYs NyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9oYW5kbGVfcHByKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUsIHU2NCAqZXZ0KQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgaXJxcmV0dXJuX3Qg YXJtX3NtbXVfcHJpcV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2KQo+ICtzdGF0aWMgdm9pZCBh cm1fc21tdV9wcmlxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYsIHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQo+ICB7Cj4gIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gZGV2Owo+ ICAJc3RydWN0IGFybV9zbW11X3F1ZXVlICpxID0gJnNtbXUtPnByaXEucTsKPiBAQCAtMTI0Mywx OCArMTUwMiwxNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3NtbXVfcHJpcV90aHJlYWQoaW50 IGlycSwgdm9pZCAqZGV2KQo+ICAKPiAgCS8qIFN5bmMgb3VyIG92ZXJmbG93IGZsYWcsIGFzIHdl IGJlbGlldmUgd2UncmUgdXAgdG8gc3BlZWQgKi8KPiAgCXEtPmNvbnMgPSBRX09WRihxLCBxLT5w cm9kKSB8IFFfV1JQKHEsIHEtPmNvbnMpIHwgUV9JRFgocSwgcS0+Y29ucyk7Cj4gLQlyZXR1cm4g SVJRX0hBTkRMRUQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9jbWRx X3N5bmNfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4gK3N0YXRpYyB2b2lkIGFybV9zbW11 X2NtZHFfc3luY19oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldiwgc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCj4gIHsKPiAgCS8qIFdlIGRvbid0IGFjdHVhbGx5IHVzZSBDTURfU1lOQyBpbnRl cnJ1cHRzIGZvciBhbnl0aGluZyAqLwo+IC0JcmV0dXJuIElSUV9IQU5ETEVEOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kaXNhYmxlKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpOwo+ICAKPiAtc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2dlcnJvcl9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRldikKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZ2Vycm9yX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAg ewo+ICAJdTMyIGdlcnJvciwgZ2Vycm9ybiwgYWN0aXZlOwo+ICAJc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSA9IGRldjsKPiBAQCAtMTI2NCw3ICsxNTIxLDcgQEAgc3RhdGljIGlycXJldHVy bl90IGFybV9zbW11X2dlcnJvcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKPiAgCj4gIAlh Y3RpdmUgPSBnZXJyb3IgXiBnZXJyb3JuOwo+ICAJaWYgKCEoYWN0aXZlICYgR0VSUk9SX0VSUl9N QVNLKSkKPiAtCQlyZXR1cm4gSVJRX05PTkU7IC8qIE5vIGVycm9ycyBwZW5kaW5nICovCj4gKwkJ cmV0dXJuOyAvKiBObyBlcnJvcnMgcGVuZGluZyAqLwo+ICAKPiAgCWRldl93YXJuKHNtbXUtPmRl diwKPiAgCQkgInVuZXhwZWN0ZWQgZ2xvYmFsIGVycm9yIHJlcG9ydGVkICgweCUwOHgpLCB0aGlz IGNvdWxkIGJlIHNlcmlvdXNcbiIsCj4gQEAgLTEyODYsNyArMTU0Myw3IEBAIHN0YXRpYyBpcnFy ZXR1cm5fdCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4gIAo+ ICAJaWYgKGFjdGl2ZSAmIEdFUlJPUl9NU0lfQ01EUV9BQlRfRVJSKSB7Cj4gIAkJZGV2X3dhcm4o c21tdS0+ZGV2LCAiQ01EUSBNU0kgd3JpdGUgYWJvcnRlZFxuIik7Cj4gLQkJYXJtX3NtbXVfY21k cV9zeW5jX2hhbmRsZXIoaXJxLCBzbW11LT5kZXYpOwo+ICsJCWFybV9zbW11X2NtZHFfc3luY19o YW5kbGVyKGlycSwgc21tdS0+ZGV2LCBOVUxMKTsKPiAgCX0KPiAgCj4gIAlpZiAoYWN0aXZlICYg R0VSUk9SX1BSSVFfQUJUX0VSUikKPiBAQCAtMTI5OSw3ICsxNTU2LDYgQEAgc3RhdGljIGlycXJl dHVybl90IGFybV9zbW11X2dlcnJvcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKPiAgCQlh cm1fc21tdV9jbWRxX3NraXBfZXJyKHNtbXUpOwo+ICAKPiAgCXdyaXRlbChnZXJyb3IsIHNtbXUt PmJhc2UgKyBBUk1fU01NVV9HRVJST1JOKTsKPiAtCXJldHVybiBJUlFfSEFORExFRDsKPiAgfQo+ ICAKPiAgLyogSU9fUEdUQUJMRSBBUEkgKi8KPiBAQCAtMTMxMSwxMSArMTU2NywxMyBAQCBzdGF0 aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUp Cj4gIAlhcm1fc21tdV9jbWRxX2lzc3VlX2NtZChzbW11LCAmY21kKTsKPiAgfQo+ICAKPiArI2lm IDAgLypYZW46IFVudXNlZCBmdW5jdGlvbiAqLwo+ICBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJf c3luYyh2b2lkICpjb29raWUpCj4gIHsKPiAgCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVf ZG9tYWluID0gY29va2llOwo+ICAJX19hcm1fc21tdV90bGJfc3luYyhzbW11X2RvbWFpbi0+c21t dSk7Cj4gIH0KPiArI2VuZGlmCj4gIAo+ICBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJfaW52X2Nv bnRleHQodm9pZCAqY29va2llKQo+ICB7Cj4gQEAgLTEzMzYsNiArMTU5NCw3IEBAIHN0YXRpYyB2 b2lkIGFybV9zbW11X3RsYl9pbnZfY29udGV4dCh2b2lkICpjb29raWUpCj4gIAlfX2FybV9zbW11 X3RsYl9zeW5jKHNtbXUpOwo+ICB9Cj4gIAo+ICsjaWYgMCAvKlhlbjogVW51c2VkIGZ1bmN0aW9u YWxpdHkgKi8KPiAgc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX2ludl9yYW5nZV9ub3N5bmModW5z aWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwKPiAgCQkJCQkgIHNpemVfdCBncmFudWxlLCBi b29sIGxlYWYsIHZvaWQgKmNvb2tpZSkKPiAgewo+IEBAIC0xMzYyLDcgKzE2MjEsNyBAQCBzdGF0 aWMgdm9pZCBhcm1fc21tdV90bGJfaW52X3JhbmdlX25vc3luYyh1bnNpZ25lZCBsb25nIGlvdmEs IHNpemVfdCBzaXplLAo+ICAJfSB3aGlsZSAoc2l6ZSAtPSBncmFudWxlKTsKPiAgfQo+ICAKPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9nYXRoZXJfb3BzIGFybV9zbW11X2dhdGhlcl9vcHMg PSB7Cj4gK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcyBhcm1fc21tdV9nYXRoZXJfb3Bz ID0gewo+ICAJLnRsYl9mbHVzaF9hbGwJPSBhcm1fc21tdV90bGJfaW52X2NvbnRleHQsCj4gIAku dGxiX2FkZF9mbHVzaAk9IGFybV9zbW11X3RsYl9pbnZfcmFuZ2Vfbm9zeW5jLAo+ICAJLnRsYl9z eW5jCT0gYXJtX3NtbXVfdGxiX3N5bmMsCj4gQEAgLTEzODAsNiArMTYzOSwxMSBAQCBzdGF0aWMg Ym9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkKPiAgCQlyZXR1cm4gZmFs c2U7Cj4gIAl9Cj4gIH0KPiArI2VuZGlmCj4gKy8qIFhlbjogU3R1YiBvdXQgRE1BIGRvbWFpbiBy ZWxhdGVkIGZ1bmN0aW9ucyAqLwo+ICsjZGVmaW5lIGlvbW11X2dldF9kbWFfY29va2llKGRvbSkg MAo+ICsjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2llKGRvbSkgMAo+ICsKPiAgCj4gIHN0YXRp YyBzdHJ1Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9kb21haW5fYWxsb2ModW5zaWduZWQgdHlw ZSkKPiAgewo+IEBAIC0xNDEwLDYgKzE2NzQsNyBAQCBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFp biAqYXJtX3NtbXVfZG9tYWluX2FsbG9jKHVuc2lnbmVkIHR5cGUpCj4gIAlyZXR1cm4gJnNtbXVf ZG9tYWluLT5kb21haW47Cj4gIH0KPiAgCj4gKyNpZiAwCj4gIHN0YXRpYyBpbnQgYXJtX3NtbXVf Yml0bWFwX2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNwYW4pCj4gIHsKPiAgCWludCBp ZHgsIHNpemUgPSAxIDw8IHNwYW47Cj4gQEAgLTE0MjcsMzYgKzE2OTIsMjAgQEAgc3RhdGljIHZv aWQgYXJtX3NtbXVfYml0bWFwX2ZyZWUodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgaWR4KQo+ICB7 Cj4gIAljbGVhcl9iaXQoaWR4LCBtYXApOwo+ICB9Cj4gKyNlbmRpZgo+ICAKPiAgc3RhdGljIHZv aWQgYXJtX3NtbXVfZG9tYWluX2ZyZWUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+ICB7 Cj4gIAlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9IHRvX3NtbXVfZG9tYWlu KGRvbWFpbik7Cj4gLQlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gc21tdV9kb21haW4t PnNtbXU7Cj4gLQo+IC0JaW9tbXVfcHV0X2RtYV9jb29raWUoZG9tYWluKTsKPiAtCWZyZWVfaW9f cGd0YWJsZV9vcHMoc21tdV9kb21haW4tPnBndGJsX29wcyk7Cj4gLQo+IC0JLyogRnJlZSB0aGUg Q0QgYW5kIEFTSUQsIGlmIHdlIGFsbG9jYXRlZCB0aGVtICovCj4gLQlpZiAoc21tdV9kb21haW4t PnN0YWdlID09IEFSTV9TTU1VX0RPTUFJTl9TMSkgewo+IC0JCXN0cnVjdCBhcm1fc21tdV9zMV9j ZmcgKmNmZyA9ICZzbW11X2RvbWFpbi0+czFfY2ZnOwo+IC0KPiAtCQlpZiAoY2ZnLT5jZHB0cikg ewo+IC0JCQlkbWFtX2ZyZWVfY29oZXJlbnQoc21tdV9kb21haW4tPnNtbXUtPmRldiwKPiAtCQkJ CQkgICBDVFhERVNDX0NEX0RXT1JEUyA8PCAzLAo+IC0JCQkJCSAgIGNmZy0+Y2RwdHIsCj4gLQkJ CQkJICAgY2ZnLT5jZHB0cl9kbWEpOwo+IC0KPiAtCQkJYXJtX3NtbXVfYml0bWFwX2ZyZWUoc21t dS0+YXNpZF9tYXAsIGNmZy0+Y2QuYXNpZCk7Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlzdHJ1 Y3QgYXJtX3NtbXVfczJfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPnMyX2NmZzsKPiAtCQlpZiAo Y2ZnLT52bWlkKQo+IC0JCQlhcm1fc21tdV9iaXRtYXBfZnJlZShzbW11LT52bWlkX21hcCwgY2Zn LT52bWlkKTsKPiAtCX0KPiArCS8qCj4gKwkgKiBYZW46IFJlbW92ZSB0aGUgZnJlZSBmdW5jdGlv bnMgdGhhdCBhcmUgbm90IHVzZWQgYW5kIGNvZGUgcmVsYXRlZAo+ICsJICogdG8gUzEgdHJhbnNs YXRpb24uIFdlIGp1c3QgbmVlZCB0byBmcmVlIHRoZSBkb21haW4gaGVyZS4KPiArCSAqLwo+ICAK PiAgCWtmcmVlKHNtbXVfZG9tYWluKTsKPiAgfQo+ICAKPiArI2lmIDAKPiAgc3RhdGljIGludCBh cm1fc21tdV9kb21haW5fZmluYWxpc2VfczEoc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9k b21haW4sCj4gIAkJCQkgICAgICAgc3RydWN0IGlvX3BndGFibGVfY2ZnICpwZ3RibF9jZmcpCj4g IHsKPiBAQCAtMTQ4OCwzMyArMTczNywzMCBAQCBvdXRfZnJlZV9hc2lkOgo+ICAJYXJtX3NtbXVf Yml0bWFwX2ZyZWUoc21tdS0+YXNpZF9tYXAsIGFzaWQpOwo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ ICsjZW5kaWYKPiAgCj4gLXN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNlX3MyKHN0 cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluLAo+IC0JCQkJICAgICAgIHN0cnVjdCBp b19wZ3RhYmxlX2NmZyAqcGd0YmxfY2ZnKQo+ICtzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9m aW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbikKPiAgewo+IC0J aW50IHZtaWQ7Cj4gLQlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gc21tdV9kb21haW4t PnNtbXU7Cj4gIAlzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPnMy X2NmZzsKPiAgCj4gLQl2bWlkID0gYXJtX3NtbXVfYml0bWFwX2FsbG9jKHNtbXUtPnZtaWRfbWFw LCBzbW11LT52bWlkX2JpdHMpOwo+IC0JaWYgKHZtaWQgPCAwKQo+IC0JCXJldHVybiB2bWlkOwo+ ICsJLyogWGVuOiBTZXQgdGhlIHZhbHVlcyBhcyBuZWVkZWQgKi8KPiAgCj4gLQljZmctPnZtaWQJ PSAodTE2KXZtaWQ7Cj4gLQljZmctPnZ0dGJyCT0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcu dnR0YnI7Cj4gLQljZmctPnZ0Y3IJPSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOwo+ ICsJY2ZnLT52bWlkCT0gY2ZnLT5kb21haW4tPmFyY2gucDJtLnZtaWQ7Cj4gKwljZmctPnZ0dGJy CT0gcGFnZV90b19tYWRkcihjZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7Cj4gKwljZmctPnZ0 Y3IJPSBSRUFEX1NZU1JFRzMyKFZUQ1JfRUwyKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBz dGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpk b21haW4pCj4gIHsKPiAgCWludCByZXQ7Cj4gKyNpZiAwCS8qIFhlbjogcGd0YmxfY2ZnIG5vdCBu ZWVkZWQuIFNvIG1vZGlmeSB0aGUgZnVuY3Rpb24gYXMgbmVlZGVkICovCj4gIAl1bnNpZ25lZCBs b25nIGlhcywgb2FzOwo+ICAJZW51bSBpb19wZ3RhYmxlX2ZtdCBmbXQ7Cj4gIAlzdHJ1Y3QgaW9f cGd0YWJsZV9jZmcgcGd0YmxfY2ZnOwo+ICAJc3RydWN0IGlvX3BndGFibGVfb3BzICpwZ3RibF9v cHM7Cj4gLQlpbnQgKCpmaW5hbGlzZV9zdGFnZV9mbikoc3RydWN0IGFybV9zbW11X2RvbWFpbiAq LAo+IC0JCQkJIHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqKTsKPiArCWludCAoKmZpbmFsaXNlX3N0 YWdlX2ZuKShzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICopOwo+ICsjZW5kaWYKPiAgCXN0cnVjdCBh cm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKPiAg CXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11X2RvbWFpbi0+c21tdTsKPiAgCj4g QEAgLTE1MjksNiArMTc3NSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNl KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKPiAgCWlmICghKHNtbXUtPmZlYXR1cmVzICYg QVJNX1NNTVVfRkVBVF9UUkFOU19TMikpCj4gIAkJc21tdV9kb21haW4tPnN0YWdlID0gQVJNX1NN TVVfRE9NQUlOX1MxOwo+ICAKPiArI2lmIDAKPiAgCXN3aXRjaCAoc21tdV9kb21haW4tPnN0YWdl KSB7Cj4gIAljYXNlIEFSTV9TTU1VX0RPTUFJTl9TMToKPiAgCQlpYXMgPSBWQV9CSVRTOwo+IEBA IC0xNTYzLDEwICsxODEwLDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNl KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKPiAgCWRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1 cmVfZW5kID0gKDFVTCA8PCBpYXMpIC0gMTsKPiAgCWRvbWFpbi0+Z2VvbWV0cnkuZm9yY2VfYXBl cnR1cmUgPSB0cnVlOwo+ICAJc21tdV9kb21haW4tPnBndGJsX29wcyA9IHBndGJsX29wczsKPiAt Cj4gIAlyZXQgPSBmaW5hbGlzZV9zdGFnZV9mbihzbW11X2RvbWFpbiwgJnBndGJsX2NmZyk7Cj4g IAlpZiAocmV0IDwgMCkKPiAgCQlmcmVlX2lvX3BndGFibGVfb3BzKHBndGJsX29wcyk7Cj4gKyNl bmRpZgo+ICsJcmV0ID0gYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNlX3MyKHNtbXVfZG9tYWluKTsK PiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gQEAgLTE2NjAsNyArMTkwOCw4IEBAIHN0YXRpYyBp bnQgYXJtX3NtbXVfYXR0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHN0cnVj dCBkZXZpY2UgKmRldikKPiAgCX0gZWxzZSBpZiAoc21tdV9kb21haW4tPnN0YWdlID09IEFSTV9T TU1VX0RPTUFJTl9TMSkgewo+ICAJCXN0ZS0+czFfY2ZnID0gJnNtbXVfZG9tYWluLT5zMV9jZmc7 Cj4gIAkJc3RlLT5zMl9jZmcgPSBOVUxMOwo+IC0JCWFybV9zbW11X3dyaXRlX2N0eF9kZXNjKHNt bXUsIHN0ZS0+czFfY2ZnKTsKPiArCQkvKlhlbjogUzEgY29uZmlndXJhdGlvIG5vdCBuZWVkZWQg Ki8KPiArCQkvL2FybV9zbW11X3dyaXRlX2N0eF9kZXNjKHNtbXUsIHN0ZS0+czFfY2ZnKTsKPiAg CX0gZWxzZSB7Cj4gIAkJc3RlLT5zMV9jZmcgPSBOVUxMOwo+ICAJCXN0ZS0+czJfY2ZnID0gJnNt bXVfZG9tYWluLT5zMl9jZmc7Cj4gQEAgLTE2NzIsNiArMTkyMSw3IEBAIG91dF91bmxvY2s6Cj4g IAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICsjaWYgMAo+ICBzdGF0aWMgaW50IGFybV9zbW11X21h cChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKPiAgCQkJ cGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKPiAgewo+IEBAIC0xNzM3 LDExICsxOTg3LDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfbWF0Y2hfbm9kZShzdHJ1Y3QgZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gIHN0YXRpYwo+ICBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCj4g IHsKPiArCS8qIFhlbjsgRnVuY3Rpb24gbW9kaWZpZWQgYXMgbmVlZGVkIGZvciBYZW4uKi8KPiAg CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRyaXZlcl9maW5kX2RldmljZSgmYXJtX3NtbXVfZHJpdmVy LmRyaXZlciwgTlVMTCwKPiAgCQkJCQkJZndub2RlLCBhcm1fc21tdV9tYXRjaF9ub2RlKTsKPiAg CXB1dF9kZXZpY2UoZGV2KTsKPiAgCXJldHVybiBkZXYgPyBkZXZfZ2V0X2RydmRhdGEoZGV2KSA6 IE5VTEw7Cj4gIH0KPiArI2VuZGlmCj4gIAo+ICBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRfaW5f cmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPiAgewo+IEBAIC0x NzUyLDggKzIwMDQsOSBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRfaW5fcmFuZ2Uoc3RydWN0 IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPiAgCj4gIAlyZXR1cm4gc2lkIDwgbGlt aXQ7Cj4gIH0KPiAtCj4gKyNpZiAwCj4gIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11 X29wczsKPiArI2VuZGlmCj4gIAo+ICBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICB7Cj4gQEAgLTE3NjEsOSArMjAxNCw5IEBAIHN0YXRpYyBpbnQg YXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAlzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICpzbW11Owo+ICAJc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhICptYXN0ZXI7 Cj4gIAlzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPiAt CXN0cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7Cj4gIAo+IC0JaWYgKCFmd3NwZWMgfHwgZndzcGVj LT5vcHMgIT0gJmFybV9zbW11X29wcykKPiArCS8qIFhlbjogZndzcGVjLT5vcHMgYXJlIG5vdCBu ZWVkZWQgKi8KPiArCWlmICghZndzcGVjKQo+ICAJCXJldHVybiAtRU5PREVWOwo+ICAJLyoKPiAg CSAqIFdlIF9jYW5fIGFjdHVhbGx5IHdpdGhzdGFuZCBkb2RneSBidXMgY29kZSByZS1jYWxsaW5n IGFkZF9kZXZpY2UoKQo+IEBAIC0xODAwLDYgKzIwNTMsMTIgQEAgc3RhdGljIGludCBhcm1fc21t dV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCQl9Cj4gIAl9Cj4gIAo+ICsjaWYg MAo+ICsvKgo+ICsgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlvbW11IGdyb3VwIGFzIHRoZSBzdHJl YW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCj4gKyAqIG1hc3RlciBkZXZpY2Ugb2JqZWN0 Cj4gKyAqLwo+ICsKPiAgCWdyb3VwID0gaW9tbXVfZ3JvdXBfZ2V0X2Zvcl9kZXYoZGV2KTsKPiAg CWlmICghSVNfRVJSKGdyb3VwKSkgewo+ICAJCWlvbW11X2dyb3VwX3B1dChncm91cCk7Cj4gQEAg LTE4MDcsOCArMjA2NiwxNiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0 IGRldmljZSAqZGV2KQo+ICAJfQo+ICAKPiAgCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZ3JvdXAp Owo+ICsjZW5kaWYKPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBYZW46IFdlIGNh biBwb3RlbnRpYWxseSBzdXBwb3J0IHRoaXMgZnVuY3Rpb24gYW5kIGRlc3Ryb3kgYSBkZXZpY2Uu IFRoaXMKPiArICogd2lsbCBiZSByZWxldmFudCBmb3IgUENJIGhvdHBsdWcuIFNvLCB3aWxsIGJl IGltcGxlbWVudGVkIGFzIG5lZWRlZCBhZnRlcgo+ICsgKiBwYXNzdGhyb3VnaCBzdXBwb3J0IGlz IGF2YWlsYWJsZS4KPiArICovCj4gKyNpZiAwCj4gIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92 ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgaW9tbXVfZndzcGVj ICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPiBAQCAtMTk0NCw3ICsyMjExLDcgQEAgc3Rh dGljIHN0cnVjdCBpb21tdV9vcHMgYXJtX3NtbXVfb3BzID0gewo+ICAJLnB1dF9yZXN2X3JlZ2lv bnMJPSBhcm1fc21tdV9wdXRfcmVzdl9yZWdpb25zLAo+ICAJLnBnc2l6ZV9iaXRtYXAJCT0gLTFV TCwgLyogUmVzdHJpY3RlZCBkdXJpbmcgZGV2aWNlIGF0dGFjaCAqLwo+ICB9Owo+IC0KPiArI2Vu ZGlmCj4gIC8qIFByb2JpbmcgYW5kIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwo+ICBzdGF0 aWMgaW50IGFybV9zbW11X2luaXRfb25lX3F1ZXVlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXUsCj4gIAkJCQkgICBzdHJ1Y3QgYXJtX3NtbXVfcXVldWUgKnEsCj4gQEAgLTE5NTQsNyArMjIy MSwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfb25lX3F1ZXVlKHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUsCj4gIHsKPiAgCXNpemVfdCBxc3ogPSAoKDEgPDwgcS0+bWF4X25fc2hp ZnQpICogZHdvcmRzKSA8PCAzOwo+ICAKPiAtCXEtPmJhc2UgPSBkbWFtX2FsbG9jX2NvaGVyZW50 KHNtbXUtPmRldiwgcXN6LCAmcS0+YmFzZV9kbWEsIEdGUF9LRVJORUwpOwo+ICsJLyogVGhlIFNN TVUgY2FjaGUgY29oZXJlbmN5IHByb3BlcnR5IGlzIGFsd2F5cyBzZXQuIFNpbmNlIHdlIGFyZSBz aGFyaW5nIHRoZSBDUFUgdHJhbnNsYXRpb24gdGFibGVzCj4gKwkgKiBqdXN0IG1ha2UgYSByZWd1 bGFyIGFsbG9jYXRpb24uCj4gKwkgKi8KPiArCXEtPmJhc2UgPSBfeHphbGxvYyhxc3osIHNpemVv Zih2b2lkICopKTsKPiArCXEtPmJhc2VfZG1hID0gdmlydF90b19tYWRkcihxLT5iYXNlKTsKPiAr Cj4gIAlpZiAoIXEtPmJhc2UpIHsKPiAgCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBh bGxvY2F0ZSBxdWV1ZSAoMHglenggYnl0ZXMpXG4iLAo+ICAJCQlxc3opOwo+IEBAIC0yMDI1LDEw ICsyMjk3LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9zdHJ0YWJfMmx2bChzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAJdm9pZCAqc3RydGFiOwo+ICAJdTY0IHJlZzsKPiAg CXUzMiBzaXplLCBsMXNpemU7Cj4gKwl1MzIgYWxpZ25tZW50Owo+ICAJc3RydWN0IGFybV9zbW11 X3N0cnRhYl9jZmcgKmNmZyA9ICZzbW11LT5zdHJ0YWJfY2ZnOwo+ICAKPiAgCS8qIENhbGN1bGF0 ZSB0aGUgTDEgc2l6ZSwgY2FwcGVkIHRvIHRoZSBTSURTSVpFLiAqLwo+IC0Jc2l6ZSA9IFNUUlRB Ql9MMV9TWl9TSElGVCAtIChpbG9nMihTVFJUQUJfTDFfREVTQ19EV09SRFMpICsgMyk7Cj4gKwlz aXplID0gU1RSVEFCX0wxX1NaX1NISUZUIC0gKExPR18yKFNUUlRBQl9MMV9ERVNDX0RXT1JEUykg KyAzKTsKPiAgCXNpemUgPSBtaW4oc2l6ZSwgc21tdS0+c2lkX2JpdHMgLSBTVFJUQUJfU1BMSVQp Owo+ICAJY2ZnLT5udW1fbDFfZW50cyA9IDEgPDwgc2l6ZTsKPiAgCj4gQEAgLTIwMzksOCArMjMx MiwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfc3RydGFiXzJsdmwoc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSkKPiAgCQkJIHNpemUsIHNtbXUtPnNpZF9iaXRzKTsKPiAgCj4gIAls MXNpemUgPSBjZmctPm51bV9sMV9lbnRzICogKFNUUlRBQl9MMV9ERVNDX0RXT1JEUyA8PCAzKTsK PiAtCXN0cnRhYiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoc21tdS0+ZGV2LCBsMXNpemUsICZjZmct PnN0cnRhYl9kbWEsCj4gLQkJCQkgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKPiArCj4g KwlhbGlnbm1lbnQgPSBtYXhfdCh1MzIsIGNmZy0+bnVtX2wxX2VudHMsIDY0KTsKPiArCS8vc3Ry dGFiID0gX3h6YWxsb2MobDFzaXplLCBzaXplb2Yodm9pZCAqKSk7Cj4gKwlzdHJ0YWIgPSBfeHph bGxvYyhsMXNpemUsIGwxc2l6ZSk7Cj4gKwljZmctPnN0cnRhYl9kbWEgPSB2aXJ0X3RvX21hZGRy KHN0cnRhYik7Cj4gKwo+ICsJLy9kc2Ioc3kpOwo+ICAJaWYgKCFzdHJ0YWIpIHsKPiAgCQlkZXZf ZXJyKHNtbXUtPmRldiwKPiAgCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBsMSBzdHJlYW0gdGFibGUg KCV1IGJ5dGVzKVxuIiwKPiBAQCAtMjA2OCw4ICsyMzQ2LDkgQEAgc3RhdGljIGludCBhcm1fc21t dV9pbml0X3N0cnRhYl9saW5lYXIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAgCXN0 cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnICpjZmcgPSAmc21tdS0+c3RydGFiX2NmZzsKPiAgCj4g IAlzaXplID0gKDEgPDwgc21tdS0+c2lkX2JpdHMpICogKFNUUlRBQl9TVEVfRFdPUkRTIDw8IDMp Owo+IC0Jc3RydGFiID0gZG1hbV9hbGxvY19jb2hlcmVudChzbW11LT5kZXYsIHNpemUsICZjZmct PnN0cnRhYl9kbWEsCj4gLQkJCQkgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKPiArCXN0 cnRhYiA9IF94emFsbG9jKHNpemUsIHNpemUpOwo+ICsJY2ZnLT5zdHJ0YWJfZG1hID0gdmlydF90 b19tYWRkcihzdHJ0YWIpOwo+ICsKPiAgCWlmICghc3RydGFiKSB7Cj4gIAkJZGV2X2VycihzbW11 LT5kZXYsCj4gIAkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgbGluZWFyIHN0cmVhbSB0YWJsZSAoJXUg Ynl0ZXMpXG4iLAo+IEBAIC0yMTUyLDYgKzI0MzEsOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X3Vw ZGF0ZV9nYnBhKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzZXQsIHUzMiBjbHIp Cj4gIAkJCQkJICAxLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRfVVMpOwo+ICB9Cj4gIAo+ICsvKiBY ZW46IFRoZXJlIGlzIG5vIE1TSSBzdXBwb3J0IGFzIHlldCAqLwo+ICsjaWYgMAo+ICBzdGF0aWMg dm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAqZGF0YSkKPiAgewo+ICAJc3RydWN0IGRldmlj ZSAqZGV2ID0gZGF0YTsKPiBAQCAtMjIxNyw3ICsyNDk4LDcgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfc2V0dXBfbXNpcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAJLyogQWRkIGNh bGxiYWNrIHRvIGZyZWUgTVNJcyBvbiB0ZWFyZG93biAqLwo+ICAJZGV2bV9hZGRfYWN0aW9uKGRl diwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwo+ICB9Cj4gLQo+ICsjZW5kaWYKPiAgc3RhdGlj IGludCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4g IHsKPiAgCWludCByZXQsIGlycTsKPiBAQCAtMjIzMSwzMSArMjUxMiwzMSBAQCBzdGF0aWMgaW50 IGFybV9zbW11X3NldHVwX2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAgCQly ZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiAtCWFybV9zbW11X3NldHVwX21zaXMoc21tdSk7Cj4gKwkv L2FybV9zbW11X3NldHVwX21zaXMoc21tdSk7Cj4gIAo+ICAJLyogUmVxdWVzdCBpbnRlcnJ1cHQg bGluZXMgKi8KPiAgCWlycSA9IHNtbXUtPmV2dHEucS5pcnE7Cj4gIAlpZiAoaXJxKSB7Cj4gLQkJ cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShzbW11LT5kZXYsIGlycSwgTlVMTCwKPiAt CQkJCQkJYXJtX3NtbXVfZXZ0cV90aHJlYWQsCj4gLQkJCQkJCUlSUUZfT05FU0hPVCwKPiAtCQkJ CQkJImFybS1zbW11LXYzLWV2dHEiLCBzbW11KTsKPiArCQlpcnFfc2V0X3R5cGUoaXJxLCBJUlFf VFlQRV9FREdFX0JPVEgpOwo+ICsJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXJtX3NtbXVfZXZ0 cV90aHJlYWQsCj4gKwkJCQkJCTAsICJhcm0tc21tdS12My1ldnRxIiwgc21tdSk7Cj4gIAkJaWYg KHJldCA8IDApCj4gIAkJCWRldl93YXJuKHNtbXUtPmRldiwgImZhaWxlZCB0byBlbmFibGUgZXZ0 cSBpcnFcbiIpOwo+ICAJfQo+ICAKPiAgCWlycSA9IHNtbXUtPmNtZHEucS5pcnE7Cj4gIAlpZiAo aXJxKSB7Cj4gLQkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKPiAtCQkJ CSAgICAgICBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciwgMCwKPiAtCQkJCSAgICAgICAiYXJt LXNtbXUtdjMtY21kcS1zeW5jIiwgc21tdSk7Cj4gKwkJaXJxX3NldF90eXBlKGlycSwgSVJRX1RZ UEVfRURHRV9CT1RIKTsKPiArCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGFybV9zbW11X2NtZHFf c3luY19oYW5kbGVyLAo+ICsJCQkJMCwgImFybS1zbW11LXYzLWNtZHEtc3luYyIsIHNtbXUpOwo+ ICAJCWlmIChyZXQgPCAwKQo+ICAJCQlkZXZfd2FybihzbW11LT5kZXYsICJmYWlsZWQgdG8gZW5h YmxlIGNtZHEtc3luYyBpcnFcbiIpOwo+ICAJfQo+ICAKPiAgCWlycSA9IHNtbXUtPmdlcnJfaXJx Owo+ICAJaWYgKGlycSkgewo+IC0JCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBp cnEsIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyLAo+ICsJCWlycV9zZXRfdHlwZShpcnEsIElSUV9U WVBFX0VER0VfQk9USCk7Cj4gKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhcm1fc21tdV9nZXJy b3JfaGFuZGxlciwKPiAgCQkJCSAgICAgICAwLCAiYXJtLXNtbXUtdjMtZ2Vycm9yIiwgc21tdSk7 Cj4gIAkJaWYgKHJldCA8IDApCj4gIAkJCWRldl93YXJuKHNtbXUtPmRldiwgImZhaWxlZCB0byBl bmFibGUgZ2Vycm9yIGlycVxuIik7Cj4gQEAgLTIyNjMsMTIgKzI1NDQsMTMgQEAgc3RhdGljIGlu dCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4gIAo+ ICAJaWYgKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVBVF9QUkkpIHsKPiAgCQlpcnEgPSBz bW11LT5wcmlxLnEuaXJxOwo+ICsJCWlycV9zZXRfdHlwZShpcnEsIElSUV9UWVBFX0VER0VfQk9U SCk7Cj4gIAkJaWYgKGlycSkgewo+IC0JCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJx KHNtbXUtPmRldiwgaXJxLCBOVUxMLAo+IC0JCQkJCQkJYXJtX3NtbXVfcHJpcV90aHJlYWQsCj4g LQkJCQkJCQlJUlFGX09ORVNIT1QsCj4gLQkJCQkJCQkiYXJtLXNtbXUtdjMtcHJpcSIsCj4gLQkJ CQkJCQlzbW11KTsKPiArCQkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLAo+ICsJCQkJCSAgYXJtX3Nt bXVfcHJpcV90aHJlYWQsCj4gKwkJCQkJICAwLAo+ICsJCQkJCSAgImFybS1zbW11LXYzLXByaXEi LAo+ICsJCQkJCSAgc21tdSk7Cj4gIAkJCWlmIChyZXQgPCAwKQo+ICAJCQkJZGV2X3dhcm4oc21t dS0+ZGV2LAo+ICAJCQkJCSAiZmFpbGVkIHRvIGVuYWJsZSBwcmlxIGlycVxuIik7Cj4gQEAgLTI0 MDAsNyArMjY4Miw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXUsIGJvb2wgYnlwYXNzKQo+ICAKPiAgCj4gIAkvKiBFbmFibGUg dGhlIFNNTVUgaW50ZXJmYWNlLCBvciBlbnN1cmUgYnlwYXNzICovCj4gLQlpZiAoIWJ5cGFzcyB8 fCBkaXNhYmxlX2J5cGFzcykgewo+ICsJaWYgKCFieXBhc3MpIHsKPiAgCQllbmFibGVzIHw9IENS MF9TTU1VRU47Cj4gIAl9IGVsc2Ugewo+ICAJCXJldCA9IGFybV9zbW11X3VwZGF0ZV9nYnBhKHNt bXUsIDAsIEdCUEFfQUJPUlQpOwo+IEBAIC0yNDg4LDggKzI3NzAsMTEgQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAg CQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1NUQUxMUzsKPiAgCX0KPiAgCj4gKyNp ZiAwLyogWGVuOiBEbyBub3QgZW5hYmxlIFN0YWdlIDEgdHJhbnNsYXRpb25zICovCj4gKwo+ICAJ aWYgKHJlZyAmIElEUjBfUzFQKQo+ICAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRf VFJBTlNfUzE7Cj4gKyNlbmRpZgo+ICAKPiAgCWlmIChyZWcgJiBJRFIwX1MyUCkKPiAgCQlzbW11 LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MyOwo+IEBAIC0yNTYyLDEwICsyODQ3 LDEyIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUpCj4gIAlpZiAocmVnICYgSURSNV9HUkFONEspCj4gIAkJc21tdS0+cGdz aXplX2JpdG1hcCB8PSBTWl80SyB8IFNaXzJNIHwgU1pfMUc7Cj4gIAo+ICsjaWYgMCAvKiBYZW46 IFNNTVUgb3BzIGRvIG5vdCBoYXZlIGEgcGdzaXplX2JpdG1hcCBtZW1iZXIgZm9yIFhlbiAqLwo+ ICAJaWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4gIAkJYXJtX3NtbXVf b3BzLnBnc2l6ZV9iaXRtYXAgPSBzbW11LT5wZ3NpemVfYml0bWFwOwo+ICAJZWxzZQo+ICAJCWFy bV9zbW11X29wcy5wZ3NpemVfYml0bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4gKyNlbmRp Zgo+ICAKPiAgCS8qIE91dHB1dCBhZGRyZXNzIHNpemUgKi8KPiAgCXN3aXRjaCAocmVnICYgSURS NV9PQVNfTUFTSyA8PCBJRFI1X09BU19TSElGVCkgewo+IEBAIC0yNTkyLDEwICsyODc5LDEyIEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpCj4gIAkJc21tdS0+b2FzID0gNDg7Cj4gIAl9Cj4gIAo+ICsjaWYgMCAvKiBYZW46 IFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIERNQSBtYXNrICovCj4gIAkvKiBTZXQgdGhlIERNQSBt YXNrIGZvciBvdXIgdGFibGUgd2Fsa2VyICovCj4gIAlpZiAoZG1hX3NldF9tYXNrX2FuZF9jb2hl cmVudChzbW11LT5kZXYsIERNQV9CSVRfTUFTSyhzbW11LT5vYXMpKSkKPiAgCQlkZXZfd2Fybihz bW11LT5kZXYsCj4gIAkJCSAiZmFpbGVkIHRvIHNldCBETUEgbWFzayBmb3IgdGFibGUgd2Fsa2Vy XG4iKTsKPiArI2VuZGlmCj4gIAo+ICAJc21tdS0+aWFzID0gbWF4KHNtbXUtPmlhcywgc21tdS0+ b2FzKTsKPiAgCj4gQEAgLTI2MTIsNyArMjkwMSw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2 aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAgCXN0cnVjdCBk ZXZpY2UgKmRldiA9IHNtbXUtPmRldjsKPiAgCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsK PiAgCj4gLQlub2RlID0gKihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKiopZGV2X2dldF9wbGF0ZGF0 YShkZXYpOwo+ICsJLyogWGVuOiBNb2RpZmljYXRpb24gdG8gZ2V0IGlvcnRfbm9kZSAqLwo+ICsJ bm9kZSA9IChzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKilkZXYtPmFjcGlfbm9kZTsKPiAgCj4gIAkv KiBSZXRyaWV2ZSBTTU1VdjMgc3BlY2lmaWMgZGF0YSAqLwo+ICAJaW9ydF9zbW11ID0gKHN0cnVj dCBhY3BpX2lvcnRfc21tdV92MyAqKW5vZGUtPm5vZGVfZGF0YTsKPiBAQCAtMjYzMyw3ICsyOTIz LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXJtX3NtbXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAgCQkJCSAgICBzdHJ1Y3QgYXJt X3NtbXVfZGV2aWNlICpzbW11KQo+ICB7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldjsKPiAgCXUzMiBjZWxsczsKPiAgCWlu dCByZXQgPSAtRUlOVkFMOwo+ICAKPiBAQCAtMjY0Niw4ICsyOTM2LDggQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAg Cj4gIAlwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsKPiAgCj4gLQlpZiAob2ZfZG1hX2lzX2Nv aGVyZW50KGRldi0+b2Zfbm9kZSkpCj4gLQkJc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVB VF9DT0hFUkVOQ1k7Cj4gKwkvKiBYZW46IFNldCB0aGUgQ09IRVJORUNZIGZlYXR1cmUgKi8KPiAr CXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfQ09IRVJFTkNZOwo+ICAKPiAgCXJldHVy biByZXQ7Cj4gIH0KPiBAQCAtMjY1Niw5ICsyOTQ2LDEwIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVf ZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIHsKPiAgCWludCBp cnEsIHJldDsKPiAgCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+IC0JcmVzb3VyY2Vfc2l6ZV90IGlv YWRkcjsKPiArCS8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAqLwo+ICsJLyogcmVz b3VyY2Vfc2l6ZV90IGlvYWRkcjsqLwo+ICAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsK PiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBwZGV2Oy8qIFhlbjogZGV2IGlzIGlnbm9yZWQgKi8KPiAgCWJvb2wgYnlwYXNzOwo+ICAK PiAgCXNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsK PiBAQCAtMjY3NCw3ICsyOTY1LDcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgCQlkZXZfZXJyKGRldiwgIk1NSU8gcmVn aW9uIHRvbyBzbWFsbCAoJXByKVxuIiwgcmVzKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0K PiAtCWlvYWRkciA9IHJlcy0+c3RhcnQ7Cj4gKwkvKmlvYWRkciA9IHJlcy0+c3RhcnQ7Ki8KPiAg Cj4gIAlzbW11LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiAgCWlm IChJU19FUlIoc21tdS0+YmFzZSkpCj4gQEAgLTI3MTksMTMgKzMwMTAsMTUgQEAgc3RhdGljIGlu dCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAg CQlyZXR1cm4gcmV0Owo+ICAKPiAgCS8qIFJlY29yZCBvdXIgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0 dXJlICovCj4gLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsKPiArCS8qIHBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHNtbXUpOyAqLwo+ICAKPiAgCS8qIFJlc2V0IHRoZSBkZXZp Y2UgKi8KPiAgCXJldCA9IGFybV9zbW11X2RldmljZV9yZXNldChzbW11LCBieXBhc3MpOwo+ICAJ aWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArLyogWGVuOiBOb3QgY3JlYXRpbmcgYW4g SU9NTVUgZGV2aWNlIGxpc3QgZm9yIFhlbiAqLwo+ICsjaWYgMAo+ICAJLyogQW5kIHdlJ3JlIHVw LiBHbyBnbyBnbyEgKi8KPiAgCXJldCA9IGlvbW11X2RldmljZV9zeXNmc19hZGQoJnNtbXUtPmlv bW11LCBkZXYsIE5VTEwsCj4gIAkJCQkgICAgICJzbW11My4lcGEiLCAmaW9hZGRyKTsKPiBAQCAt Mjc1Nyw5ICszMDUwLDE4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAkJaWYgKHJldCkKPiAgCQkJcmV0dXJuIHJldDsK PiAgCX0KPiArI2VuZGlmCj4gKwkvKgo+ICsJICogWGVuOiBLZWVwIGEgbGlzdCBvZiBhbGwgcHJv YmVkIGRldmljZXMuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHF1ZXJ5Cj4gKwkgKiB0aGUgc21tdSBk ZXZpY2VzIGJhc2VkIG9uIHRoZSBmd25vZGUuCj4gKwkgKi8KPiArCUlOSVRfTElTVF9IRUFEKCZz bW11LT5kZXZpY2VzKTsKPiArCXNwaW5fbG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKPiAr CWxpc3RfYWRkKCZzbW11LT5kZXZpY2VzLCAmYXJtX3NtbXVfZGV2aWNlcyk7Cj4gKwlzcGluX3Vu bG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gLQo+ICsj aWYgMAo+ICBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiAgewo+ICAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+IEBAIC0yNzY3LDYgKzMwNjksOSBAQCBzdGF0aWMg aW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiAgCWFybV9zbW11X2RldmljZV9kaXNhYmxlKHNtbXUpOwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAr I2VuZGlmCj4gKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRSh0eXBlLCBuYW1lKQo+ICsjZGVm aW5lIG9mX2RldmljZV9pZCBkdF9kZXZpY2VfbWF0Y2gKPiAgCj4gIHN0YXRpYyBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGFybV9zbW11X29mX21hdGNoW10gPSB7Cj4gIAl7IC5jb21wYXRpYmxlID0gImFy bSxzbW11LXYzIiwgfSwKPiBAQCAtMjc3NCw2ICszMDc5LDcgQEAgc3RhdGljIHN0cnVjdCBvZl9k ZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPiAgfTsKPiAgTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0Y2gpOwo+ICAKPiArI2lmIDAKPiAgc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3NtbXVfZHJpdmVyID0gewo+ICAJLmRyaXZlcgk9IHsKPiAg CQkubmFtZQkJPSAiYXJtLXNtbXUtdjMiLAo+IEBAIC0yNzg5LDMgKzMwOTUsMzE4IEBAIElPTU1V X09GX0RFQ0xBUkUoYXJtX3NtbXV2MywgImFybSxzbW11LXYzIiwgTlVMTCk7Cj4gIE1PRFVMRV9E RVNDUklQVElPTigiSU9NTVUgQVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01NVXYzIGltcGxlbWVu dGF0aW9ucyIpOwo+ICBNT0RVTEVfQVVUSE9SKCJXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJt LmNvbT4iKTsKPiAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICsKPiArI2VuZGlmCj4gKy8q KioqKiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KPiArCj4gK3N0YXRpYyBpbnQg X19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+ ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqc21tdV9kb21haW4gPSBkb21faW9t bXUoZCktPmFyY2gucHJpdjsKPiArCXN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKPiArCj4gKwlz cGluX2xvY2soJnNtbXVfZG9tYWluLT5sb2NrKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY2Zn LCAmc21tdV9kb21haW4tPmlvbW11X2RvbWFpbnMsIGxpc3QpIHsKPiArCQkvKgo+ICsJCSAqIE9u bHkgaW52YWxpZGF0ZSB0aGUgY29udGV4dCB3aGVuIFNNTVUgaXMgcHJlc2VudC4KPiArCQkgKiBU aGlzIGlzIGJlY2F1c2UgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAo+ICsJ CSAqIHVudGlsIGEgbWFzdGVyIGhhcyBiZWVuIGFkZGVkLgo+ICsJCSAqLwo+ICsJCWlmICh1bmxp a2VseSghQUNDRVNTX09OQ0UoY2ZnLT5wcml2LT5zbW11KSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsJ CWFybV9zbW11X3RsYl9pbnZfY29udGV4dChjZmctPnByaXYpOwo+ICsJfQo+ICsJc3Bpbl91bmxv Y2soJnNtbXVfZG9tYWluLT5sb2NrKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVzaChzdHJ1Y3QgZG9tYWluICpkLAo+ ICsJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBnZm4sCj4gKwkJCQkJICAgICB1bnNpZ25lZCBpbnQg cGFnZV9jb3VudCkKPiArewo+ICsJcmV0dXJuIGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbChkKTsK PiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2dldF9kb21h aW4oc3RydWN0IGRvbWFpbiAqZCwKPiArCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4g KwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2Rv bWFpbiAqeGVuX2RvbWFpbjsKPiArCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7Cj4gKwlz dHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbjsKPiArCj4gKwl4ZW5fZG9tYWluID0g ZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJc21tdSA9IGFybV9zbW11X2dldF9ieV9m d25vZGUoZGV2LT5pb21tdV9md3NwZWMtPmlvbW11X2Z3bm9kZSk7Cj4gKwlpZiAoIXNtbXUpCj4g KwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJLyoKPiArCSAqIExvb3AgdGhyb3VnaCB0aGUgJnhlbl9k b21haW4tPmNvbnRleHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKPiArCSAqIGFzc2lnbmVkIHRvIHRo aXMgU01NVQo+ICsJICovCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnhlbl9kb21h aW4tPmlvbW11X2RvbWFpbnMsIGxpc3QpIHsKPiArCQlzbW11X2RvbWFpbiA9IHRvX3NtbXVfZG9t YWluKGRvbWFpbik7Cj4gKwkJaWYgKHNtbXVfZG9tYWluLT5zbW11ID09IHNtbXUpCj4gKwkJCXJl dHVybiBkb21haW47Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKHN0cnVjdCBpb21tdV9kb21haW4g KmRvbWFpbikKPiArewo+ICsJbGlzdF9kZWwoJmRvbWFpbi0+bGlzdCk7Cj4gKwl4ZnJlZShkb21h aW4pOwo+ICt9ClRoZSBhYm92ZSBmdW5jdGlvbiBuZWVkcyB0byBjYWxsIGFybV9zbW11X2RvbWFp bl9mcmVlKGRvbWFpbikgaW5zdGVhZCBvZiB4ZnJlZShkb21haW4pLgoKPiArCj4gK3N0YXRpYyBp bnQgYXJtX3NtbXVfYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKPiArCQkJ ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGZsYWcpCj4gK3sKPiArCWludCByZXQgPSAw Owo+ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+ICsJc3RydWN0IGFybV9zbW11X3hl bl9kb21haW4gKnhlbl9kb21haW47Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICphcm1fc21t dTsKPiArCj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJ aWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KSB7Cj4gKwkJZGV2LT5hcmNoZGF0YS5pb21tdSA9IHh6 YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2UpOwo+ICsJCWlmICghZGV2LT5hcmNoZGF0 YS5pb21tdSkKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYXJtX3Nt bXVfYWRkX2RldmljZShkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNrIHRv IHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgeGVuIGRvbWFp bgo+ICsJICogdW5kZXIgdGhlIHNhbWUgU01NVQo+ICsJICovCj4gKwlkb21haW4gPSBhcm1fc21t dV9nZXRfZG9tYWluKGQsIGRldik7Cj4gKwlpZiAoIWRvbWFpbikgewo+ICsKPiArCQlkb21haW4g PSBhcm1fc21tdV9kb21haW5fYWxsb2MoSU9NTVVfRE9NQUlOX0RNQSk7Cj4gKwkJaWYgKCFkb21h aW4pIHsKPiArCQkJcmV0ID0gLUVOT01FTTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiAr CQlhcm1fc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7Cj4gKwkJYXJtX3NtbXUtPnMyX2Nm Zy5kb21haW4gPSBkOwo+ICsKPiArCQkvKiBDaGFpbiB0aGUgbmV3IGNvbnRleHQgdG8gdGhlIGRv bWFpbiAqLwo+ICsJCWxpc3RfYWRkKCZkb21haW4tPmxpc3QsICZ4ZW5fZG9tYWluLT5pb21tdV9k b21haW5zKTsKPiArCj4gKwl9Cj4gKwo+ICsJcmV0ID0gYXJtX3NtbXVfYXR0YWNoX2Rldihkb21h aW4sIGRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJaWYgKGRvbWFpbi0+cmVmLmNvdW50ZXIgPT0g MCkKPiArCQkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsKPiArCX0gZWxz ZSB7Cj4gKwkJYXRvbWljX2luYygmZG9tYWluLT5yZWYpOwo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJ c3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBhcm1fc21tdV9kZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4gPSBh cm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFp biAqeGVuX2RvbWFpbjsKPiArCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKmFybV9zbW11ID0gdG9f c21tdV9kb21haW4oZG9tYWluKTsKPiArCj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5h cmNoLnByaXY7Cj4gKwo+ICsJaWYgKCFhcm1fc21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRvbWFp biAhPSBkKSB7Cj4gKwkJZGV2X2VycihkZXYsICIgbm90IGF0dGFjaGVkIHRvIGRvbWFpbiAlZFxu IiwgZC0+ZG9tYWluX2lkKTsKPiArCQlyZXR1cm4gLUVTUkNIOwo+ICsJfQo+ICsKPiArCXNwaW5f bG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsJYXJtX3NtbXVfZGV0YWNoX2RldihkZXYp Owo+ICsJYXRvbWljX2RlYygmZG9tYWluLT5yZWYpOwo+ICsKPiArCWlmIChkb21haW4tPnJlZi5j b3VudGVyID09IDApCj4gKwkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsK PiArCj4gKwlzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcm1fc21tdV9yZWFzc2lnbl9kZXYoc3Ry dWN0IGRvbWFpbiAqcywgc3RydWN0IGRvbWFpbiAqdCwKPiArCQkJCSB1OCBkZXZmbiwgIHN0cnVj dCBkZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJLyogRG9uJ3QgYWxs b3cgcmVtYXBwaW5nIG9uIG90aGVyIGRvbWFpbiB0aGFuIGh3ZG9tICovCj4gKwlpZiAodCAmJiB0 ICE9IGhhcmR3YXJlX2RvbWFpbikKPiArCQlyZXR1cm4gLUVQRVJNOwo+ICsKPiArCWlmICh0ID09 IHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHMs IGRldik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKHQpIHsKPiAr CQkvKiBObyBmbGFncyBhcmUgZGVmaW5lZCBmb3IgQVJNLiAqLwo+ICsJCXJldCA9IGFybV9zbW11 X2Fzc2lnbl9kZXYodCwgZGV2Zm4sIGRldiwgMCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcm1f c21tdV9pb21tdV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKwlzdHJ1Y3Qg YXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKPiArCj4gKwl4ZW5fZG9tYWluID0geHph bGxvYyhzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbik7Cj4gKwlpZiAoIXhlbl9kb21haW4pCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJnhlbl9kb21haW4tPmxv Y2spOwo+ICsJSU5JVF9MSVNUX0hFQUQoJnhlbl9kb21haW4tPmlvbW11X2RvbWFpbnMpOwo+ICsK PiArCWRvbV9pb21tdShkKS0+YXJjaC5wcml2ID0geGVuX2RvbWFpbjsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11X2lvbW11X2h3 ZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh cm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24oc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsJ c3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFy Y2gucHJpdjsKPiArCj4gKwlBU1NFUlQobGlzdF9lbXB0eSgmeGVuX2RvbWFpbi0+aW9tbXVfZG9t YWlucykpOwo+ICsJeGZyZWUoeGVuX2RvbWFpbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19t dXN0X2NoZWNrIGFybV9zbW11X21hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxv bmcgZ2ZuLAo+ICsJCQl1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7 Cj4gKwlwMm1fdHlwZV90IHQ7Cj4gKwo+ICsJLyoKPiArCSAqIEdyYW50IG1hcHBpbmdzIGNhbiBi ZSB1c2VkIGZvciBETUEgcmVxdWVzdHMuIFRoZSBkZXZfYnVzX2FkZHIKPiArCSAqIHJldHVybmVk IGJ5IHRoZSBoeXBlcmNhbGwgaXMgdGhlIE1GTiAobm90IHRoZSBJUEEpLiBGb3IgZGV2aWNlCj4g KwkgKiBwcm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhlbiBuZWVkcyB0byBhZGQgYSAxOjEgbWFwcGlu ZyBpbiB0aGUgZG9tYWluCj4gKwkgKiBwMm0gdG8gYWxsb3cgRE1BIHJlcXVlc3QgdG8gd29yay4K PiArCSAqIFRoaXMgaXMgb25seSB2YWxpZCB3aGVuIHRoZSBkb21haW4gaXMgZGlyZWN0ZWQgbWFw cGVkLiBIZW5jZSB0aGlzCj4gKwkgKiBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGdu dHRhYiBjb2RlIHdpdGggZ2ZuID09IG1mbi4KPiArCSAqLwo+ICsJQlVHX09OKCFpc19kb21haW5f ZGlyZWN0X21hcHBlZChkKSk7Cj4gKwlCVUdfT04obWZuICE9IGdmbik7Cj4gKwo+ICsJLyogV2Ug b25seSBzdXBwb3J0IHJlYWRhYmxlIGFuZCB3cml0YWJsZSBmbGFncyAqLwo+ICsJaWYgKCEoZmxh Z3MgJiAoSU9NTVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsJdCA9IChmbGFncyAmIElPTU1VRl93cml0YWJsZSkgPyBwMm1faW9tbXVf bWFwX3J3IDogcDJtX2lvbW11X21hcF9ybzsKPiArCj4gKwkvKgo+ICsJICogVGhlIGZ1bmN0aW9u IGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5IHJlcGxhY2VzIHRoZSBjdXJyZW50IG1hcHBpbmcKPiAr CSAqIGlmIHRoZXJlIGlzIGFscmVhZHkgb25lLi4uCj4gKwkgKi8KPiArCXJldHVybiBndWVzdF9w aHlzbWFwX2FkZF9lbnRyeShkLCBfZ2ZuKGdmbiksIF9tZm4obWZuKSwgMCwgdCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X3VubWFwX3BhZ2Uoc3RydWN0IGRv bWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCj4gK3sKPiArCS8qCj4gKwkgKiBUaGlzIGZ1bmN0 aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUgd2hlbiB0aGUgZG9tYWluCj4g KwkgKiBpcyBkaXJlY3QgbWFwcGVkCj4gKwkgKi8KPiArCWlmICghaXNfZG9tYWluX2RpcmVjdF9t YXBwZWQoZCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIGd1ZXN0X3BoeXNt YXBfcmVtb3ZlX3BhZ2UoZCwgX2dmbihnZm4pLCBfbWZuKGdmbiksIDApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9pb21tdV9vcHMgPSB7Cj4gKwku aW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+ICsJLmh3ZG9tX2luaXQgPSBhcm1f c21tdV9pb21tdV9od2RvbV9pbml0LAo+ICsJLnRlYXJkb3duID0gYXJtX3NtbXVfaW9tbXVfZG9t YWluX3RlYXJkb3duLAo+ICsJLmlvdGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4g KwkuaW90bGJfZmx1c2hfYWxsID0gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsLAo+ICsJLmFzc2ln bl9kZXZpY2UgPSBhcm1fc21tdV9hc3NpZ25fZGV2LAo+ICsJLnJlYXNzaWduX2RldmljZSA9IGFy bV9zbW11X3JlYXNzaWduX2RldiwKPiArCS5tYXBfcGFnZSA9IGFybV9zbW11X21hcF9wYWdlLAo+ ICsJLnVubWFwX3BhZ2UgPSBhcm1fc21tdV91bm1hcF9wYWdlLAo+ICt9Owo+ICsKPiArc3RhdGlj Cj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0 IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPiArewo+ICsJc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSA9IE5VTEw7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShzbW11LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykg ewo+ICsJCWlmIChzbW11LT5kZXYtPmZ3bm9kZSA9PSBmd25vZGUpCj4gKwkJCWJyZWFrOwo+ICsJ fQo+ICsJc3Bpbl91bmxvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7Cj4gKwo+ICsJcmV0dXJu IHNtbXU7Cj4gK30KPiArCj4gK3N0YXRpYyBfX2luaXQgaW50IGFybV9zbW11X2R0X2luaXQoc3Ry dWN0IGR0X2RldmljZV9ub2RlICpkZXYsCj4gKwkJCQkgICBjb25zdCB2b2lkICpkYXRhKQo+ICt7 Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJLyoKPiArCSAqIEV2ZW4gaWYgdGhlIGRldmljZSBjYW4ndCBi ZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0bwo+ICsJICogZ2l2ZSB0aGUgU01NVSBkZXZp Y2UgdG8gZG9tMC4KPiArCSAqLwo+ICsJZHRfZGV2aWNlX3NldF91c2VkX2J5KGRldiwgRE9NSURf WEVOKTsKPiArCj4gKwlyYyA9IGFybV9zbW11X2RldmljZV9wcm9iZShkdF90b19kZXYoZGV2KSk7 Cj4gKwlpZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCWlvbW11X3NldF9vcHMoJmFybV9z bW11X2lvbW11X29wcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK0RUX0RFVklDRV9T VEFSVChzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01NVSkKPiArCS5kdF9tYXRjaCA9 IGFybV9zbW11X29mX21hdGNoLAo+ICsJLmluaXQgPSBhcm1fc21tdV9kdF9pbml0LAo+ICtEVF9E RVZJQ0VfRU5ECj4gKwo+ICsjaWZkZWYgQ09ORklHX0FDUEkKPiArLyogU2V0IHVwIHRoZSBJT01N VSAqLwo+ICtzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9hY3BpX2luaXQoY29uc3Qgdm9pZCAq ZGF0YSkKPiArewo+ICsJaW50IHJjOwo+ICsJcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoKHN0 cnVjdCBkZXZpY2UgKilkYXRhKTsKPiArCj4gKwlpZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsK PiArCWlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArQUNQSV9ERVZJQ0VfU1RBUlQoYXNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNF X0lPTU1VKQo+ICsJLmNsYXNzX3R5cGUgPSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzLAo+ICsJLmlu aXQgPSBhcm1fc21tdV9hY3BpX2luaXQsCj4gK0FDUElfREVWSUNFX0VORAo+ICsKPiArI2VuZGlm Cj4gCgotLSAKIFF1YWxjb21tIERhdGFjZW50ZXIgVGVjaG5vbG9naWVzIGFzIGFuIGFmZmlsaWF0 ZSBvZiBRdWFsY29tbSBUZWNobm9sb2dpZXMsIEluYy4gUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJ bmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwgYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=