From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC v4 6/8] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Tue, 23 Jan 2018 15:18:11 +0000 Message-ID: <9cafe32b-0c60-32d8-8912-dcf980699a80@linaro.org> References: <20171219031703.23420-1-sameer.goel@linaro.org> <20171219031703.23420-7-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ee0L6-0005ra-BY for xen-devel@lists.xenproject.org; Tue, 23 Jan 2018 15:18:20 +0000 Received: by mail-wr0-x244.google.com with SMTP id t16so942846wrc.10 for ; Tue, 23 Jan 2018 07:18:14 -0800 (PST) In-Reply-To: <20171219031703.23420-7-sameer.goel@linaro.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Sameer Goel , xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, shankerd@codeaurora.org, andre.przywara@linaro.org List-Id: xen-devel@lists.xenproject.org SGkgU2FtZWVyLAoKT24gMTkvMTIvMTcgMDM6MTcsIFNhbWVlciBHb2VsIHdyb3RlOgo+IFRoaXMg ZHJpdmVyIGZvbGxvd3MgYW4gYXBwcm9hY2ggc2ltaWxhciB0byBzbW11IGRyaXZlci4gVGhlIGlu dGVudCBoZXJlCj4gaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxlLgo+ IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYnJpZGdlIHRoZSBBUEkgY2FsbHMu Cj4gLSBDYWxsZWQgTGludXggZnVuY3Rpb25zIGZyb20gdGhlIFhlbiBJT01NVSBmdW5jdGlvbiBj YWxscy4KPiAtIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjogY29tbWVu dCAqLwo+IAo+IFNpZ25lZC1vZmYtYnk6IFNhbWVlciBHb2VsIDxzYW1lZXIuZ29lbEBsaW5hcm8u b3JnPgo+IC0tLQo+ICAgeGVuL2FyY2gvYXJtL3AybS5jICAgICAgICAgICAgICAgICAgICB8ICAg MSArCj4gICB4ZW4vZHJpdmVycy9LY29uZmlnICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAg IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnICAgfCAgIDggKwo+ICAgeGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlICB8ICAgMSArCj4gICB4ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9hcm0vc21tdS12My5jIHwgODgwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0KPiAgIDUgZmlsZXMgY2hhbmdlZCwgODYxIGluc2VydGlvbnMoKyksIDMxIGRlbGV0 aW9ucygtKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Fy bS9LY29uZmlnCj4gCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9hcmNo L2FybS9wMm0uYwo+IGluZGV4IDIyMTY1YWUzNzYuLjZhYTI0Y2FlNDggMTAwNjQ0Cj4gLS0tIGEv eGVuL2FyY2gvYXJtL3AybS5jCj4gKysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4gQEAgLTE0NjAs NiArMTQ2MCw3IEBAIGVycjoKPiAgIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2lu Z19vbmUodm9pZCAqZGF0YSkKPiAgIHsKPiAgICAgICB1bnNpZ25lZCBsb25nIHZhbCA9ICh1bnNp Z25lZCBsb25nKWRhdGE7Cj4gKyAgICAvKiBTTU1VdjMgUzIgY2ZnIHZ0Y3IgcmV1c2VzIHRoZSBm b2xsb3dpbmcgdmFsdWUgKi8KPiAgICAgICBXUklURV9TWVNSRUczMih2YWwsIFZUQ1JfRUwyKTsK PiAgICAgICBpc2IoKTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvS2NvbmZpZyBi L3hlbi9kcml2ZXJzL0tjb25maWcKPiBpbmRleCBiYzNhNTRmMGVhLi42MTI2NTUzODZkIDEwMDY0 NAo+IC0tLSBhL3hlbi9kcml2ZXJzL0tjb25maWcKPiArKysgYi94ZW4vZHJpdmVycy9LY29uZmln Cj4gQEAgLTEyLDQgKzEyLDYgQEAgc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgo+ICAgCj4g ICBzb3VyY2UgImRyaXZlcnMvdmlkZW8vS2NvbmZpZyIKPiAgIAo+ICtzb3VyY2UgImRyaXZlcnMv cGFzc3Rocm91Z2gvYXJtL0tjb25maWciCj4gKwo+ICAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL2FybS9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw Li5jZGE4OTlmNjA4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL2FybS9LY29uZmlnCj4gQEAgLTAsMCArMSw4IEBACj4gKwo+ICtjb25maWcgQVJNX1NNTVVf djMKPiArCWJvb2wgIkFSTSBTTU1VdjMgU3VwcG9ydCIKPiArCWRlcGVuZHMgb24gQVJNXzY0Cj4g KwloZWxwCj4gKwkgU3VwcG9ydCBmb3IgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBBUk0gU3lzdGVt IE1NVSBhcmNoaXRlY3R1cmUKPiArCSB2ZXJzaW9uIDMuCj4gKwo+IGRpZmYgLS1naXQgYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC9hcm0vTWFrZWZpbGUKPiBpbmRleCBmNGNkMjZlMTVkLi5lMTQ3MzJiNTVjIDEwMDY0NAo+IC0t LSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZQo+IEBAIC0xLDIgKzEsMyBAQAo+ICAgb2JqLXkg Kz0gaW9tbXUubwo+ICAgb2JqLXkgKz0gc21tdS5vCj4gK29iai0kKENPTkZJR19BUk1fU01NVV92 MykgKz0gc21tdS12My5vCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Fy bS9zbW11LXYzLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCj4gaW5k ZXggZTY3YmE2YzQwZi4uMzQ4ODE4NGFkNCAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC9hcm0vc21tdS12My5jCj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJt L3NtbXUtdjMuYwo+IEBAIC0xOCwyOCArMTgsNDAyIEBACj4gICAgKiBBdXRob3I6IFdpbGwgRGVh Y29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgo+ICAgICoKPiAgICAqIFRoaXMgZHJpdmVyIGlzIHBv d2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQgYm9tYmF5IG1peC4KPiArICoKPiArICoKPiArICogQmFz ZWQgb24gTGludXggZHJpdmVycy9pb21tdS9hcm0tc21tdS12My5jCj4gKyAqID0+IGNvbW1pdCA3 YWE4NjE5YTY2YWVhNTJiMTQ1ZTA0Y2JhYjRmOGQ2YTRlNWYzZjNiCj4gKyAqCj4gKyAqIFhlbiBt b2RpZmljYXRpb25zOgo+ICsgKiBTYW1lZXIgR29lbCA8c2FtZWVyLmdvZWxAbGluYXJvLm9yZz4K PiArICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8eGVuL2FjcGkuaD4KPiAr I2luY2x1ZGUgPHhlbi9jb25maWcuaD4KPiArI2luY2x1ZGUgPHhlbi9kZWxheS5oPgo+ICsjaW5j bHVkZSA8eGVuL2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZXJyLmg+Cj4gKyNpbmNsdWRlIDx4 ZW4vaXJxLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbGludXhf Y29tcGF0Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbGlzdC5oPgo+ICsjaW5jbHVkZSA8eGVuL21tLmg+ Cj4gKyNpbmNsdWRlIDx4ZW4vcmJ0cmVlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiAr I2luY2x1ZGUgPHhlbi9zaXplcy5oPgo+ICsjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KPiArI2luY2x1 ZGUgPGFjcGkvYWNwaV9pb3J0Lmg+Cj4gKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+Cj4gKyNpbmNs dWRlIDxhc20vZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxhc20vaW8uaD4KPiArI2luY2x1ZGUgPGFz bS9wbGF0Zm9ybS5oPgo+ICsKPiArCgpObyBuZWVkIGZvciAyIG5ld2xpbmVzLiBDYW4geW91IGRy b3Agb25lPwoKPiArLyogWGVuOiBIZWxwZXJzIHRvIGdldCBkZXZpY2UgTU1JTyBhbmQgSVJRcyAq Lwo+ICtzdHJ1Y3QgcmVzb3VyY2Ugewo+ICsJdTY0IGFkZHI7Cj4gKwl1NjQgc2l6ZTsKPiArCXVu c2lnbmVkIGludCB0eXBlOwo+ICt9Owo+ICsKPiArI2RlZmluZSByZXNvdXJjZV9zaXplKHJlcykg KChyZXMpLT5zaXplKQo+ICsKPiArI2RlZmluZSBwbGF0Zm9ybV9kZXZpY2UgZGV2aWNlCj4gKwo+ ICsjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDAKPiArI2RlZmluZSBJT1JFU09VUkNFX0lSUSAxCj4g Kwo+ICtzdGF0aWMgc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwK PiArCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtKQo+ICt7Cj4gKwkvKgo+ICsJICogVGhlIHJl c291cmNlIGlzIG9ubHkgdXNlZCBiZXR3ZWVuIDIgY2FsbHMgb2YgcGxhdGZvcm1fZ2V0X3Jlc291 cmNlLgo+ICsJICogSXQncyBxdWl0ZSB1Z2x5IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVj aCBjb2RlIGluIHRoZSBwYXJ0Cj4gKwkgKiBpbXBvcnRlZCBmcm9tIExpbnV4Cj4gKwkgKi8KPiAr CXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+ICsJc3RydWN0IGFjcGlfaW9ydF9ub2RlICpp b3J0X25vZGU7Cj4gKwlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVfc21tdV9kYXRhOwo+ ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcmVzLnR5cGUgPSB0eXBlOwo+ICsKPiArCXN3aXRjaCAo dHlwZSkgewo+ICsJY2FzZSBJT1JFU09VUkNFX01FTToKPiArCQlpZiAocGRldi0+dHlwZSA9PSBE RVZfQUNQSSkgewo+ICsJCQlyZXQgPSAxOwo+ICsJCQlpb3J0X25vZGUgPSBwZGV2LT5hY3BpX25v ZGU7Cj4gKwkJCW5vZGVfc21tdV9kYXRhID0KPiArCQkJCShzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVf djMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKPiArCj4gKwkJCWlmIChub2RlX3NtbXVfZGF0YSAh PSBOVUxMKSB7Cj4gKwkJCQlyZXMuYWRkciA9IG5vZGVfc21tdV9kYXRhLT5iYXNlX2FkZHJlc3M7 Cj4gKwkJCQlyZXMuc2l6ZSA9IFNaXzEyOEs7Cj4gKwkJCQlyZXQgPSAwOwo+ICsJCQl9Cj4gKwkJ fSBlbHNlIHsKPiArCQkJcmV0ID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2 KSwgbnVtLAo+ICsJCQkJCQkgICAgJnJlcy5hZGRyLCAmcmVzLnNpemUpOwo+ICsJCX0KPiArCj4g KwkJcmV0dXJuICgocmV0KSA/IE5VTEwgOiAmcmVzKTsKPiArCj4gKwljYXNlIElPUkVTT1VSQ0Vf SVJROgo+ICsJCS8qIEFDUEkgY2FzZSBub3QgaW1wbGVtZW50ZWQgYXMgdGhlcmUgaXMgbm8gdXNl IGNhc2UgZm9yIGl0ICovCj4gKwkJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShkZXZfdG9fZHQocGRl diksIG51bSk7Cj4gKwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gTlVMTDsKPiArCj4g KwkJcmVzLmFkZHIgPSByZXQ7Cj4gKwkJcmVzLnNpemUgPSAxOwo+ICsKPiArCQlyZXR1cm4gJnJl czsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkdF9wcm9wZXJ0 eSAqZHRwcm9wOwo+ICsJc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGU7Cj4gKwlzdHJ1 Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVfc21tdV9kYXRhOwo+ICsJaW50IHJldCA9IDA7Cj4g Kwo+ICsJaWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPiArCQlpb3J0X25vZGUgPSBwZGV2 LT5hY3BpX25vZGU7Cj4gKwkJbm9kZV9zbW11X2RhdGEgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11 X3YzICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7Cj4gKwo+ICsJCWlmIChub2RlX3NtbXVfZGF0YSAh PSBOVUxMKSB7Cj4gKwkJCWlmICghc3RyY21wKG5hbWUsICJldmVudHEiKSkKPiArCQkJCXJldCA9 IG5vZGVfc21tdV9kYXRhLT5ldmVudF9nc2l2Owo+ICsJCQllbHNlIGlmICghc3RyY21wKG5hbWUs ICJwcmlxIikpCj4gKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+cHJpX2dzaXY7Cj4gKwkJCWVs c2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3luYyIpKQo+ICsJCQkJcmV0ID0gbm9kZV9zbW11 X2RhdGEtPnN5bmNfZ3NpdjsKPiArCQkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZ2Vycm9yIikp Cj4gKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2Owo+ICsJCQllbHNlCj4gKwkJ CQlyZXQgPSAtRUlOVkFMOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJZHRwcm9wID0gZHRfZmlu ZF9wcm9wZXJ0eShkZXZfdG9fZHQocGRldiksICJpbnRlcnJ1cHQtbmFtZXMiLCBOVUxMKTsKPiAr CQlpZiAoIWR0cHJvcCkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCWlmICghZHRwcm9w LT52YWx1ZSkKPiArCQkJcmV0dXJuIC1FTk9EQVRBOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIFhlbjogSGVscGVycyBmb3IgRE1BIGFsbG9jYXRpb24uIEp1 c3QgdGhlIGZ1bmN0aW9uIG5hbWUgaXMgcmV1c2VkIGZvcgo+ICsgKiBwb3J0aW5nIGNvZGUgdGhl c2UgYWxsb2NhdGlvbiBhcmUgbm90IG1hbmFnZWQgYWxsb2NhdGlvbnMKPiArICovCj4gKwo+ICt2 b2lkICpkbWFtX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUs CgpUaGlzIHNob3VsZCBiZSBzdGF0aWMgSSB0aGluay4KCj4gKwkJCSAgIGRtYV9hZGRyX3QgKmRt YV9oYW5kbGUsIGdmcF90IGdmcCkKPiArewo+ICsJdm9pZCAqdmFkZHI7Cj4gKwl1bnNpZ25lZCBs b25nIGFsaWdubWVudCA9IHNpemU7Cj4gKwo+ICsJLyoKPiArCSAqIF94emFsbG9jIHJlcXVpcmVz IHRoYXQgdGhlIChhbGlnbiAmIChhbGlnbiAtMSkpID0gMC4gTW9zdCBvZiB0aGUKPiArCSAqIGFs bG9jYXRpb25zIGluIFNNTVUgY29kZSBzaG91bGQgc2VuZCB0aGUgcmlnaHQgdmFsdWUgZm9yIHNp emUuIEluCj4gKwkgKiBjYXNlIHRoaXMgaXMgbm90IHRydWUgcHJpbnQgYSB3YXJuaW5nIGFuZCBh bGlnbiB0byB0aGUgc2l6ZSBvZiBhCj4gKwkgKiAodm9pZCAqKQo+ICsJICovCj4gKwlpZiAoc2l6 ZSAmIChzaXplIC0gMSkpIHsKPiArCQlkZXZfd2FybihkZXYsICJGaXhpbmcgYWxpZ25tZW50IGZv ciB0aGUgRE1BIGJ1ZmZlclxuIik7Cj4gKwkJYWxpZ25tZW50ID0gc2l6ZW9mKHZvaWQgKik7Cj4g Kwl9Cj4gKwo+ICsJdmFkZHIgPSBfeHphbGxvYyhzaXplLCBhbGlnbm1lbnQpOwo+ICsJaWYgKCF2 YWRkcikgewo+ICsJCWRldl9lcnIoZGV2LCAiRE1BIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKPiAr CQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fbWFkZHIo dmFkZHIpOwo+ICsKPiArCXJldHVybiB2YWRkcjsKPiArfQo+ICsKPiArCj4gK3ZvaWQgZG1hbV9m cmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRy LAoKRGl0dG8uCgo+ICsJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUpCj4gK3sKPiArCXhmcmVlKHZh ZGRyKTsKPiArfQo+ICsKPiArLyogWGVuOiBTdHViIG91dCBETUEgZG9tYWluIHJlbGF0ZWQgZnVu Y3Rpb25zICovCj4gKyNkZWZpbmUgaW9tbXVfZ2V0X2RtYV9jb29raWUoZG9tKSAwCj4gKyNkZWZp bmUgaW9tbXVfcHV0X2RtYV9jb29raWUoZG9tKQo+ICsKPiArLyogWGVuOiBTdHViIG91dCBtb2R1 bGUgcGFyYW0gcmVsYXRlZCBmdW5jdGlvbiAqLwo+ICsjZGVmaW5lIG1vZHVsZV9wYXJhbV9uYW1l ZChhLCBiLCBjLCBkKQo+ICsjZGVmaW5lIE1PRFVMRV9QQVJNX0RFU0MoYSwgYikKPiArCj4gKyNk ZWZpbmUgZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkLCBiKSAwCj4gKwo+ICsjZGVmaW5lIG9m X2RtYV9pc19jb2hlcmVudChuKSAwCj4gKwo+ICsjZGVmaW5lIE1PRFVMRV9ERVZJQ0VfVEFCTEUo dHlwZSwgbmFtZSkKPiArI2RlZmluZSBvZl9kZXZpY2VfaWQgZHRfZGV2aWNlX21hdGNoCj4gKwo+ ICtzdGF0aWMgdm9pZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmlj ZSAqZGV2LAo+ICsJCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQo+ICt7Cj4gKwl2b2lkIF9f aW9tZW0gKnB0cjsKPiArCj4gKwlpZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9N RU0pIHsKPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VcbiIpOwo+ICsJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCXB0ciA9IGlvcmVtYXBfbm9jYWNoZShy ZXMtPmFkZHIsIHJlcy0+c2l6ZSk7Cj4gKwlpZiAoIXB0cikgewo+ICsJCWRldl9lcnIoZGV2LAo+ ICsJCQkiaW9yZW1hcCBmYWlsZWQgKGFkZHIgMHglIlBSSXg2NCIgc2l6ZSAweCUiUFJJeDY0Iilc biIsCj4gKwkJCXJlcy0+YWRkciwgcmVzLT5zaXplKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcHRyOwo+ICt9Cj4gKwo+ICsvKiBYZW46IENvbXBh dGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnkuKi8KPiArc3RydWN0IGlv bW11X2RvbWFpbl9nZW9tZXRyeSB7Cj4gKwlkbWFfYWRkcl90IGFwZXJ0dXJlX3N0YXJ0OyAvKiBG aXJzdCBhZGRyZXNzIHRoYXQgY2FuIGJlIG1hcHBlZCAgICAqLwo+ICsJZG1hX2FkZHJfdCBhcGVy dHVyZV9lbmQ7ICAgLyogTGFzdCBhZGRyZXNzIHRoYXQgY2FuIGJlIG1hcHBlZCAgICAgKi8KPiAr CWJvb2wgZm9yY2VfYXBlcnR1cmU7ICAgICAgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4gbWFwcGFi bGUgcmFuZ2U/ICovCj4gK307Cj4gKwo+ICsKPiArLyogWGVuOiBUeXBlIGRlZmluaXRpb25zIGZv ciBpb21tdV9kb21haW4gKi8KPiArI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VEIDAKPiAr I2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKPiArI2RlZmluZSBJT01NVV9ET01BSU5fSURFTlRJ VFkgMgo+ICsKPiArLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4gKi8KPiArc3RydWN0IGlvbW11 X2RvbWFpbiB7Cj4gKwkvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpb21t dV9kb21haW4gKi8KPiArCXN0cnVjdCBhcm1fc21tdV9kb21haW4JCSpwcml2Owo+ICsJdW5zaWdu ZWQgaW50IHR5cGU7Cj4gKwo+ICsJLyogRHVtbXkgY29tcGF0aWJpbGl0eSBkZWZpbmVzICovCj4g Kwl1bnNpZ25lZCBsb25nIHBnc2l6ZV9iaXRtYXA7Cj4gKwlzdHJ1Y3QgaW9tbXVfZG9tYWluX2dl b21ldHJ5IGdlb21ldHJ5Owo+ICsKPiArCWF0b21pY190IHJlZjsKPiArCS8qCj4gKwkgKiBVc2Vk IHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRleHRzIGZvciBhIHNhbWUgZG9tYWluLgo+ICsJICog VGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBlci1TTU1VIHRvIHVzZWQgYnkgdGhlIGRvbWFpbi4KPiAr CSAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKPiArfTsKPiArCj4gKwoKTm8gbmVlZCBm b3IgMiBuZXdsaW5lcy4gQ2FuIHlvdSBkcm9wIG9uZT8KCj4gKy8qIFhlbjogRGVzY3JpYmVzIGlu Zm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhIFhlbiBkb21haW4gKi8KPiArc3RydWN0IGFybV9zbW11 X3hlbl9kb21haW4gewo+ICsJc3BpbmxvY2tfdAkJCWxvY2s7Cj4gKwkvKiBMaXN0IG9mIGlvbW11 IGRvbWFpbnMgYXNzb2NpYXRlZCB0byB0aGlzIGRvbWFpbiAqLwo+ICsJc3RydWN0IGxpc3RfaGVh ZAkJaW9tbXVfZG9tYWluczsKPiArfTsKPiArCj4gKy8qCj4gKyAqIFhlbjogSW5mb3JtYXRpb24g YWJvdXQgZWFjaCBkZXZpY2Ugc3RvcmVkIGluIGRldi0+YXJjaGRhdGEuaW9tbXUKPiArICoKPiAr ICogVGhlIGRldi0+YXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpb21tdV9kb21haW4gKHJ1bnRp bWUgY29uZmlndXJhdGlvbiBvZgo+ICsgKiB0aGUgU01NVSkuCj4gICAgKi8KPiArc3RydWN0IGFy bV9zbW11X3hlbl9kZXZpY2Ugewo+ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+ICt9 Owo+ICsKPiArLyoKPiArICogWGVuOiBpb19wZ3RhYmxlIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4K PiArICogTW9zdCBvZiB0aGVzZSBhcmUgdG8gcG9ydCBpbiB0aGUgUzEgdHJhbnNsYXRpb24gY29k ZSBhcyBpcy4KPiArICovCj4gK3N0cnVjdCBpb19wZ3RhYmxlX29wcyB7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcyB7Cj4gKwl2b2lkICgqdGxiX2ZsdXNoX2FsbCkodm9pZCAq Y29va2llKTsKPiArCXZvaWQgKCp0bGJfYWRkX2ZsdXNoKSh1bnNpZ25lZCBsb25nIGlvdmEsIHNp emVfdCBzaXplLCBzaXplX3QgZ3JhbnVsZSwKPiArCQkJICAgICAgYm9vbCBsZWFmLCB2b2lkICpj b29raWUpOwo+ICsJdm9pZCAoKnRsYl9zeW5jKSh2b2lkICpjb29raWUpOwo+ICt9Owo+ICsKPiAr c3RydWN0IGlvX3BndGFibGVfY2ZnIHsKPiArCS8qCj4gKwkgKiBJT19QR1RBQkxFX1FVSVJLX0FS TV9OUzogKEFSTSBmb3JtYXRzKSBTZXQgTlMgYW5kIE5TVEFCTEUgYml0cyBpbgo+ICsJICoJc3Rh Z2UgMSBQVEVzLCBmb3IgaGFyZHdhcmUgd2hpY2ggaW5zaXN0cyBvbiB2YWxpZGF0aW5nIHRoZW0K PiArCSAqCWV2ZW4gaW4Jbm9uLXNlY3VyZSBzdGF0ZSB3aGVyZSB0aGV5IHNob3VsZCBub3JtYWxs eSBiZSBpZ25vcmVkLgo+ICsJICoKPiArCSAqIElPX1BHVEFCTEVfUVVJUktfTk9fUEVSTVM6IEln bm9yZSB0aGUgSU9NTVVfUkVBRCwgSU9NTVVfV1JJVEUgYW5kCj4gKwkgKglJT01NVV9OT0VYRUMg ZmxhZ3MgYW5kIG1hcCBldmVyeXRoaW5nIHdpdGggZnVsbCBhY2Nlc3MsIGZvcgo+ICsJICoJaGFy ZHdhcmUgd2hpY2ggZG9lcyBub3QgaW1wbGVtZW50IHRoZSBwZXJtaXNzaW9ucyBvZiBhIGdpdmVu Cj4gKwkgKglmb3JtYXQsIGFuZC9vciByZXF1aXJlcyBzb21lIGZvcm1hdC1zcGVjaWZpYyBkZWZh dWx0IHZhbHVlLgo+ICsJICoKPiArCSAqIElPX1BHVEFCTEVfUVVJUktfVExCSV9PTl9NQVA6IElm IHRoZSBmb3JtYXQgZm9yYmlkcyBjYWNoaW5nIGludmFsaWQKPiArCSAqCSh1bm1hcHBlZCkgZW50 cmllcyBidXQgdGhlIGhhcmR3YXJlIG1pZ2h0IGRvIHNvIGFueXdheSwgcGVyZm9ybQo+ICsJICoJ VExCIG1haW50ZW5hbmNlIHdoZW4gbWFwcGluZyBhcyB3ZWxsIGFzIHdoZW4gdW5tYXBwaW5nLgo+ ICsJICoKPiArCSAqIElPX1BHVEFCTEVfUVVJUktfQVJNX01US180R0I6IChBUk0gdjdzIGZvcm1h dCkgU2V0IGJpdCA5IGluIGFsbAo+ICsJICoJUFRFcywgZm9yIE1lZGlhdGVrIElPTU1VcyB3aGlj aCB0cmVhdCBpdCBhcyBhIDMzcmQgYWRkcmVzcyBiaXQKPiArCSAqCXdoZW4gdGhlIFNvQyBpcyBp biAiNEdCIG1vZGUiIGFuZCB0aGV5IGNhbiBvbmx5IGFjY2VzcyB0aGUgaGlnaAo+ICsJICoJcmVt YXAgb2YgRFJBTSAoMHgxXzAwMDAwMDAwIHRvIDB4MV9mZmZmZmZmZikuCj4gKwkgKgo+ICsJICog SU9fUEdUQUJMRV9RVUlSS19OT19ETUE6IEd1YXJhbnRlZXMgdGhhdCB0aGUgdGFibGVzIHdpbGwg b25seSBldmVyCj4gKwkgKgliZSBhY2Nlc3NlZCBieSBhIGZ1bGx5IGNhY2hlLWNvaGVyZW50IElP TU1VIG9yIENQVSAoZS5nLiBmb3IgYQo+ICsJICoJc29mdHdhcmUtZW11bGF0ZWQgSU9NTVUpLCBz dWNoIHRoYXQgcGFnZXRhYmxlIHVwZGF0ZXMgbmVlZCBub3QKPiArCSAqCWJlIHRyZWF0ZWQgYXMg ZXhwbGljaXQgRE1BIGRhdGEuCj4gKwkgKi8KPiArCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19B Uk1fTlMJCUJJVCgwKQo+ICsJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TCUJJVCgx KQo+ICsJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQCUJJVCgyKQo+ICsJI2Rl ZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCCUJJVCgzKQo+ICsJI2RlZmluZSBJT19Q R1RBQkxFX1FVSVJLX05PX0RNQQkJQklUKDQpCj4gKwl1bnNpZ25lZCBsb25nCQkJcXVpcmtzOwo+ ICsJdW5zaWduZWQgbG9uZwkJCXBnc2l6ZV9iaXRtYXA7Cj4gKwl1bnNpZ25lZCBpbnQJCQlpYXM7 Cj4gKwl1bnNpZ25lZCBpbnQJCQlvYXM7Cj4gKwljb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29w cwkqdGxiOwo+ICsJc3RydWN0IGRldmljZQkJCSppb21tdV9kZXY7Cj4gKwo+ICsJLyogTG93LWxl dmVsIGRhdGEgc3BlY2lmaWMgdG8gdGhlIHRhYmxlIGZvcm1hdCAqLwo+ICsJdW5pb24gewo+ICsJ CXN0cnVjdCB7Cj4gKwkJCXU2NAl0dGJyWzJdOwo+ICsJCQl1NjQJdGNyOwo+ICsJCQl1NjQJbWFp clsyXTsKPiArCQl9IGFybV9scGFlX3MxX2NmZzsKPiArCj4gKwkJc3RydWN0IHsKPiArCQkJdTY0 CXZ0dGJyOwo+ICsJCQl1NjQJdnRjcjsKPiArCQl9IGFybV9scGFlX3MyX2NmZzsKPiArCj4gKwkJ c3RydWN0IHsKPiArCQkJdTMyCXR0YnJbMl07Cj4gKwkJCXUzMgl0Y3I7Cj4gKwkJCXUzMglubXJy Owo+ICsJCQl1MzIJcHJycjsKPiArCQl9IGFybV92N3NfY2ZnOwo+ICsJfTsKPiArfTsKPiArCj4g K2VudW0gaW9fcGd0YWJsZV9mbXQgewo+ICsJQVJNXzMyX0xQQUVfUzEsCj4gKwlBUk1fMzJfTFBB RV9TMiwKPiArCUFSTV82NF9MUEFFX1MxLAo+ICsJQVJNXzY0X0xQQUVfUzIsCj4gKwlBUk1fVjdT LAo+ICsJSU9fUEdUQUJMRV9OVU1fRk1UUywKPiArfTsKPiArCj4gKy8qCj4gKyAqIFhlbjogVGhl IHBndGFibGVfb3BzIGFyZSB1c2VkIGJ5IHRoZSBTMSB0cmFuc2xhdGlvbnMsIHNvIHJldHVybiB0 aGUgZHVtbXkKCkRvIHlvdSBtZWFuIFMyIHRyYW5zbGF0aW9ucz8gQmVjYXVzZSB3ZSBzaG91bGQg bmV2ZXIgcmVhY2ggUzEgCmFsbG9jYXRpb24sIHJpZ2h0PwoKPiArICogYWRkcmVzcy4KPiArICov Cj4gKyNkZWZpbmUgYWxsb2NfaW9fcGd0YWJsZV9vcHMoZiwgYywgbykgKChzdHJ1Y3QgaW9fcGd0 YWJsZV9vcHMgKikweERFQURCRUVGKQoKMHhERUFEQkVFRiBtaWd0aCBiZSBhIHZhbGlkIGFkZHJl c3MgaW4gWGVuLiBJZiB5b3Ugd2FudCB0byByZXR1cm4gYW4gCmludmFsaWQgYWRkcmVzcywgaXQg d291bGQgYmUgYmV0dGVyIHRvIGNob29zZSBzb21ldGhpbmcgaW4gdGhlIHJhbmdlIAowLTJNQi4g VGhhdCByYW5nZSB3aWxsIHVubGlrZWx5IGdldCBhbGxvY2F0ZWQgaW4gdGhlIGZ1dHVyZS4KCj4g KyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhvKSAobyA9IDApCgpXaGVuIEkgbG9vayBhdCB0 aGUgTGludXggaW1wbGVtZW50YXRpb24sIGZyZWVfaW9fcGd0YWJsZV9vcHMgaXMgCnJldHVybmlu Zy4gU28gSSBhbSBub3Qgc3VyZSB3aGF0IHlvdSB0cnkgdG8gZG8gZG8gaGVyZS4KCj4gKwo+ICsv KiBYZW46IERlZmluZSB3cmFwcGVyIGZvciByZXF1ZXN0aW5nIElSUXMgKi8KPiArI2RlZmluZSBJ UlFGX09ORVNIT1QgMAo+ICsKPiArdHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2 b2lkICosIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOwo+ICsKPiArc3RhdGljIGlubGluZSBpbnQg ZGV2bV9yZXF1ZXN0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpcnEsCj4g KwkJCQkgICBpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsCj4g KwkJCQkgICBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCS8qVE9E TzogQ2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8gc2V0IGEgdHlwZSAqLwoKIEZyb20gYSBYZW4g cGVyc3BlY3RpdmUsIFlvdSBuZWVkIHRvIHNldCBhIHR5cGUuIFlvdSBjYW4gcXVvdGUgdGhlIHNw ZWMgCmxpa2VseSBoZXJlLiBUaGUgSU9SVCBzYXlzOgoKIldoZW4gdXNpbmcgd2lyZWQgaW50ZXJy dXB0cywgdGhlIFNNTVUgYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIHRoZW0gdG8gYmUgCmVkZ2Ugc2Vu c2l0aXZlIi4KCkl0IG1pZ2h0IGJlIGJldHRlciB0byBxdW90ZSBTTU1VdjMgc3BlYyB0aG91Z2h0 LgoKCj4gKwlpcnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOwo+ICsJcmV0dXJu IHJlcXVlc3RfaXJxKGlycSwgaXJxZmxhZ3MsIGhhbmRsZXIsIGRldm5hbWUsIGRldl9pZCk7Cj4g KwoKU3B1cmlvdXMgbGluZT8KCj4gK30KPiArCj4gK2ludCBkZXZtX3JlcXVlc3RfdGhyZWFkZWRf aXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlycSwgaXJxX2hhbmRsZXJfdCBo YW5kbGVyLAo+ICsJCQkgICAgICBpcnFfaGFuZGxlcl90IHRocmVhZF9mbiwgdW5zaWduZWQgbG9u ZyBpcnFmbGFncywKPiArCQkJICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lk KQo+ICt7Cj4gKwlyZXR1cm4gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgdGhyZWFkX2ZuLCBp cnFmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKPiArfQoKTG9va2luZyBhdCB0aGlzIGFnYWluLCBJ IHVuZGVyc3RhbmQgdGhhdCBYZW4gZG9lcyBub3QgaGF2ZSB0aHJlYWQuIEJ1dCAKdGhlIG1haW4g Z29hbCBvZiBoYXZpbmcgdXNpbmcgdGhyZWFkIGluIExpbnV4IGlzIHRvIGxpbWl0IGxhdGVuY3ku CgpUaGUgY2xvc2VzdCB0aGluZyB3ZSB3b3VsZCBoYXZlIGZvciBYZW4gd291bGQgYmUgdGFza2xl dC4gSSBhbSBub3QgCmFza2luZyB0byBpbXBsZW1lbnQgdGhhdC4gQnV0IEkgd291bGQgbGlrZSB0 byBzZWUgYXQgbGVhc3QgYSBjb21tZW50IG9uIAp0b3Agb2YgdGhlIGZ1bmN0aW9uIGV4cGxhaW5p bmcgdGhlIHJhdGlvbmFsZSBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbi4KCj4gICAKPiAtI2lu Y2x1ZGUgPGxpbnV4L2FjcGkuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW9ydC5oPgo+IC0j aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgo+ IC0jaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K PiAtI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4K PiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvbXNpLmg+Cj4g LSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+IC0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ IC0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm b3JtLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Cj4gLQo+IC0j aW5jbHVkZSAiaW8tcGd0YWJsZS5oIgo+ICsvKiBYZW46IFRoZSBtdXRleCBpcyB1c2VkIG9ubHkg ZHVyaW5nIGluaXRpYWxpemF0aW9uIHNvIHRoZSB0eXBlY2FzdCBpcyBzYWZlICovCj4gKyNkZWZp bmUgbXV0ZXggc3BpbmxvY2tfdAo+ICsjZGVmaW5lIG11dGV4X2luaXQgc3Bpbl9sb2NrX2luaXQK PiArI2RlZmluZSBtdXRleF9sb2NrIHNwaW5fbG9jawo+ICsjZGVmaW5lIG11dGV4X3VubG9jayBz cGluX3VubG9jawo+ICsKPiArI2RlZmluZSByZWFkeF9wb2xsX3RpbWVvdXQob3AsIGFkZHIsIHZh bCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwKPiArKHsgXAo+ICsJc190aW1lX3QgZGVh ZGxpbmUgPSBOT1coKSArIE1JQ1JPU0VDUyh0aW1lb3V0X3VzKTsgXAo+ICsJZm9yICg7OykgeyBc Cj4gKwkJKHZhbCkgPSBvcChhZGRyKTsgXAo+ICsJCWlmIChjb25kKSBcCj4gKwkJCWJyZWFrOyBc Cj4gKwkJaWYgKE5PVygpID4gZGVhZGxpbmUpIHsgXAo+ICsJCQkodmFsKSA9IG9wKGFkZHIpOyBc Cj4gKwkJCWJyZWFrOyBcCj4gKwkJfSBcCj4gKwl1ZGVsYXkoc2xlZXBfdXMpOyBcCj4gKwl9IFwK PiArCShjb25kKSA/IDAgOiAtRVRJTUVET1VUOyBcCj4gK30pCj4gKwo+ICsjZGVmaW5lIHJlYWRs X3JlbGF4ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZhbCwgY29uZCwgZGVsYXlfdXMsIHRpbWVvdXRf dXMpIFwKPiArCXJlYWR4X3BvbGxfdGltZW91dChyZWFkbF9yZWxheGVkLCBhZGRyLCB2YWwsIGNv bmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKQo+ICsKPiArI2RlZmluZSBWQV9CSVRTIDAgLyogT25s eSBuZWVkZWQgZm9yIFMxIHRyYW5zbGF0aW9ucyAqLwo+ICAgCj4gICAvKiBNTUlPIHJlZ2lzdGVy cyAqLwo+ICAgI2RlZmluZSBBUk1fU01NVV9JRFIwCQkJMHgwCj4gQEAgLTQzMyw2ICs4MDcsNyBA QCBlbnVtIHByaV9yZXNwIHsKPiAgIAlQUklfUkVTUF9TVUNDLAo+ICAgfTsKPiAgIAo+ICsjaWYg MCAvKiBYZW46IE5vIE1TSSBzdXBwb3J0IGluIHRoaXMgaXRlcmF0aW9uICovCj4gICBlbnVtIGFy bV9zbW11X21zaV9pbmRleCB7Cj4gICAJRVZUUV9NU0lfSU5ERVgsCj4gICAJR0VSUk9SX01TSV9J TkRFWCwKPiBAQCAtNDU3LDYgKzgzMiw3IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBhcm1fc21tdV9t c2lfY2ZnW0FSTV9TTU1VX01BWF9NU0lTXVszXSA9IHsKPiAgIAkJQVJNX1NNTVVfUFJJUV9JUlFf Q0ZHMiwKPiAgIAl9LAo+ICAgfTsKPiArI2VuZGlmCj4gICAKPiAgIHN0cnVjdCBhcm1fc21tdV9j bWRxX2VudCB7Cj4gICAJLyogQ29tbW9uIGZpZWxkcyAqLwo+IEBAIC01NjEsNiArOTM3LDggQEAg c3RydWN0IGFybV9zbW11X3MyX2NmZyB7Cj4gICAJdTE2CQkJCXZtaWQ7Cj4gICAJdTY0CQkJCXZ0 dGJyOwo+ICAgCXU2NAkJCQl2dGNyOwo+ICsJLyogWGVuOiBEb21haW4gYXNzb2NpYXRlZCB0byB0 aGlzIGNvbmZpZ3VyYXRpb24gKi8KPiArCXN0cnVjdCBkb21haW4JCQkqZG9tYWluOwo+ICAgfTsK PiAgIAo+ICAgc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewo+IEBAIC02MzUsOSArMTAxMywy MSBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPiAgIAlzdHJ1Y3QgYXJtX3NtbXVfc3RydGFi X2NmZwlzdHJ0YWJfY2ZnOwo+ICAgCj4gICAJLyogSU9NTVUgY29yZSBjb2RlIGhhbmRsZSAqLwo+ ICsjaWYgMCAvKlhlbjogR2VuZXJpYyBpb21tdV9kZXZpY2UgcmVmIG5vdCBuZWVkZWQgaGVyZSAq Lwo+ICAgCXN0cnVjdCBpb21tdV9kZXZpY2UJCWlvbW11Owo+ICsjZW5kaWYKPiArCS8qIFhlbjog TmVlZCB0byBrZWVwIGEgbGlzdCBvZiBTTU1VIGRldmljZXMgKi8KPiArCXN0cnVjdCBsaXN0X2hl YWQgICAgICAgICAgICAgICAgZGV2aWNlczsKPiAgIH07Cj4gICAKPiArLyogWGVuOiBLZWVwIGEg bGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAqLwo+ICtzdGF0aWMg REVGSU5FX1NQSU5MT0NLKGFybV9zbW11X2RldmljZXNfbG9jayk7Cj4gK3N0YXRpYyBMSVNUX0hF QUQoYXJtX3NtbXVfZGV2aWNlcyk7Cj4gKy8qIFhlbjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2 aWNlIHVzaW5nIGZ3bm9kZSAqLwo+ICtzdGF0aWMKPiArc3RydWN0IGFybV9zbW11X2RldmljZSAq YXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsKPiAr Cj4gKwo+ICAgLyogU01NVSBwcml2YXRlIGRhdGEgZm9yIGVhY2ggbWFzdGVyICovCj4gICBzdHJ1 Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgewo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UJCSpz bW11Owo+IEBAIC02NTQsNyArMTA0NCw3IEBAIGVudW0gYXJtX3NtbXVfZG9tYWluX3N0YWdlIHsK PiAgIAo+ICAgc3RydWN0IGFybV9zbW11X2RvbWFpbiB7Cj4gICAJc3RydWN0IGFybV9zbW11X2Rl dmljZQkJKnNtbXU7Cj4gLQlzdHJ1Y3QgbXV0ZXgJCQlpbml0X211dGV4OyAvKiBQcm90ZWN0cyBz bW11IHBvaW50ZXIgKi8KPiArCW11dGV4CQkJCWluaXRfbXV0ZXg7IC8qIFByb3RlY3RzIHNtbXUg cG9pbnRlciAqLwoKUmF0aGVyIHRoYW4gcmVwbGFjaW5nIHN0cnVjdCBtdXRleCBieSBtdXRleCB3 aGljaCBsb29rcyBhIGJpdCB3ZWlyZC4gV2h5IApkb24ndCB5b3UganVzdCBkbwoKI2RlZmluZSBt dXRleCBzcGlubG9jawoKPiAgIAo+ICAgCXN0cnVjdCBpb19wZ3RhYmxlX29wcwkJKnBndGJsX29w czsKPiAgIAo+IEBAIC0xMjMyLDcgKzE2MjIsNyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9oYW5k bGVfcHByKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHU2NCAqZXZ0KQo+ICAgCj4gICAJ ZGV2X2luZm8oc21tdS0+ZGV2LCAidW5leHBlY3RlZCBQUkkgcmVxdWVzdCByZWNlaXZlZDpcbiIp Owo+ICAgCWRldl9pbmZvKHNtbXUtPmRldiwKPiAtCQkgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsl dSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwKPiAr CQkgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2Vz cyBhdCBpb3ZhICUjIiBQUkl4NjQgIlxuIiwKPiAgIAkJIHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3Qg PyAiTCIgOiAiIiwKPiAgIAkJIGV2dFswXSAmIFBSSVFfMF9QRVJNX1BSSVYgPyAiIiA6ICJ1biIs Cj4gICAJCSBldnRbMF0gJiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCj4gQEAgLTEzNDYs NiArMTczNiw4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4gICB7Cj4gICAJYXJtX3NtbXVfZ2Vycm9yX2hhbmRs ZXIoaXJxLCBkZXYpOwo+ICAgCWFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsK PiArCS8qWGVuOiBObyB0aHJlYWRlZCBpcnEuIFNvIGNhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0aW9u IGZyb20gaGVyZSAqLwo+ICsJYXJtX3NtbXVfY29tYmluZWRfaXJxX3RocmVhZChpcnEsIGRldik7 MQo+ICAgCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cj4gICB9Cj4gICAKPiBAQCAtMTM1OCw2ICsx NzUwLDQ2IEBAIHN0YXRpYyB2b2lkIF9fYXJtX3NtbXVfdGxiX3N5bmMoc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdSkKPiAgIAlhcm1fc21tdV9jbWRxX2lzc3VlX2NtZChzbW11LCAmY21kKTsK PiAgIH0KPiAgIAo+ICsvKgo+ICsgKiBYZW46IERlZmluZSB0aGUgSVJRIGhhbmRsZXJzIGZvciB4 ZW4uIFRoZSBsaW51eCBmdW5jdGlvbnMgd291bGQgYmUKPiArICogbW9kaWZpZWQgdG8gdXNlIHRo ZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIGNvZGUuCj4gKyAqLwo+ICtzdGF0 aWMgdm9pZCBhcm1fc21tdV9ldnRxX3RocmVhZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAo+ICsJ CQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ICt7Cj4gKwlhcm1fc21tdV9l dnRxX3RocmVhZChpcnEsIGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X3By aXFfdGhyZWFkX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4gKwkJCQkgICAgICAgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MpCj4gK3sKPiArCWFybV9zbW11X3ByaXFfdGhyZWFkKGlycSwgZGV2 KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXJfeGVu KGludCBpcnEsIHZvaWQgKmRldiwKPiArCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPiArewo+ICsJYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcl94ZW4oaW50IGlycSwg dm9pZCAqZGV2LAo+ICsJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ICt7 Cj4gKwlhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpcnEsIGRldik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpk ZXYsCj4gKwkJCQkgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gK3sKPiArCWFy bV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyKGlycSwgZGV2KTsKPiArfQo+ICsKPiArI2RlZmlu ZSBhcm1fc21tdV9ldnRxX3RocmVhZCBhcm1fc21tdV9ldnRxX3RocmVhZF94ZW4KPiArI2RlZmlu ZSBhcm1fc21tdV9wcmlxX3RocmVhZCBhcm1fc21tdV9wcmlxX3RocmVhZF94ZW4KPiArI2RlZmlu ZSBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcl94 ZW4KPiArI2RlZmluZSBhcm1fc21tdV9nZXJyb3JfaGFuZGxlciBhcm1fc21tdV9nZXJyb3JfaGFu ZGxlcl94ZW4KPiArI2RlZmluZSBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlciBhcm1fc21t dV9jb21iaW5lZF9pcnFfaGFuZGxlcl94ZW4KPiArCj4gICBzdGF0aWMgdm9pZCBhcm1fc21tdV90 bGJfc3luYyh2b2lkICpjb29raWUpCj4gICB7Cj4gICAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAq c21tdV9kb21haW4gPSBjb29raWU7Cj4gQEAgLTE0MTUsNiArMTg0Nyw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcyBhcm1fc21tdV9nYXRoZXJfb3BzID0gewo+ICAgCS50 bGJfc3luYwk9IGFybV9zbW11X3RsYl9zeW5jLAo+ICAgfTsKPiAgIAo+ICsjaWYgMCAvKlhlbjog VW51c2VkIGZ1bmN0aW9uYWxpdHkgKi8KPiAgIC8qIElPTU1VIEFQSSAqLwo+ICAgc3RhdGljIGJv b2wgYXJtX3NtbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCj4gICB7Cj4gQEAgLTE0Mjcs NiArMTg2MCw3IEBAIHN0YXRpYyBib29sIGFybV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9jYXAg Y2FwKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAJfQo+ICAgfQo+ICsjZW5kaWYKPiAgIAo+ICAg c3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25l ZCB0eXBlKQo+ICAgewo+IEBAIC0xNTQ2LDkgKzE5ODAsMTUgQEAgc3RhdGljIGludCBhcm1fc21t dV9kb21haW5fZmluYWxpc2VfczIoc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4s Cj4gICAJaWYgKHZtaWQgPCAwKQo+ICAgCQlyZXR1cm4gdm1pZDsKPiAgIAo+IC0JY2ZnLT52bWlk CT0gKHUxNil2bWlkOwo+IC0JY2ZnLT52dHRicgk9IHBndGJsX2NmZy0+YXJtX2xwYWVfczJfY2Zn LnZ0dGJyOwo+IC0JY2ZnLT52dGNyCT0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcudnRjcjsK PiArCS8qIFhlbjogR2V0IHRoZSB0dGJyIGFuZCB2dGNyIHZhbHVlcwoKSSB0aGluayBMaW51eCBp cyBhbHNvIHVzaW5nOgoKLyoKICAqIFhlbjoKCj4gKwkgKiB2dHRicjogVGhpcyBpcyBhIHNoYXJl ZCB2YWx1ZSB3aXRoIHRoZSBkb21haW4gcGFnZSB0YWJsZQo+ICsJICogdnRjcjogVGhlIFRDUiBz ZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgQ1BVIHNpbmNlIHRoZSBwYWdlCj4gKwkgKiB0YWJsZXMg YXJlIHNoYXJlZAo+ICsJICovCj4gKwo+ICsJY2ZnLT52bWlkCT0gdm1pZDsKPiArCWNmZy0+dnR0 YnIJPSBwYWdlX3RvX21hZGRyKGNmZy0+ZG9tYWluLT5hcmNoLnAybS5yb290KTsKPiArCWNmZy0+ dnRjcgk9IFJFQURfU1lTUkVHMzIoVlRDUl9FTDIpICYgU1RSVEFCX1NURV8yX1ZUQ1JfTUFTSzsK PiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IEBAIC0xNjA0LDYgKzIwNDQsNyBAQCBzdGF0aWMg aW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4p Cj4gICAJaWYgKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVBVF9DT0hFUkVOQ1kpCj4gICAJ CXBndGJsX2NmZy5xdWlya3MgPSBJT19QR1RBQkxFX1FVSVJLX05PX0RNQTsKPiAgIAo+ICsJLyog WGVuOiBwZ3RibF9vcHMgZ2V0cyBhbiBpbnZhbGlkIGFkZHJlc3MgKi8KPiAgIAlwZ3RibF9vcHMg PSBhbGxvY19pb19wZ3RhYmxlX29wcyhmbXQsICZwZ3RibF9jZmcsIHNtbXVfZG9tYWluKTsKPiAg IAlpZiAoIXBndGJsX29wcykKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gQEAgLTE3MjEsNiArMjE2 Miw3IEBAIG91dF91bmxvY2s6Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICsjaWYgMCAv KiBYZW46IFVudXNlZCBmdW5jdGlvbmxpdHkgKi8KCnMvZnVuY3Rpb25saXR5L2Z1bmN0aW9uYWxp dHkvCgo+ICAgc3RhdGljIGludCBhcm1fc21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCj4gICAJCQlwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90 IHNpemUsIGludCBwcm90KQo+ICAgewo+IEBAIC0xNzcyLDYgKzIyMTQsNyBAQCBzdHJ1Y3QgYXJt X3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxl ICpmd25vZGUpCj4gICAJcHV0X2RldmljZShkZXYpOwo+ICAgCXJldHVybiBkZXYgPyBkZXZfZ2V0 X2RydmRhdGEoZGV2KSA6IE5VTEw7Cj4gICB9Cj4gKyNlbmRpZgo+ICAgCj4gICBzdGF0aWMgYm9v bCBhcm1fc21tdV9zaWRfaW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMy IHNpZCkKPiAgIHsKPiBAQCAtMTc4Myw3ICsyMjI2LDkgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVf c2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQpCj4gICAJ cmV0dXJuIHNpZCA8IGxpbWl0Owo+ICAgfQo+ICAgCgovKiBYZW46IFVudXNlZCAqLwoKPiArI2lm IDAKPiAgIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X29wczsKPiArI2VuZGlmCj4g ICAKPiAgIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gICB7Cj4gQEAgLTE3OTEsOSArMjIzNiwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXU7Cj4gICAJc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhICptYXN0ZXI7Cj4gICAJc3RydWN0 IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7Cj4gKyNpZiAwIC8qWGVu OiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCj4gICAJc3RydWN0IGlvbW11X2dyb3VwICpn cm91cDsKPiArI2VuZGlmCj4gICAKPiAtCWlmICghZndzcGVjIHx8IGZ3c3BlYy0+b3BzICE9ICZh cm1fc21tdV9vcHMpCj4gKwkvKiBYZW46IGZ3c3BlYy0+b3BzIGFyZSBub3QgbmVlZGVkICovCj4g KwlpZiAoIWZ3c3BlYykKCkkgYW0gcHJldHR5IHN1cmUgSSBzdWdnZXN0ZWQgaW4gdGhlIHBhc3Qg dGhlIGZ3c3BlYy0+b3BzIG1pZ2h0IGJlIG5lZWRlZC4KCj4gICAJCXJldHVybiAtRU5PREVWOwo+ ICAgCS8qCj4gICAJICogV2UgX2Nhbl8gYWN0dWFsbHkgd2l0aHN0YW5kIGRvZGd5IGJ1cyBjb2Rl IHJlLWNhbGxpbmcgYWRkX2RldmljZSgpCj4gQEAgLTE4MzAsNiArMjI3OCwxMSBAQCBzdGF0aWMg aW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+ICAgCQl9Cj4gICAJ fQo+ICAgCj4gKy8qCj4gKyAqIFhlbjogRG8gbm90IG5lZWQgYW4gaW9tbXUgZ3JvdXAgYXMgdGhl IHN0cmVhbSBkYXRhIGlzIGNhcnJpZWQgYnkgdGhlIFNNTVUKPiArICogbWFzdGVyIGRldmljZSBv YmplY3QKPiArICovCj4gKyNpZiAwCj4gICAJZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfZm9yX2Rl dihkZXYpOwo+ICAgCWlmICghSVNfRVJSKGdyb3VwKSkgewo+ICAgCQlpb21tdV9ncm91cF9wdXQo Z3JvdXApOwo+IEBAIC0xODM3LDggKzIyOTAsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRf ZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gUFRSX0VS Ul9PUl9aRVJPKGdyb3VwKTsKPiArI2VuZGlmCj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICsv Kgo+ICsgKiBYZW46IFdlIGNhbiBwb3RlbnRpYWxseSBzdXBwb3J0IHRoaXMgZnVuY3Rpb24gYW5k IGRlc3Ryb3kgYSBkZXZpY2UuIFRoaXMKPiArICogd2lsbCBiZSByZWxldmFudCBmb3IgUENJIGhv dHBsdWcuIFNvLCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIG5lZWRlZCBhZnRlcgo+ICsgKiBwYXNz dGhyb3VnaCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KPiArICovCj4gKyNpZiAwCj4gICBzdGF0aWMg dm9pZCBhcm1fc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgIHsKPiAg IAlzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPiBAQCAt MTk3NCw2ICsyNDM1LDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgYXJtX3NtbXVfb3BzID0g ewo+ICAgCS5wdXRfcmVzdl9yZWdpb25zCT0gYXJtX3NtbXVfcHV0X3Jlc3ZfcmVnaW9ucywKPiAg IAkucGdzaXplX2JpdG1hcAkJPSAtMVVMLCAvKiBSZXN0cmljdGVkIGR1cmluZyBkZXZpY2UgYXR0 YWNoICovCj4gICB9Owo+ICsjZW5kaWYKPiAgIAo+ICAgLyogUHJvYmluZyBhbmQgaW5pdGlhbGlz YXRpb24gZnVuY3Rpb25zICovCj4gICBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfb25lX3F1ZXVl KHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsCj4gQEAgLTIxODIsNiArMjY0NCw3IEBAIHN0 YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSwgdTMyIHNldCwgdTMyIGNscikKPiAgIAkJCQkJICAxLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRf VVMpOwo+ICAgfQo+ICAgCj4gKyNpZiAwIC8qIFhlbjogVGhlcmUgaXMgbm8gTVNJIHN1cHBvcnQg YXMgeWV0ICovCj4gICBzdGF0aWMgdm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAqZGF0YSkK PiAgIHsKPiAgIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwo+IEBAIC0yMjQ3LDEyICsyNzEw LDE1IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3NldHVwX21zaXMoc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSkKPiAgIAkvKiBBZGQgY2FsbGJhY2sgdG8gZnJlZSBNU0lzIG9uIHRlYXJkb3du ICovCj4gICAJZGV2bV9hZGRfYWN0aW9uKGRldiwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwo+ ICAgfQo+ICsjZW5kaWYKPiAgIAo+ICAgc3RhdGljIHZvaWQgYXJtX3NtbXVfc2V0dXBfdW5pcXVl X2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPiAgIHsKPiAgIAlpbnQgaXJxLCBy ZXQ7Cj4gICAKPiArI2lmIDAgLypYZW46IENhbm5vdCBzZXR1cCBtc2lzIGZvciBub3cgKi8KPiAg IAlhcm1fc21tdV9zZXR1cF9tc2lzKHNtbXUpOwo+ICsjZW5kaWYKPiAgIAo+ICAgCS8qIFJlcXVl c3QgaW50ZXJydXB0IGxpbmVzICovCj4gICAJaXJxID0gc21tdS0+ZXZ0cS5xLmlycTsKPiBAQCAt MjMxNiw5ICsyNzgyLDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfc2V0dXBfaXJxcyhzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlICpzbW11KQo+ICAgCQkgKiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVu dGF0aW9uIGRvZXNuJ3Qgbm90IHN1cHBvcnQgdW5pcXVlCj4gICAJCSAqIGlycSBsaW5lcy4gVXNl IHNpbmdsZSBpcnEgbGluZSBmb3IgYWxsIHRoZSBTTU1VdjMgaW50ZXJydXB0cy4KPiAgIAkJICov Cj4gLQkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShzbW11LT5kZXYsIGlycSwKPiAr CQkvKgo+ICsJCSAqIFhlbjogRG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBpcnFzLCBzbyBzZXJp YWxpc2UgdGhlIHNldHVwLgo+ICsJCSAqIFRoaXMgaXMgdGhlIHNhbWUgZm9yIHByaXMgYW5kIGV2 ZW50IGludGVycnVwdCBsaW5lcyBvbiBvdGhlcgo+ICsJCSAqIHN5c3RlbXMKPiArCQkgKi8KCkFi b3ZlIHlvdSBkaWQgaW1wbGVtZW50ZWQgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiAKZGV2bV9y ZXF1ZXN0X3RocmVhZGVkX2lycSguLi4pLiBTbyB3aHkgZGlkIHlvdSByZXBsYWNlIHRoZSBjb2Rl IGhlcmU/Cgo+ICsJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4gICAJ CQkJCWFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyLAo+IC0JCQkJCWFybV9zbW11X2NvbWJp bmVkX2lycV90aHJlYWQsCj4gICAJCQkJCUlSUUZfT05FU0hPVCwKPiAgIAkJCQkJImFybS1zbW11 LXYzLWNvbWJpbmVkLWlycSIsIHNtbXUpOwo+ICAgCQlpZiAocmV0IDwgMCkKPiBAQCAtMjU0Miw4 ICszMDEyLDE0IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXUpCj4gICAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZF QVRfU1RBTExTOwo+ICAgCX0KPiAgIAo+ICsvKgo+ICsgKiBYZW46IEJsb2NrIHN0YWdlIDEgdHJh bnNsYXRpb25zLiBCeSBkb2luZyB0aGlzIGhlcmUgd2UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZQo+ ICsgKiBkb21haW4tPnN0YWdlIGV4cGxpY2l0bHkuCj4gKyAqLwo+ICsjaWYgMAo+ICAgCWlmIChy ZWcgJiBJRFIwX1MxUCkKPiAgIAkJc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFO U19TMTsKPiArI2VuZGlmCj4gICAKPiAgIAlpZiAocmVnICYgSURSMF9TMlApCj4gICAJCXNtbXUt PmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzI7Cj4gQEAgLTI2MTYsMTAgKzMwOTIs MTIgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdSkKPiAgIAlpZiAocmVnICYgSURSNV9HUkFONEspCj4gICAJCXNtbXUtPnBn c2l6ZV9iaXRtYXAgfD0gU1pfNEsgfCBTWl8yTSB8IFNaXzFHOwo+ICAgCj4gKyNpZiAwIC8qIFhl bjogU01NVSBvcHMgZG8gbm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICov Cj4gICAJaWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4gICAJCWFybV9z bW11X29wcy5wZ3NpemVfYml0bWFwID0gc21tdS0+cGdzaXplX2JpdG1hcDsKPiAgIAllbHNlCj4g ICAJCWFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4g KyNlbmRpZgo+ICAgCj4gICAJLyogT3V0cHV0IGFkZHJlc3Mgc2l6ZSAqLwo+ICAgCXN3aXRjaCAo cmVnICYgSURSNV9PQVNfTUFTSyA8PCBJRFI1X09BU19TSElGVCkgewo+IEBAIC0yNjgwLDcgKzMx NTgsOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCj4gICAJc3RydWN0IGRldmljZSAqZGV2ID0gc21tdS0+ZGV2Owo+ ICAgCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKPiAgIAo+IC0Jbm9kZSA9ICooc3RydWN0 IGFjcGlfaW9ydF9ub2RlICoqKWRldl9nZXRfcGxhdGRhdGEoZGV2KTsKPiArCS8qIFhlbjogTW9k aWZpY2F0aW9uIHRvIGdldCBpb3J0X25vZGUgKi8KPiArCW5vZGUgPSAoc3RydWN0IGFjcGlfaW9y dF9ub2RlICopZGV2LT5hY3BpX25vZGU7Cj4gICAKPiAgIAkvKiBSZXRyaWV2ZSBTTU1VdjMgc3Bl Y2lmaWMgZGF0YSAqLwo+ICAgCWlvcnRfc21tdSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMg Kilub2RlLT5ub2RlX2RhdGE7Cj4gQEAgLTI3MDMsNyArMzE4Miw3IEBAIHN0YXRpYyBpbmxpbmUg aW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsCj4gICBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2LAo+ICAgCQkJCSAgICBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11 KQo+ICAgewo+IC0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9IHBkZXY7Cj4gICAJdTMyIGNlbGxzOwo+ICAgCWludCByZXQgPSAtRUlOVkFM Owo+ICAgCj4gQEAgLTI3MTYsNiArMzE5NSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNl X2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gICAKPiAgIAlwYXJzZV9k cml2ZXJfb3B0aW9ucyhzbW11KTsKPiAgIAo+ICsJLyogWGVuOiBvZl9kbWFfaXNfY29oZXJlbnQg aXMgYSBzdHViIHRpbGwgZHQgc3VwcG9ydCBpcyBpbnRyb2R1Y2VkICovCgpJIHRoaW5rIHRoaXMg Y29tbWVudCBtYXR0ZXJzIG1vcmUgb24gdG9wIG9mIHRoZSBzdHViLiBJIHdvdWxkIGFsc28gYWRk IAphbiBCVUcoKSBpbiB0aGUgc3R1YiB0byBjYXRjaCBpdC4KCj4gICAJaWYgKG9mX2RtYV9pc19j b2hlcmVudChkZXYtPm9mX25vZGUpKQo+ICAgCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9G RUFUX0NPSEVSRU5DWTsKPiAgIAo+IEBAIC0yNzM0LDkgKzMyMTQsMTEgQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgIHsK PiAgIAlpbnQgaXJxLCByZXQ7Cj4gICAJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKyNpZiAwIC8q WGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAqLwo+ICAgCXJlc291cmNlX3NpemVfdCBp b2FkZHI7Cj4gKyNlbmRpZgo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7Cj4gLQlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g cGRldjsvKiBYZW46IGRldiBpcyBpZ25vcmVkICovCj4gICAJYm9vbCBieXBhc3M7Cj4gICAKPiAg IAlzbW11ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbW11KSwgR0ZQX0tFUk5FTCk7Cj4g QEAgLTI3NjMsNyArMzI0NSw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gICAJCWRldl9lcnIoZGV2LCAiTU1JTyByZWdp b24gdG9vIHNtYWxsICglcHIpXG4iLCByZXMpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9 Cj4gKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAqLwo+ICAgCWlvYWRk ciA9IHJlcy0+c3RhcnQ7Cj4gKyNlbmRpZgo+ICAgCj4gICAJc21tdS0+YmFzZSA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gICAJaWYgKElTX0VSUihzbW11LT5iYXNlKSkKPiBA QCAtMjgwMiwxMyArMzI4NiwxOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gICAJ LyogUmVjb3JkIG91ciBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8KPiArCS8qIFhlbjogU01N VSBpcyBub3QgdHJlYXRlZCBhIGEgcGxhdGZvcm0gZGV2aWNlKi8KPiArI2lmIDAKPiAgIAlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsKPiArI2VuZGlmCj4gICAKPiAgIAkvKiBSZXNl dCB0aGUgZGV2aWNlICovCj4gICAJcmV0ID0gYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHNtbXUsIGJ5 cGFzcyk7Cj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+ICsvKiBYZW46IE5v dCBjcmVhdGluZyBhbiBJT01NVSBkZXZpY2UgbGlzdCBmb3IgWGVuICovCj4gKyNpZiAwCj4gICAJ LyogQW5kIHdlJ3JlIHVwLiBHbyBnbyBnbyEgKi8KPiAgIAlyZXQgPSBpb21tdV9kZXZpY2Vfc3lz ZnNfYWRkKCZzbW11LT5pb21tdSwgZGV2LCBOVUxMLAo+ICAgCQkJCSAgICAgInNtbXUzLiVwYSIs ICZpb2FkZHIpOwo+IEBAIC0yODQ0LDkgKzMzMzMsMjAgQEAgc3RhdGljIGludCBhcm1fc21tdV9k ZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgIAkJaWYgKHJldCkK PiAgIAkJCXJldHVybiByZXQ7Cj4gICAJfQo+ICsjZW5kaWYKPiArCS8qCj4gKwkgKiBYZW46IEtl ZXAgYSBsaXN0IG9mIGFsbCBwcm9iZWQgZGV2aWNlcy4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcXVl cnkKPiArCSAqIHRoZSBzbW11IGRldmljZXMgYmFzZWQgb24gdGhlIGZ3bm9kZS4KPiArCSAqLwo+ ICsJSU5JVF9MSVNUX0hFQUQoJnNtbXUtPmRldmljZXMpOwo+ICsJc3Bpbl9sb2NrKCZhcm1fc21t dV9kZXZpY2VzX2xvY2spOwo+ICsJbGlzdF9hZGQoJnNtbXUtPmRldmljZXMsICZhcm1fc21tdV9k ZXZpY2VzKTsKPiArCXNwaW5fdW5sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOwo+ICAgCXJl dHVybiAwOwo+ICAgfQo+ICAgCj4gKy8qIFhlbjogVW51c2VkIGZ1bmN0aW9uICovCj4gKyNpZiAw Cj4gICBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiAgIHsKPiAgIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gQEAgLTI4NjAsNiArMzM2MCw4IEBAIHN0YXRpYyB2 b2lkIGFybV9zbW11X2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICAgewo+ICAgCWFybV9zbW11X2RldmljZV9yZW1vdmUocGRldik7Cj4gICB9Cj4gKyNlbmRp Zgo+ICsKPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtbXVf b2ZfbWF0Y2hbXSA9IHsKPiAgIAl7IC5jb21wYXRpYmxlID0gImFybSxzbW11LXYzIiwgfSwKPiBA QCAtMjg2Nyw2ICszMzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJt X3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPiAgIH07Cj4gICBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBh cm1fc21tdV9vZl9tYXRjaCk7Cj4gICAKPiArI2lmIDAKPiAgIHN0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGFybV9zbW11X2RyaXZlciA9IHsKPiAgIAkuZHJpdmVyCT0gewo+ICAgCQkubmFt ZQkJPSAiYXJtLXNtbXUtdjMiLAo+IEBAIC0yODgzLDMgKzMzODYsMzE4IEBAIElPTU1VX09GX0RF Q0xBUkUoYXJtX3NtbXV2MywgImFybSxzbW11LXYzIiwgTlVMTCk7Cj4gICBNT0RVTEVfREVTQ1JJ UFRJT04oIklPTU1VIEFQSSBmb3IgQVJNIGFyY2hpdGVjdGVkIFNNTVV2MyBpbXBsZW1lbnRhdGlv bnMiKTsKPiAgIE1PRFVMRV9BVVRIT1IoIldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29t PiIpOwo+ICAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICsjZW5kaWYKPiArCj4gKy8qKioq KiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KCkkgZ3Vlc3MgbW9zdCBvZiB0aGUg Y29kZSBiZWxvdyBpcyBjb3BpZWQgZnJvbSBzbW11LmM/Cgo+ICsKPiArc3RhdGljIGludCBfX211 c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKHN0cnVjdCBkb21haW4gKmQpCj4gK3sK PiArCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICpzbW11X2RvbWFpbiA9IGRvbV9pb21tdShk KS0+YXJjaC5wcml2Owo+ICsJc3RydWN0IGlvbW11X2RvbWFpbiAqY2ZnOwo+ICsKPiArCXNwaW5f bG9jaygmc21tdV9kb21haW4tPmxvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjZmcsICZz bW11X2RvbWFpbi0+aW9tbXVfZG9tYWlucywgbGlzdCkgewo+ICsJCS8qCj4gKwkJICogT25seSBp bnZhbGlkYXRlIHRoZSBjb250ZXh0IHdoZW4gU01NVSBpcyBwcmVzZW50Lgo+ICsJCSAqIFRoaXMg aXMgYmVjYXVzZSB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiBpcyBkZWxheWVkCj4gKwkJICog dW50aWwgYSBtYXN0ZXIgaGFzIGJlZW4gYWRkZWQuCj4gKwkJICovCj4gKwkJaWYgKHVubGlrZWx5 KCFBQ0NFU1NfT05DRShjZmctPnByaXYtPnNtbXUpKSkKPiArCQkJY29udGludWU7Cj4gKwkJYXJt X3NtbXVfdGxiX2ludl9jb250ZXh0KGNmZy0+cHJpdik7Cj4gKwl9Cj4gKwlzcGluX3VubG9jaygm c21tdV9kb21haW4tPmxvY2spOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg X19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoKHN0cnVjdCBkb21haW4gKmQsCj4gKwkJ CQkJICAgICB1bnNpZ25lZCBsb25nIGdmbiwKPiArCQkJCQkgICAgIHVuc2lnbmVkIGludCBwYWdl X2NvdW50KQo+ICt7Cj4gKwlyZXR1cm4gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZ2V0X2RvbWFpbihz dHJ1Y3QgZG9tYWluICpkLAo+ICsJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPiArCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWlu ICp4ZW5fZG9tYWluOwo+ICsJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPiArCXN0cnVj dCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluOwo+ICsKPiArCXhlbl9kb21haW4gPSBkb21f aW9tbXUoZCktPmFyY2gucHJpdjsKPiArCj4gKwlzbW11ID0gYXJtX3NtbXVfZ2V0X2J5X2Z3bm9k ZShkZXYtPmlvbW11X2Z3c3BlYy0+aW9tbXVfZndub2RlKTsKPiArCWlmICghc21tdSkKPiArCQly ZXR1cm4gTlVMTDsKPiArCj4gKwkvKgo+ICsJICogTG9vcCB0aHJvdWdoIHRoZSAmeGVuX2RvbWFp bi0+Y29udGV4dHMgdG8gbG9jYXRlIGEgY29udGV4dAo+ICsJICogYXNzaWduZWQgdG8gdGhpcyBT TU1VCj4gKwkgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmeGVuX2RvbWFpbi0+ aW9tbXVfZG9tYWlucywgbGlzdCkgewo+ICsJCXNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4o ZG9tYWluKTsKPiArCQlpZiAoc21tdV9kb21haW4tPnNtbXUgPT0gc21tdSkKPiArCQkJcmV0dXJu IGRvbWFpbjsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluKQo+ICt7Cj4gKwlsaXN0X2RlbCgmZG9tYWluLT5saXN0KTsKPiArCWFybV9zbW11X2RvbWFp bl9mcmVlKGRvbWFpbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfYXNzaWduX2Rl dihzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKPiArCQkJICAgICAgIHN0cnVjdCBkZXZpY2Ug KmRldiwgdTMyIGZsYWcpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluOwo+ICsJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47 Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICphcm1fc21tdTsKPiArCj4gKwl4ZW5fZG9tYWlu ID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJaWYgKCFkZXYtPmFyY2hkYXRhLmlv bW11KSB7Cj4gKwkJZGV2LT5hcmNoZGF0YS5pb21tdSA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11 X3hlbl9kZXZpY2UpOwo+ICsJCWlmICghZGV2LT5hcmNoZGF0YS5pb21tdSkKPiArCQkJcmV0dXJu IC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYXJtX3NtbXVfYWRkX2RldmljZShkZXYpOwo+ ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXNwaW5fbG9jaygmeGVuX2RvbWFp bi0+bG9jayk7Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21h aW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgeGVuIGRvbWFpbgo+ICsJICogdW5kZXIgdGhlIHNh bWUgU01NVQo+ICsJICovCj4gKwlkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7 Cj4gKwlpZiAoIWRvbWFpbikgewo+ICsKPiArCQlkb21haW4gPSBhcm1fc21tdV9kb21haW5fYWxs b2MoSU9NTVVfRE9NQUlOX0RNQSk7Cj4gKwkJaWYgKCFkb21haW4pIHsKPiArCQkJcmV0ID0gLUVO T01FTTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQlhcm1fc21tdSA9IHRvX3NtbXVf ZG9tYWluKGRvbWFpbik7Cj4gKwkJYXJtX3NtbXUtPnMyX2NmZy5kb21haW4gPSBkOwo+ICsKPiAr CQkvKiBDaGFpbiB0aGUgbmV3IGNvbnRleHQgdG8gdGhlIGRvbWFpbiAqLwo+ICsJCWxpc3RfYWRk KCZkb21haW4tPmxpc3QsICZ4ZW5fZG9tYWluLT5pb21tdV9kb21haW5zKTsKPiArCj4gKwl9Cj4g Kwo+ICsJcmV0ID0gYXJtX3NtbXVfYXR0YWNoX2Rldihkb21haW4sIGRldik7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJaWYgKGRvbWFpbi0+cmVmLmNvdW50ZXIgPT0gMCkKPiArCQkJYXJtX3NtbXVfZGVz dHJveV9pb21tdV9kb21haW4oZG9tYWluKTsKPiArCX0gZWxzZSB7Cj4gKwkJYXRvbWljX2luYygm ZG9tYWluLT5yZWYpOwo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJc3Bpbl91bmxvY2soJnhlbl9kb21h aW4tPmxvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcm1fc21t dV9kZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGRldmljZSAqZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQs IGRldik7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKPiArCXN0 cnVjdCBhcm1fc21tdV9kb21haW4gKmFybV9zbW11ID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsK PiArCj4gKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4gKwo+ICsJaWYg KCFhcm1fc21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiAhPSBkKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICIgbm90IGF0dGFjaGVkIHRvIGRvbWFpbiAlZFxuIiwgZC0+ZG9tYWluX2lkKTsKPiAr CQlyZXR1cm4gLUVTUkNIOwo+ICsJfQo+ICsKPiArCXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9j ayk7Cj4gKwo+ICsJYXJtX3NtbXVfZGV0YWNoX2RldihkZXYpOwo+ICsJYXRvbWljX2RlYygmZG9t YWluLT5yZWYpOwo+ICsKPiArCWlmIChkb21haW4tPnJlZi5jb3VudGVyID09IDApCj4gKwkJYXJt X3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsKPiArCj4gKwlzcGluX3VubG9jaygm eGVuX2RvbWFpbi0+bG9jayk7Cj4gKwo+ICsKPiArCgpDYW4geW91IGRyb3AgMiBvZiBuZXdsaW5l PwoKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFybV9zbW11X3JlYXNzaWdu X2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1Y3QgZG9tYWluICp0LAo+ICsJCQkJIHU4IGRldmZu LCAgc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkvKiBE b24ndCBhbGxvdyByZW1hcHBpbmcgb24gb3RoZXIgZG9tYWluIHRoYW4gaHdkb20gKi8KPiArCWlm ICh0ICYmIHQgIT0gaGFyZHdhcmVfZG9tYWluKQo+ICsJCXJldHVybiAtRVBFUk07Cj4gKwo+ICsJ aWYgKHQgPT0gcykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSBhcm1fc21tdV9kZWFzc2ln bl9kZXYocywgZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAo dCkgewo+ICsJCS8qIE5vIGZsYWdzIGFyZSBkZWZpbmVkIGZvciBBUk0uICovCj4gKwkJcmV0ID0g YXJtX3NtbXVfYXNzaWduX2Rldih0LCBkZXZmbiwgZGV2LCAwKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4gK3sKPiAr CXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOwo+ICsKPiArCXhlbl9kb21h aW4gPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluKTsKPiArCWlmICgheGVuX2Rv bWFpbikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmeGVuX2Rv bWFpbi0+bG9jayk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmeGVuX2RvbWFpbi0+aW9tbXVfZG9tYWlu cyk7Cj4gKwo+ICsJZG9tX2lvbW11KGQpLT5hcmNoLnByaXYgPSB4ZW5fZG9tYWluOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2h3ZG9tX2luaXQgYXJtX3NtbXVf aW9tbXVfaHdkb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFybV9zbW11X2lvbW11X2RvbWFpbl90ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKQo+ ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21t dShkKS0+YXJjaC5wcml2Owo+ICsKPiArCUFTU0VSVChsaXN0X2VtcHR5KCZ4ZW5fZG9tYWluLT5p b21tdV9kb21haW5zKSk7Cj4gKwl4ZnJlZSh4ZW5fZG9tYWluKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfbWFwX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgbG9uZyBnZm4sCj4gKwkJCXVuc2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBpbnQgZmxh Z3MpCj4gK3sKPiArCXAybV90eXBlX3QgdDsKPiArCj4gKwkvKgo+ICsJICogR3JhbnQgbWFwcGlu Z3MgY2FuIGJlIHVzZWQgZm9yIERNQSByZXF1ZXN0cy4gVGhlIGRldl9idXNfYWRkcgo+ICsJICog cmV0dXJuZWQgYnkgdGhlIGh5cGVyY2FsbCBpcyB0aGUgTUZOIChub3QgdGhlIElQQSkuIEZvciBk ZXZpY2UKPiArCSAqIHByb3RlY3RlZCBieSBhbiBJT01NVSwgWGVuIG5lZWRzIHRvIGFkZCBhIDE6 MSBtYXBwaW5nIGluIHRoZSBkb21haW4KPiArCSAqIHAybSB0byBhbGxvdyBETUEgcmVxdWVzdCB0 byB3b3JrLgo+ICsJICogVGhpcyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRvbWFpbiBpcyBkaXJl Y3RlZCBtYXBwZWQuIEhlbmNlIHRoaXMKPiArCSAqIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVz ZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgo+ICsJICovCj4gKwlCVUdfT04oIWlz X2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKPiArCUJVR19PTihtZm4gIT0gZ2ZuKTsKPiArCj4g KwkvKiBXZSBvbmx5IHN1cHBvcnQgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGZsYWdzICovCj4gKwlp ZiAoIShmbGFncyAmIChJT01NVUZfcmVhZGFibGUgfCBJT01NVUZfd3JpdGFibGUpKSkKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwl0ID0gKGZsYWdzICYgSU9NTVVGX3dyaXRhYmxlKSA/IHAy bV9pb21tdV9tYXBfcncgOiBwMm1faW9tbXVfbWFwX3JvOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUg ZnVuY3Rpb24gZ3Vlc3RfcGh5c21hcF9hZGRfZW50cnkgcmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFw cGluZwo+ICsJICogaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUuLi4KPiArCSAqLwo+ICsJcmV0dXJu IGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5KGQsIF9nZm4oZ2ZuKSwgX21mbihtZm4pLCAwLCB0KTsK PiArfQo+ICsKPiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfdW5tYXBfcGFnZShz dHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbikKPiArewo+ICsJLyoKPiArCSAqIFRo aXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBnbnR0YWIgY29kZSB3aGVuIHRoZSBk b21haW4KPiArCSAqIGlzIGRpcmVjdCBtYXBwZWQKPiArCSAqLwo+ICsJaWYgKCFpc19kb21haW5f ZGlyZWN0X21hcHBlZChkKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gZ3Vl c3RfcGh5c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4oZ2ZuKSwgMCk7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wcyA9 IHsKPiArCS5pbml0ID0gYXJtX3NtbXVfaW9tbXVfZG9tYWluX2luaXQsCj4gKwkuaHdkb21faW5p dCA9IGFybV9zbW11X2lvbW11X2h3ZG9tX2luaXQsCj4gKwkudGVhcmRvd24gPSBhcm1fc21tdV9p b21tdV9kb21haW5fdGVhcmRvd24sCj4gKwkuaW90bGJfZmx1c2ggPSBhcm1fc21tdV9pb3RsYl9m bHVzaCwKPiArCS5pb3RsYl9mbHVzaF9hbGwgPSBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwsCj4g KwkuYXNzaWduX2RldmljZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCj4gKwkucmVhc3NpZ25fZGV2 aWNlID0gYXJtX3NtbXVfcmVhc3NpZ25fZGV2LAo+ICsJLm1hcF9wYWdlID0gYXJtX3NtbXVfbWFw X3BhZ2UsCj4gKwkudW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2UsCj4gK307Cj4gKwo+ ICtzdGF0aWMKPiArc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9k ZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11ID0gTlVMTDsKPiArCj4gKwlzcGluX2xvY2soJmFybV9zbW11X2RldmljZXNf bG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNtbXUsICZhcm1fc21tdV9kZXZpY2VzLCBk ZXZpY2VzKSB7Cj4gKwkJaWYgKHNtbXUtPmRldi0+Zndub2RlID09IGZ3bm9kZSkKPiArCQkJYnJl YWs7Cj4gKwl9Cj4gKwlzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKPiArCj4g KwlyZXR1cm4gc21tdTsKPiArfQo+ICsKPiArc3RhdGljIF9faW5pdCBpbnQgYXJtX3NtbXVfZHRf aW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKmRldiwKPiArCQkJCSAgIGNvbnN0IHZvaWQgKmRh dGEpCj4gK3sKPiArCWludCByYzsKPiArCj4gKwkvKgo+ICsJICogRXZlbiBpZiB0aGUgZGV2aWNl IGNhbid0IGJlIGluaXRpYWxpemVkLCB3ZSBkb24ndCB3YW50IHRvCj4gKwkgKiBnaXZlIHRoZSBT TU1VIGRldmljZSB0byBkb20wLgo+ICsJICovCj4gKwlkdF9kZXZpY2Vfc2V0X3VzZWRfYnkoZGV2 LCBET01JRF9YRU4pOwo+ICsKPiArCXJjID0gYXJtX3NtbXVfZGV2aWNlX3Byb2JlKGR0X3RvX2Rl dihkZXYpKTsKPiArCWlmIChyYykKPiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJaW9tbXVfc2V0X29w cygmYXJtX3NtbXVfaW9tbXVfb3BzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArRFRf REVWSUNFX1NUQVJUKHNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNFX0lPTU1VKQo+ICsJLmR0 X21hdGNoID0gYXJtX3NtbXVfb2ZfbWF0Y2gsCj4gKwkuaW5pdCA9IGFybV9zbW11X2R0X2luaXQs Cj4gK0RUX0RFVklDRV9FTkQKPiArCj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ICsvKiBTZXQgdXAg dGhlIElPTU1VICovCj4gK3N0YXRpYyBpbnQgX19pbml0IGFybV9zbW11X2FjcGlfaW5pdChjb25z dCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJcmMgPSBhcm1fc21tdV9kZXZp Y2VfcHJvYmUoKHN0cnVjdCBkZXZpY2UgKilkYXRhKTsKPiArCWlmIChyYykKPiArCQlyZXR1cm4g cmM7Cj4gKwo+ICsJaW9tbXVfc2V0X29wcygmYXJtX3NtbXVfaW9tbXVfb3BzKTsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtBQ1BJX0RFVklDRV9TVEFSVChhc21tdXYzLCAiQVJNIFNNTVUgVjMi LCBERVZJQ0VfSU9NTVUpCj4gKwkuY2xhc3NfdHlwZSA9IEFDUElfSU9SVF9OT0RFX1NNTVVfVjMs Cj4gKwkuaW5pdCA9IGFybV9zbW11X2FjcGlfaW5pdCwKPiArQUNQSV9ERVZJQ0VfRU5ECj4gKwo+ ICsjZW5kaWYKPiAKCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=