From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM05-BY2-obe.outbound.protection.outlook.com (mail-eopbgr710072.outbound.protection.outlook.com [40.107.71.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2C02C21106F31 for ; Fri, 31 Aug 2018 01:04:48 -0700 (PDT) Subject: Re: [PATCH v5 01/13] PCI/P2PDMA: Support peer-to-peer memory References: <20180830185352.3369-1-logang@deltatee.com> <20180830185352.3369-2-logang@deltatee.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <2711b3a7-f582-0dda-8ac2-530be7bda1bb@amd.com> Date: Fri, 31 Aug 2018 10:04:29 +0200 MIME-Version: 1.0 In-Reply-To: <20180830185352.3369-2-logang@deltatee.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: Logan Gunthorpe , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, linux-rdma@vger.kernel.org, linux-nvdimm@lists.01.org, linux-block@vger.kernel.org Cc: Benjamin Herrenschmidt , Alex Williamson , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Jason Gunthorpe , Bjorn Helgaas , Max Gurtovoy , Christoph Hellwig List-ID: QW0gMzAuMDguMjAxOCB1bSAyMDo1MyBzY2hyaWViIExvZ2FuIEd1bnRob3JwZToKPiBTb21lIFBD SSBkZXZpY2VzIG1heSBoYXZlIG1lbW9yeSBtYXBwZWQgaW4gYSBCQVIgc3BhY2UgdGhhdCdzCj4g aW50ZW5kZWQgZm9yIHVzZSBpbiBwZWVyLXRvLXBlZXIgdHJhbnNhY3Rpb25zLiBJbiBvcmRlciB0 byBlbmFibGUKPiBzdWNoIHRyYW5zYWN0aW9ucyB0aGUgbWVtb3J5IG11c3QgYmUgcmVnaXN0ZXJl ZCB3aXRoIFpPTkVfREVWSUNFIHBhZ2VzCj4gc28gaXQgY2FuIGJlIHVzZWQgYnkgRE1BIGludGVy ZmFjZXMgaW4gZXhpc3RpbmcgZHJpdmVycy4KCldlIHdhbnQgdG8gdXNlIHRoYXQgZmVhdHVyZSB3 aXRob3V0IFpPTkVfREVWSUNFIHBhZ2VzIGZvciBETUEtYnVmIGFzIHdlbGwuCgpIb3cgaGFyZCB3 b3VsZCBpdCBiZSB0byBzZXBhcmF0ZSBlbmFibGluZyBQMlAgZGV0ZWN0aW9uIChlLmcuIGRpc3Rh bmNlIApiZXR3ZWVuIHR3byBkZXZpY2VzKSBmcm9tIHRoaXM/CgpSZWdhcmRzLApDaHJpc3RpYW4u Cgo+Cj4gQWRkIGFuIGludGVyZmFjZSBmb3Igb3RoZXIgc3Vic3lzdGVtcyB0byBmaW5kIGFuZCBh bGxvY2F0ZSBjaHVua3Mgb2YgUDJQCj4gbWVtb3J5IGFzIG5lY2Vzc2FyeSB0byBmYWNpbGl0YXRl IHRyYW5zZmVycyBiZXR3ZWVuIHR3byBQQ0kgcGVlcnM6Cj4KPiBpbnQgcGNpX3AycGRtYV9hZGRf Y2xpZW50KCk7Cj4gc3RydWN0IHBjaV9kZXYgKnBjaV9wMnBtZW1fZmluZCgpOwo+IHZvaWQgKnBj aV9hbGxvY19wMnBtZW0oKTsKPgo+IFRoZSBuZXcgaW50ZXJmYWNlIHJlcXVpcmVzIGEgZHJpdmVy IHRvIGNvbGxlY3QgYSBsaXN0IG9mIGNsaWVudCBkZXZpY2VzCj4gaW52b2x2ZWQgaW4gdGhlIHRy YW5zYWN0aW9uIHdpdGggdGhlIHBjaV9wMnBtZW1fYWRkX2NsaWVudCooKSBmdW5jdGlvbnMKPiB0 aGVuIGNhbGwgcGNpX3AycG1lbV9maW5kKCkgdG8gb2J0YWluIGFueSBzdWl0YWJsZSBQMlAgbWVt b3J5LiBPbmNlCj4gdGhpcyBpcyBkb25lIHRoZSBsaXN0IGlzIGJvdW5kIHRvIHRoZSBtZW1vcnkg YW5kIHRoZSBjYWxsaW5nIGRyaXZlciBpcwo+IGZyZWUgdG8gYWRkIGFuZCByZW1vdmUgY2xpZW50 cyBhcyBuZWNlc3NhcnkgKGFkZGluZyBpbmNvbXBhdGlibGUgY2xpZW50cwo+IHdpbGwgZmFpbCku IFdpdGggYSBzdWl0YWJsZSBwMnBtZW0gZGV2aWNlLCBtZW1vcnkgY2FuIHRoZW4gYmUKPiBhbGxv Y2F0ZWQgd2l0aCBwY2lfYWxsb2NfcDJwbWVtKCkgZm9yIHVzZSBpbiBETUEgdHJhbnNhY3Rpb25z Lgo+Cj4gRGVwZW5kaW5nIG9uIGhhcmR3YXJlLCB1c2luZyBwZWVyLXRvLXBlZXIgbWVtb3J5IG1h eSByZWR1Y2UgdGhlIGJhbmR3aWR0aAo+IG9mIHRoZSB0cmFuc2ZlciBidXQgY2FuIHNpZ25pZmlj YW50bHkgcmVkdWNlIHByZXNzdXJlIG9uIHN5c3RlbSBtZW1vcnkuCj4gVGhpcyBtYXkgYmUgZGVz aXJhYmxlIGluIG1hbnkgY2FzZXM6IGZvciBleGFtcGxlIGEgc3lzdGVtIGNvdWxkIGJlIGRlc2ln bmVkCj4gd2l0aCBhIHNtYWxsIENQVSBjb25uZWN0ZWQgdG8gYSBQQ0llIHN3aXRjaCBieSBhIHNt YWxsIG51bWJlciBvZiBsYW5lcwo+IHdoaWNoIHdvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2Yg bGFuZXMgYXZhaWxhYmxlIHRvIGNvbm5lY3QgdG8gTlZNZQo+IGRldmljZXMuCj4KPiBUaGUgY29k ZSBpcyBkZXNpZ25lZCB0byBvbmx5IHV0aWxpemUgdGhlIHAycG1lbSBkZXZpY2UgaWYgYWxsIHRo ZSBkZXZpY2VzCj4gaW52b2x2ZWQgaW4gYSB0cmFuc2ZlciBhcmUgYmVoaW5kIHRoZSBzYW1lIFBD SSBicmlkZ2UuIFRoaXMgaXMgYmVjYXVzZSB3ZQo+IGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hl dGhlciBwZWVyLXRvLXBlZXIgcm91dGluZyBiZXR3ZWVuIFBDSWUgUm9vdCBQb3J0cwo+IGlzIHN1 cHBvcnRlZCAoUENJZSByNC4wLCBzZWMgMS4zLjEpLiBBZGRpdGlvbmFsbHksIHRoZSBiZW5lZml0 cyBvZiBQMlAKPiB0cmFuc2ZlcnMgdGhhdCBnbyB0aHJvdWdoIHRoZSBSQyBpcyBsaW1pdGVkIHRv IG9ubHkgcmVkdWNpbmcgRFJBTSB1c2FnZQo+IGFuZCwgaW4gc29tZSBjYXNlcywgY29kaW5nIGNv bnZlbmllbmNlLiBUaGUgUENJLVNJRyBtYXkgYmUgZXhwbG9yaW5nCj4gYWRkaW5nIGEgbmV3IGNh cGFiaWxpdHkgYml0IHRvIGFkdmVydGlzZSB3aGV0aGVyIHRoaXMgaXMgcG9zc2libGUgZm9yCj4g ZnV0dXJlIGhhcmR3YXJlLgo+Cj4gVGhpcyBjb21taXQgaW5jbHVkZXMgc2lnbmlmaWNhbnQgcmV3 b3JrIGFuZCBmZWVkYmFjayBmcm9tIENocmlzdG9waAo+IEhlbGx3aWcuCj4KPiBTaWduZWQtb2Zm LWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KPiBTaWduZWQtb2ZmLWJ5OiBMb2dh biBHdW50aG9ycGUgPGxvZ2FuZ0BkZWx0YXRlZS5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL3BjaS9L Y29uZmlnICAgICAgICB8ICAxNyArCj4gICBkcml2ZXJzL3BjaS9NYWtlZmlsZSAgICAgICB8ICAg MSArCj4gICBkcml2ZXJzL3BjaS9wMnBkbWEuYyAgICAgICB8IDc2MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGluY2x1ZGUvbGludXgvbWVtcmVtYXAu aCAgIHwgICA1ICsKPiAgIGluY2x1ZGUvbGludXgvbW0uaCAgICAgICAgIHwgIDE4ICsrCj4gICBp bmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaCB8IDEwMiArKysrKysKPiAgIGluY2x1ZGUvbGludXgv cGNpLmggICAgICAgIHwgICA0ICsKPiAgIDcgZmlsZXMgY2hhbmdlZCwgOTA4IGluc2VydGlvbnMo KykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9wMnBkbWEuYwo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCj4KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKPiBpbmRleCA1NmZmOGY2 ZDMxZmMuLmRlYjY4YmU0ZmRhYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCj4g KysrIGIvZHJpdmVycy9wY2kvS2NvbmZpZwo+IEBAIC0xMzIsNiArMTMyLDIzIEBAIGNvbmZpZyBQ Q0lfUEFTSUQKPiAgIAo+ICAgCSAgSWYgdW5zdXJlLCBzYXkgTi4KPiAgIAo+ICtjb25maWcgUENJ X1AyUERNQQo+ICsJYm9vbCAiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0Igo+ICsJ ZGVwZW5kcyBvbiBQQ0kgJiYgWk9ORV9ERVZJQ0UKPiArCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRP Ugo+ICsJaGVscAo+ICsJICBFbmFibGXRlSBkcml2ZXJzIHRvIGRvIFBDSSBwZWVyLXRvLXBlZXIg dHJhbnNhY3Rpb25zIHRvIGFuZCBmcm9tCj4gKwkgIEJBUnMgdGhhdCBhcmUgZXhwb3NlZCBpbiBv dGhlciBkZXZpY2VzIHRoYXQgYXJlIHRoZSBwYXJ0IG9mCj4gKwkgIHRoZSBoaWVyYXJjaHkgd2hl cmUgcGVlci10by1wZWVyIERNQSBpcyBndWFyYW50ZWVkIGJ5IHRoZSBQQ0kKPiArCSAgc3BlY2lm aWNhdGlvbiB0byB3b3JrIChpZS4gYW55dGhpbmcgYmVsb3cgYSBzaW5nbGUgUENJIGJyaWRnZSku Cj4gKwo+ICsJICBNYW55IFBDSWUgcm9vdCBjb21wbGV4ZXMgZG8gbm90IHN1cHBvcnQgUDJQIHRy YW5zYWN0aW9ucyBhbmQKPiArCSAgaXQncyBoYXJkIHRvIHRlbGwgd2hpY2ggc3VwcG9ydCBpdCBh dCBhbGwsIHNvIGF0IHRoaXMgdGltZSwKPiArCSAgUDJQIERNQSB0cmFuc2F0aW9ucyBtdXN0IGJl IGJldHdlZW4gZGV2aWNlcyBiZWhpbmQgdGhlIHNhbWUgcm9vdAo+ICsJICBwb3J0Lgo+ICsKPiAr CSAgSWYgdW5zdXJlLCBzYXkgTi4KPiArCj4gICBjb25maWcgUENJX0xBQkVMCj4gICAJZGVmX2Jv b2wgeSBpZiAoRE1JIHx8IEFDUEkpCj4gICAJZGVwZW5kcyBvbiBQQ0kKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQo+IGluZGV4IDFiMmNm ZTUxZThkNy4uODVmNGE3MDNiMmJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxl Cj4gKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKPiBAQCAtMjYsNiArMjYsNyBAQCBvYmotJChD T05GSUdfUENJX1NZU0NBTEwpCSs9IHN5c2NhbGwubwo+ICAgb2JqLSQoQ09ORklHX1BDSV9TVFVC KQkJKz0gcGNpLXN0dWIubwo+ICAgb2JqLSQoQ09ORklHX1BDSV9QRl9TVFVCKQkrPSBwY2ktcGYt c3R1Yi5vCj4gICBvYmotJChDT05GSUdfUENJX0VDQU0pCQkrPSBlY2FtLm8KPiArb2JqLSQoQ09O RklHX1BDSV9QMlBETUEpCSs9IHAycGRtYS5vCj4gICBvYmotJChDT05GSUdfWEVOX1BDSURFVl9G Uk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm8KPiAgIAo+ICAgIyBFbmRwb2ludCBsaWJyYXJ5IG11 c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2Vycwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjg4YWFlYzUzNTFjZAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL3BjaS9wMnBkbWEuYwo+IEBAIC0wLDAgKzEsNzYxIEBACj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFBDSSBQZWVyIDIgUGVlciBE TUEgc3VwcG9ydC4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIExvZ2FuIEd1 bnRob3JwZQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgTWljcm9zZW1pIENvcnBvcmF0 aW9uCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWcKPiArICogQ29w eXJpZ2h0IChjKSAyMDE4LCBFaWRldGljb20gSW5jLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJf Zm10KGZtdCkgInBjaS1wMnBkbWE6ICIgZm10Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1h Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tZW1y ZW1hcC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGVyY3B1LXJlZmNvdW50Lmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9yYW5kb20uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9idWYuaD4KPiArCj4gK3N0 cnVjdCBwY2lfcDJwZG1hIHsKPiArCXN0cnVjdCBwZXJjcHVfcmVmIGRldm1hcF9yZWY7Cj4gKwlz dHJ1Y3QgY29tcGxldGlvbiBkZXZtYXBfcmVmX2RvbmU7Cj4gKwlzdHJ1Y3QgZ2VuX3Bvb2wgKnBv b2w7Cj4gKwlib29sIHAycG1lbV9wdWJsaXNoZWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBw Y2lfcDJwZG1hX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCj4gK3sKPiAr CXN0cnVjdCBwY2lfcDJwZG1hICpwMnAgPQo+ICsJCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBw Y2lfcDJwZG1hLCBkZXZtYXBfcmVmKTsKPiArCj4gKwljb21wbGV0ZV9hbGwoJnAycC0+ZGV2bWFw X3JlZl9kb25lKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGNpX3AycGRtYV9wZXJjcHVfa2ls bCh2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmID0gZGF0YTsKPiAr Cj4gKwlpZiAocGVyY3B1X3JlZl9pc19keWluZyhyZWYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlw ZXJjcHVfcmVmX2tpbGwocmVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGNpX3AycGRtYV9y ZWxlYXNlKHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGF0YTsK PiArCj4gKwlpZiAoIXBkZXYtPnAycGRtYSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJd2FpdF9mb3Jf Y29tcGxldGlvbigmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmX2RvbmUpOwo+ICsJcGVyY3B1X3Jl Zl9leGl0KCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYpOwo+ICsKPiArCWdlbl9wb29sX2Rlc3Ry b3kocGRldi0+cDJwZG1hLT5wb29sKTsKPiArCXBkZXYtPnAycGRtYSA9IE5VTEw7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgcGNpX3AycGRtYV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiAr ewo+ICsJaW50IGVycm9yID0gLUVOT01FTTsKPiArCXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7Cj4g Kwo+ICsJcDJwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tF Uk5FTCk7Cj4gKwlpZiAoIXAycCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlwMnAtPnBv b2wgPSBnZW5fcG9vbF9jcmVhdGUoUEFHRV9TSElGVCwgZGV2X3RvX25vZGUoJnBkZXYtPmRldikp Owo+ICsJaWYgKCFwMnAtPnBvb2wpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJaW5pdF9jb21wbGV0 aW9uKCZwMnAtPmRldm1hcF9yZWZfZG9uZSk7Cj4gKwllcnJvciA9IHBlcmNwdV9yZWZfaW5pdCgm cDJwLT5kZXZtYXBfcmVmLAo+ICsJCQlwY2lfcDJwZG1hX3BlcmNwdV9yZWxlYXNlLCAwLCBHRlBf S0VSTkVMKTsKPiArCWlmIChlcnJvcikKPiArCQlnb3RvIG91dF9wb29sX2Rlc3Ryb3k7Cj4gKwo+ ICsJcGVyY3B1X3JlZl9zd2l0Y2hfdG9fYXRvbWljX3N5bmMoJnAycC0+ZGV2bWFwX3JlZik7Cj4g Kwo+ICsJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJnBkZXYtPmRldiwgcGNpX3Ay cGRtYV9yZWxlYXNlLCBwZGV2KTsKPiArCWlmIChlcnJvcikKPiArCQlnb3RvIG91dF9wb29sX2Rl c3Ryb3k7Cj4gKwo+ICsJcGRldi0+cDJwZG1hID0gcDJwOwo+ICsKPiArCXJldHVybiAwOwo+ICsK PiArb3V0X3Bvb2xfZGVzdHJveToKPiArCWdlbl9wb29sX2Rlc3Ryb3kocDJwLT5wb29sKTsKPiAr b3V0Ogo+ICsJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwMnApOwo+ICsJcmV0dXJuIGVycm9yOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogcGNpX3AycGRtYV9hZGRfcmVzb3VyY2UgLSBhZGQgbWVtb3J5 IGZvciB1c2UgYXMgcDJwIG1lbW9yeQo+ICsgKiBAcGRldjogdGhlIGRldmljZSB0byBhZGQgdGhl IG1lbW9yeSB0bwo+ICsgKiBAYmFyOiBQQ0kgQkFSIHRvIGFkZAo+ICsgKiBAc2l6ZTogc2l6ZSBv ZiB0aGUgbWVtb3J5IHRvIGFkZCwgbWF5IGJlIHplcm8gdG8gdXNlIHRoZSB3aG9sZSBCQVIKPiAr ICogQG9mZnNldDogb2Zmc2V0IGludG8gdGhlIFBDSSBCQVIKPiArICoKPiArICogVGhlIG1lbW9y eSB3aWxsIGJlIGdpdmVuIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyBzbyB0aGF0IGl0IG1heQo+ ICsgKiBiZSB1c2VkIHdpdGggYW55IERNQSByZXF1ZXN0Lgo+ICsgKi8KPiAraW50IHBjaV9wMnBk bWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6 ZSwKPiArCQkJICAgIHU2NCBvZmZzZXQpCj4gK3sKPiArCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdt YXA7Cj4gKwl2b2lkICphZGRyOwo+ICsJaW50IGVycm9yOwo+ICsKPiArCWlmICghKHBjaV9yZXNv dXJjZV9mbGFncyhwZGV2LCBiYXIpICYgSU9SRVNPVVJDRV9NRU0pKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCWlmIChvZmZzZXQgPj0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghc2l6ZSkKPiArCQlzaXplID0gcGNpX3Jl c291cmNlX2xlbihwZGV2LCBiYXIpIC0gb2Zmc2V0Owo+ICsKPiArCWlmIChzaXplICsgb2Zmc2V0 ID4gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCWlmICghcGRldi0+cDJwZG1hKSB7Cj4gKwkJZXJyb3IgPSBwY2lfcDJwZG1hX3NldHVwKHBk ZXYpOwo+ICsJCWlmIChlcnJvcikKPiArCQkJcmV0dXJuIGVycm9yOwo+ICsJfQo+ICsKPiArCXBn bWFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGdtYXApLCBHRlBfS0VSTkVM KTsKPiArCWlmICghcGdtYXApCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcGdtYXAtPnJl cy5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0Owo+ICsJcGdt YXAtPnJlcy5lbmQgPSBwZ21hcC0+cmVzLnN0YXJ0ICsgc2l6ZSAtIDE7Cj4gKwlwZ21hcC0+cmVz LmZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcik7Cj4gKwlwZ21hcC0+cmVmID0g JnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZjsKPiArCXBnbWFwLT50eXBlID0gTUVNT1JZX0RFVklD RV9QQ0lfUDJQRE1BOwo+ICsKPiArCWFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKCZwZGV2LT5k ZXYsIHBnbWFwKTsKPiArCWlmIChJU19FUlIoYWRkcikpIHsKPiArCQllcnJvciA9IFBUUl9FUlIo YWRkcik7Cj4gKwkJZ290byBwZ21hcF9mcmVlOwo+ICsJfQo+ICsKPiArCWVycm9yID0gZ2VuX3Bv b2xfYWRkX3ZpcnQocGRldi0+cDJwZG1hLT5wb29sLCAodW5zaWduZWQgbG9uZylhZGRyLAo+ICsJ CQlwY2lfYnVzX2FkZHJlc3MocGRldiwgYmFyKSArIG9mZnNldCwKPiArCQkJcmVzb3VyY2Vfc2l6 ZSgmcGdtYXAtPnJlcyksIGRldl90b19ub2RlKCZwZGV2LT5kZXYpKTsKPiArCWlmIChlcnJvcikK PiArCQlnb3RvIHBnbWFwX2ZyZWU7Cj4gKwo+ICsJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3Jf cmVzZXQoJnBkZXYtPmRldiwgcGNpX3AycGRtYV9wZXJjcHVfa2lsbCwKPiArCQkJCQkgICZwZGV2 LT5wMnBkbWEtPmRldm1hcF9yZWYpOwo+ICsJaWYgKGVycm9yKQo+ICsJCWdvdG8gcGdtYXBfZnJl ZTsKPiArCj4gKwlwY2lfaW5mbyhwZGV2LCAiYWRkZWQgcGVlci10by1wZWVyIERNQSBtZW1vcnkg JXBSXG4iLAo+ICsJCSAmcGdtYXAtPnJlcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtwZ21h cF9mcmVlOgo+ICsJZGV2cmVzX2ZyZWUocGdtYXApOwo+ICsJcmV0dXJuIGVycm9yOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgcGNpX2RldiAqZmluZF9wYXJlbnRfcGNpX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKPiArCj4gKwlkZXYgPSBnZXRfZGV2aWNl KGRldik7Cj4gKwo+ICsJd2hpbGUgKGRldikgewo+ICsJCWlmIChkZXZfaXNfcGNpKGRldikpCj4g KwkJCXJldHVybiB0b19wY2lfZGV2KGRldik7Cj4gKwo+ICsJCXBhcmVudCA9IGdldF9kZXZpY2Uo ZGV2LT5wYXJlbnQpOwo+ICsJCXB1dF9kZXZpY2UoZGV2KTsKPiArCQlkZXYgPSBwYXJlbnQ7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gKy8qCj4gKyAqIENoZWNrIGlmIGEg UENJIGJyaWRnZSBoYXMgaXQncyBBQ1MgcmVkaXJlY3Rpb24gYml0cyBzZXQgdG8gcmVkaXJlY3Qg UDJQCj4gKyAqIFRMUHMgdXBzdHJlYW0gdmlhIEFDUy4gUmV0dXJucyAxIGlmIHRoZSBwYWNrZXRz IHdpbGwgYmUgcmVkaXJlY3RlZAo+ICsgKiB1cHN0cmVhbSwgMCBvdGhlcndpc2UuCj4gKyAqLwo+ ICtzdGF0aWMgaW50IHBjaV9icmlkZ2VfaGFzX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2 KQo+ICt7Cj4gKwlpbnQgcG9zOwo+ICsJdTE2IGN0cmw7Cj4gKwo+ICsJcG9zID0gcGNpX2ZpbmRf ZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BQ1MpOwo+ICsJaWYgKCFwb3MpCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lf QUNTX0NUUkwsICZjdHJsKTsKPiArCj4gKwlpZiAoY3RybCAmIChQQ0lfQUNTX1JSIHwgUENJX0FD U19DUiB8IFBDSV9BQ1NfRUMpKQo+ICsJCXJldHVybiAxOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXFfYnVmX3ByaW50X2J1c19kZXZmbihzdHJ1Y3Qgc2VxX2J1 ZiAqYnVmLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQo+ICt7Cj4gKwlpZiAoIWJ1ZikKPiArCQlyZXR1 cm47Cj4gKwo+ICsJc2VxX2J1Zl9wcmludGYoYnVmLCAiJTA0eDolMDJ4OiUwMnguJXg7IiwgcGNp X2RvbWFpbl9ucihkZXYtPmJ1cyksCj4gKwkJICAgICAgIGRldi0+YnVzLT5udW1iZXIsIFBDSV9T TE9UKGRldi0+ZGV2Zm4pLAo+ICsJCSAgICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7Cj4gK30K PiArCj4gKy8qCj4gKyAqIEZpbmQgdGhlIGRpc3RhbmNlIHRocm91Z2ggdGhlIG5lYXJlc3QgY29t bW9uIHVwc3RyZWFtIGJyaWRnZSBiZXR3ZWVuCj4gKyAqIHR3byBQQ0kgZGV2aWNlcy4KPiArICoK PiArICogSWYgdGhlIHR3byBkZXZpY2VzIGFyZSB0aGUgc2FtZSBkZXZpY2UgdGhlbiAwIHdpbGwg YmUgcmV0dXJuZWQuCj4gKyAqCj4gKyAqIElmIHRoZXJlIGFyZSB0d28gdmlydHVhbCBmdW5jdGlv bnMgb2YgdGhlIHNhbWUgZGV2aWNlIGJlaGluZCB0aGUgc2FtZQo+ICsgKiBicmlkZ2UgcG9ydCB0 aGVuIDIgd2lsbCBiZSByZXR1cm5lZCAob25lIHN0ZXAgZG93biB0byB0aGUgUENJZSBzd2l0Y2gs Cj4gKyAqIHRoZW4gb25lIHN0ZXAgYmFjayB0byB0aGUgc2FtZSBkZXZpY2UpLgo+ICsgKgo+ICsg KiBJbiB0aGUgY2FzZSB3aGVyZSB0d28gZGV2aWNlcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1l IFBDSWUgc3dpdGNoLCB0aGUKPiArICogdmFsdWUgNCB3aWxsIGJlIHJldHVybmVkLiBUaGlzIGNv cnJlc3BvbmRzIHRvIHRoZSBmb2xsb3dpbmcgUENJIHRyZWU6Cj4gKyAqCj4gKyAqICAgICAtKyAg Um9vdCBQb3J0Cj4gKyAqICAgICAgXCsgU3dpdGNoIFVwc3RyZWFtIFBvcnQKPiArICogICAgICAg Ky0rIFN3aXRjaCBEb3duc3RyZWFtIFBvcnQKPiArICogICAgICAgKyBcLSBEZXZpY2UgQQo+ICsg KiAgICAgICBcLSsgU3dpdGNoIERvd25zdHJlYW0gUG9ydAo+ICsgKiAgICAgICAgIFwtIERldmlj ZSBCCj4gKyAqCj4gKyAqIFRoZSBkaXN0YW5jZSBpcyA0IGJlY2F1c2Ugd2UgdHJhdmVyc2UgZnJv bSBEZXZpY2UgQSB0aHJvdWdoIHRoZSBkb3duc3RyZWFtCj4gKyAqIHBvcnQgb2YgdGhlIHN3aXRj aCwgdG8gdGhlIGNvbW1vbiB1cHN0cmVhbSBwb3J0LCBiYWNrIHVwIHRvIHRoZSBzZWNvbmQKPiAr ICogZG93bnN0cmVhbSBwb3J0IGFuZCB0aGVuIHRvIERldmljZSBCLgo+ICsgKgo+ICsgKiBBbnkg dHdvIGRldmljZXMgdGhhdCBkb24ndCBoYXZlIGEgY29tbW9uIHVwc3RyZWFtIGJyaWRnZSB3aWxs IHJldHVybiAtMS4KPiArICogSW4gdGhpcyB3YXkgZGV2aWNlcyBvbiBzZXBhcmF0ZSBQQ0llIHJv b3QgcG9ydHMgd2lsbCBiZSByZWplY3RlZCwgd2hpY2gKPiArICogaXMgd2hhdCB3ZSB3YW50IGZv ciBwZWVyLXRvLXBlZXIgc2VlaW5nIGVhY2ggUENJZSByb290IHBvcnQgZGVmaW5lcyBhCj4gKyAq IHNlcGFyYXRlIGhpZXJhcmNoeSBkb21haW4gYW5kIHRoZXJlJ3Mgbm8gd2F5IHRvIGRldGVybWlu ZSB3aGV0aGVyIHRoZSByb290Cj4gKyAqIGNvbXBsZXggc3VwcG9ydHMgZm9yd2FyZGluZyBiZXR3 ZWVuIHRoZW0uCj4gKyAqCj4gKyAqIEluIHRoZSBjYXNlIHdoZXJlIHR3byBkZXZpY2VzIGFyZSBj b25uZWN0ZWQgdG8gZGlmZmVyZW50IFBDSWUgc3dpdGNoZXMsCj4gKyAqIHRoaXMgZnVuY3Rpb24g d2lsbCBzdGlsbCByZXR1cm4gYSBwb3NpdGl2ZSBkaXN0YW5jZSBhcyBsb25nIGFzIGJvdGgKPiAr ICogc3dpdGNoZXMgZXZlbnV0YWxseSBoYXZlIGEgY29tbW9uIHVwc3RyZWFtIGJyaWRnZS4gTm90 ZSB0aGlzIGNvdmVycwo+ICsgKiB0aGUgY2FzZSBvZiB1c2luZyBtdWx0aXBsZSBQQ0llIHN3aXRj aGVzIHRvIGFjaGlldmUgYSBkZXNpcmVkIGxldmVsIG9mCj4gKyAqIGZhbi1vdXQgZnJvbSBhIHJv b3QgcG9ydC4gVGhlIGV4YWN0IGRpc3RhbmNlIHdpbGwgYmUgYSBmdW5jdGlvbiBvZiB0aGUKPiAr ICogbnVtYmVyIG9mIHN3aXRjaGVzIGJldHdlZW4gRGV2aWNlIEEgYW5kIERldmljZSBCLgo+ICsg Kgo+ICsgKiBJZiBhIGJyaWRnZSB3aGljaCBoYXMgYW55IEFDUyByZWRpcmVjdGlvbiBiaXRzIHNl dCBpcyBpbiB0aGUgcGF0aAo+ICsgKiB0aGVuIHRoaXMgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIC0y LiBUaGlzIGlzIHNvIHdlIHJlamVjdCBhbnkKPiArICogY2FzZXMgd2hlcmUgdGhlIFRMUHMgYXJl IGZvcndhcmRlZCB1cCBpbnRvIHRoZSByb290IGNvbXBsZXguCj4gKyAqIEluIHRoaXMgY2FzZSwg YSBsaXN0IG9mIGFsbCBpbmZyaW5naW5nIGJyaWRnZSBhZGRyZXNzZXMgd2lsbCBiZQo+ICsgKiBw b3B1bGF0ZWQgaW4gYWNzX2xpc3QgKGFzc3VtaW5nIGl0J3Mgbm9uLW51bGwpIGZvciBwcmludGsg cHVycG9zZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5jZShz dHJ1Y3QgcGNpX2RldiAqYSwKPiArCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqYiwKPiArCQkJCSAg ICBzdHJ1Y3Qgc2VxX2J1ZiAqYWNzX2xpc3QpCj4gK3sKPiArCWludCBkaXN0X2EgPSAwOwo+ICsJ aW50IGRpc3RfYiA9IDA7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqYmIgPSBOVUxMOwo+ICsJaW50IGFj c19jbnQgPSAwOwo+ICsKPiArCS8qCj4gKwkgKiBOb3RlLCB3ZSBkb24ndCBuZWVkIHRvIHRha2Ug cmVmZXJlbmNlcyB0byBkZXZpY2VzIHJldHVybmVkIGJ5Cj4gKwkgKiBwY2lfdXBzdHJlYW1fYnJp ZGdlKCkgc2VlaW5nIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjaGlsZAo+ICsJICogZGV2aWNl IHdoaWNoIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSB1cHN0cmVhbSBicmlk Z2UuCj4gKwkgKi8KPiArCj4gKwl3aGlsZSAoYSkgewo+ICsJCWRpc3RfYiA9IDA7Cj4gKwo+ICsJ CWlmIChwY2lfYnJpZGdlX2hhc19hY3NfcmVkaXIoYSkpIHsKPiArCQkJc2VxX2J1Zl9wcmludF9i dXNfZGV2Zm4oYWNzX2xpc3QsIGEpOwo+ICsJCQlhY3NfY250Kys7Cj4gKwkJfQo+ICsKPiArCQli YiA9IGI7Cj4gKwo+ICsJCXdoaWxlIChiYikgewo+ICsJCQlpZiAoYSA9PSBiYikKPiArCQkJCWdv dG8gY2hlY2tfYl9wYXRoX2FjczsKPiArCj4gKwkJCWJiID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShi Yik7Cj4gKwkJCWRpc3RfYisrOwo+ICsJCX0KPiArCj4gKwkJYSA9IHBjaV91cHN0cmVhbV9icmlk Z2UoYSk7Cj4gKwkJZGlzdF9hKys7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC0xOwo+ICsKPiArY2hl Y2tfYl9wYXRoX2FjczoKPiArCWJiID0gYjsKPiArCj4gKwl3aGlsZSAoYmIpIHsKPiArCQlpZiAo YSA9PSBiYikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlmIChwY2lfYnJpZGdlX2hhc19hY3NfcmVk aXIoYmIpKSB7Cj4gKwkJCXNlcV9idWZfcHJpbnRfYnVzX2RldmZuKGFjc19saXN0LCBiYik7Cj4g KwkJCWFjc19jbnQrKzsKPiArCQl9Cj4gKwo+ICsJCWJiID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShi Yik7Cj4gKwl9Cj4gKwo+ICsJaWYgKGFjc19jbnQpCj4gKwkJcmV0dXJuIC0yOwo+ICsKPiArCXJl dHVybiBkaXN0X2EgKyBkaXN0X2I7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdXBzdHJlYW1fYnJp ZGdlX2Rpc3RhbmNlX3dhcm4oc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLAo+ICsJCQkJCSBzdHJ1 Y3QgcGNpX2RldiAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3Qgc2VxX2J1ZiBhY3NfbGlzdDsKPiAr CWludCByZXQ7Cj4gKwo+ICsJc2VxX2J1Zl9pbml0KCZhY3NfbGlzdCwga21hbGxvYyhQQUdFX1NJ WkUsIEdGUF9LRVJORUwpLCBQQUdFX1NJWkUpOwo+ICsKPiArCXJldCA9IHVwc3RyZWFtX2JyaWRn ZV9kaXN0YW5jZShwcm92aWRlciwgY2xpZW50LCAmYWNzX2xpc3QpOwo+ICsJaWYgKHJldCA9PSAt Mikgewo+ICsJCXBjaV93YXJuKGNsaWVudCwgImNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBl ZXIgRE1BIGFzIEFDUyByZWRpcmVjdCBpcyBzZXQgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBwcm92 aWRlclxuIik7Cj4gKwkJLyogRHJvcCBmaW5hbCBzZW1pY29sb24gKi8KPiArCQlhY3NfbGlzdC5i dWZmZXJbYWNzX2xpc3QubGVuLTFdID0gMDsKPiArCQlwY2lfd2FybihjbGllbnQsICJ0byBkaXNh YmxlIEFDUyByZWRpcmVjdCBmb3IgdGhpcyBwYXRoLCBhZGQgdGhlIGtlcm5lbCBwYXJhbWV0ZXI6 IHBjaT1kaXNhYmxlX2Fjc19yZWRpcj0lc1xuIiwKPiArCQkJIGFjc19saXN0LmJ1ZmZlcik7Cj4g Kwo+ICsJfSBlbHNlIGlmIChyZXQgPCAwKSB7Cj4gKwkJcGNpX3dhcm4oY2xpZW50LCAiY2Fubm90 IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciBETUEgYXMgdGhlIGNsaWVudCBhbmQgcHJvdmlkZXIg ZG8gbm90IHNoYXJlIGFuIHVwc3RyZWFtIGJyaWRnZVxuIik7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUo YWNzX2xpc3QuYnVmZmVyKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg cGNpX3AycGRtYV9jbGllbnQgewo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJc3RydWN0 IHBjaV9kZXYgKmNsaWVudDsKPiArCXN0cnVjdCBwY2lfZGV2ICpwcm92aWRlcjsKPiArfTsKPiAr Cj4gKy8qKgo+ICsgKiBwY2lfcDJwZG1hX2FkZF9jbGllbnQgLSBhbGxvY2F0ZSBhIG5ldyBlbGVt ZW50IGluIGEgY2xpZW50IGRldmljZSBsaXN0Cj4gKyAqIEBoZWFkOiBsaXN0IGhlYWQgb2YgcDJw ZG1hIGNsaWVudHMKPiArICogQGRldjogZGV2aWNlIHRvIGFkZCB0byB0aGUgbGlzdAo+ICsgKgo+ ICsgKiBUaGlzIGFkZHMgQGRldiB0byBhIGxpc3Qgb2YgY2xpZW50cyB1c2VkIGJ5IGEgcDJwZG1h IGRldmljZS4KPiArICogVGhpcyBsaXN0IHNob3VsZCBiZSBwYXNzZWQgdG8gcGNpX3AycG1lbV9m aW5kKCkuIE9uY2UgcGNpX3AycG1lbV9maW5kKCkgaGFzCj4gKyAqIGJlZW4gY2FsbGVkIHN1Y2Nl c3NmdWxseSwgdGhlIGxpc3Qgd2lsbCBiZSBib3VuZCB0byBhIHNwZWNpZmljIHAycGRtYQo+ICsg KiBkZXZpY2UgYW5kIG5ldyBjbGllbnRzIGNhbiBvbmx5IGJlIGFkZGVkIHRvIHRoZSBsaXN0IGlm IHRoZXkgYXJlCj4gKyAqIHN1cHBvcnRlZCBieSB0aGF0IHAycGRtYSBkZXZpY2UuCj4gKyAqCj4g KyAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGxvY2sgd2hpY2ggcHJvdGVjdHMg QGhlYWQgYXMgbmVjZXNzYXJ5Cj4gKyAqIHNvIHRoYXQgbm9uZSBvZiB0aGUgcGNpX3AycCBmdW5j dGlvbnMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKPiArICogb24gdGhhdCBsaXN0Lgo+ICsg Kgo+ICsgKiBSZXR1cm5zIDAgaWYgdGhlIGNsaWVudCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgo+ ICsgKi8KPiAraW50IHBjaV9wMnBkbWFfYWRkX2NsaWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFk LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAq aXRlbSwgKm5ld19pdGVtOwo+ICsJc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyID0gTlVMTDsKPiAr CXN0cnVjdCBwY2lfZGV2ICpjbGllbnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChJU19FTkFC TEVEKENPTkZJR19ETUFfVklSVF9PUFMpICYmIGRldi0+ZG1hX29wcyA9PSAmZG1hX3ZpcnRfb3Bz KSB7Cj4gKwkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciBE TUEgYmVjYXVzZSB0aGUgZHJpdmVyIG1ha2VzIHVzZSBvZiBkbWFfdmlydF9vcHNcbiIpOwo+ICsJ CXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCWNsaWVudCA9IGZpbmRfcGFyZW50X3BjaV9k ZXYoZGV2KTsKPiArCWlmICghY2xpZW50KSB7Cj4gKwkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IGJl IHVzZWQgZm9yIHBlZXItdG8tcGVlciBETUEgYXMgaXQgaXMgbm90IGEgUENJIGRldmljZVxuIik7 Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJaXRlbSA9IGxpc3RfZmlyc3RfZW50 cnlfb3JfbnVsbChoZWFkLCBzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQsIGxpc3QpOwo+ICsJaWYg KGl0ZW0gJiYgaXRlbS0+cHJvdmlkZXIpIHsKPiArCQlwcm92aWRlciA9IGl0ZW0tPnByb3ZpZGVy Owo+ICsKPiArCQlyZXQgPSB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Vfd2Fybihwcm92aWRlciwg Y2xpZW50KTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlyZXQgPSAtRVhERVY7Cj4gKwkJCWdv dG8gcHV0X2NsaWVudDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbmV3X2l0ZW0gPSBremFsbG9jKHNp emVvZigqbmV3X2l0ZW0pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbmV3X2l0ZW0pIHsKPiArCQly ZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gcHV0X2NsaWVudDsKPiArCX0KPiArCj4gKwluZXdfaXRl bS0+Y2xpZW50ID0gY2xpZW50Owo+ICsJbmV3X2l0ZW0tPnByb3ZpZGVyID0gcGNpX2Rldl9nZXQo cHJvdmlkZXIpOwo+ICsKPiArCWxpc3RfYWRkX3RhaWwoJm5ld19pdGVtLT5saXN0LCBoZWFkKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK3B1dF9jbGllbnQ6Cj4gKwlwY2lfZGV2X3B1dChjbGll bnQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1h X2FkZF9jbGllbnQpOwo+ICsKPiArc3RhdGljIHZvaWQgcGNpX3AycGRtYV9jbGllbnRfZnJlZShz dHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQgKml0ZW0pCj4gK3sKPiArCWxpc3RfZGVsKCZpdGVtLT5s aXN0KTsKPiArCXBjaV9kZXZfcHV0KGl0ZW0tPmNsaWVudCk7Cj4gKwlwY2lfZGV2X3B1dChpdGVt LT5wcm92aWRlcik7Cj4gKwlrZnJlZShpdGVtKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHBjaV9w MnBkbWFfcmVtb3ZlX2NsaWVudCAtIHJlbW92ZSBhbmQgZnJlZSBhIHAycGRtYSBjbGllbnQKPiAr ICogQGhlYWQ6IGxpc3QgaGVhZCBvZiBwMnBkbWEgY2xpZW50cwo+ICsgKiBAZGV2OiBkZXZpY2Ug dG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QKPiArICoKPiArICogVGhpcyByZW1vdmVzIEBkZXYgZnJv bSBhIGxpc3Qgb2YgY2xpZW50cyB1c2VkIGJ5IGEgcDJwZG1hIGRldmljZS4KPiArICogVGhlIGNh bGxlciBpcyBleHBlY3RlZCB0byBoYXZlIGEgbG9jayB3aGljaCBwcm90ZWN0cyBAaGVhZCBhcyBu ZWNlc3NhcnkKPiArICogc28gdGhhdCBub25lIG9mIHRoZSBwY2lfcDJwIGZ1bmN0aW9ucyBjYW4g YmUgY2FsbGVkIGNvbmN1cnJlbnRseQo+ICsgKiBvbiB0aGF0IGxpc3QuCj4gKyAqLwo+ICt2b2lk IHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9zLCAqdG1w Owo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXY7Cj4gKwo+ICsJcGRldiA9IGZpbmRfcGFyZW50X3Bj aV9kZXYoZGV2KTsKPiArCWlmICghcGRldikKPiArCQlyZXR1cm47Cj4gKwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCBoZWFkLCBsaXN0KSB7Cj4gKwkJaWYgKHBvcy0+Y2xp ZW50ICE9IHBkZXYpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwY2lfcDJwZG1hX2NsaWVudF9m cmVlKHBvcyk7Cj4gKwl9Cj4gKwo+ICsJcGNpX2Rldl9wdXQocGRldik7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwocGNpX3AycGRtYV9yZW1vdmVfY2xpZW50KTsKPiArCj4gKy8qKgo+ICsgKiBw Y2lfcDJwZG1hX2NsaWVudF9saXN0X2ZyZWUgLSBmcmVlIGFuIGVudGlyZSBsaXN0IG9mIHAycGRt YSBjbGllbnRzCj4gKyAqIEBoZWFkOiBsaXN0IGhlYWQgb2YgcDJwZG1hIGNsaWVudHMKPiArICoK PiArICogVGhpcyByZW1vdmVzIGFsbCBkZXZpY2VzIGluIGEgbGlzdCBvZiBjbGllbnRzIHVzZWQg YnkgYSBwMnBkbWEgZGV2aWNlLgo+ICsgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUg YSBsb2NrIHdoaWNoIHByb3RlY3RzIEBoZWFkIGFzIG5lY2Vzc2FyeQo+ICsgKiBzbyB0aGF0IG5v bmUgb2YgdGhlIHBjaV9wMnBkbWEgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5 Cj4gKyAqIG9uIHRoYXQgbGlzdC4KPiArICovCj4gK3ZvaWQgcGNpX3AycGRtYV9jbGllbnRfbGlz dF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCj4gK3sKPiArCXN0cnVjdCBwY2lfcDJwZG1h X2NsaWVudCAqcG9zLCAqdG1wOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3Ms IHRtcCwgaGVhZCwgbGlzdCkKPiArCQlwY2lfcDJwZG1hX2NsaWVudF9mcmVlKHBvcyk7Cj4gK30K PiArRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9jbGllbnRfbGlzdF9mcmVlKTsKPiArCj4g Ky8qKgo+ICsgKiBwY2lfcDJwZG1hX2Rpc3RhbmNlIC0gRGV0ZXJtaXZlIHRoZSBjdW11bGF0aXZl IGRpc3RhbmNlIGJldHdlZW4KPiArICoJYSBwMnBkbWEgcHJvdmlkZXIgYW5kIHRoZSBjbGllbnRz IGluIHVzZS4KPiArICogQHByb3ZpZGVyOiBwMnBkbWEgcHJvdmlkZXIgdG8gY2hlY2sgYWdhaW5z dCB0aGUgY2xpZW50IGxpc3QKPiArICogQGNsaWVudHM6IGxpc3Qgb2YgZGV2aWNlcyB0byBjaGVj ayAoTlVMTC10ZXJtaW5hdGVkKQo+ICsgKiBAdmVyYm9zZTogaWYgdHJ1ZSwgcHJpbnQgd2Fybmlu Z3MgZm9yIGRldmljZXMgd2hlbiB3ZSByZXR1cm4gLTEKPiArICoKPiArICogUmV0dXJucyAtMSBp ZiBhbnkgb2YgdGhlIGNsaWVudHMgYXJlIG5vdCBjb21wYXRpYmxlIChiZWhpbmQgdGhlIHNhbWUK PiArICogcm9vdCBwb3J0IGFzIHRoZSBwcm92aWRlciksIG90aGVyd2lzZSByZXR1cm5zIGEgcG9z aXRpdmUgbnVtYmVyIHdoZXJlCj4gKyAqIHRoZSBsb3dlciBudW1iZXIgaXMgdGhlIHByZWZlcnJh YmxlIGNob2ljZS4gKElmIHRoZXJlJ3Mgb25lIGNsaWVudAo+ICsgKiB0aGF0J3MgdGhlIHNhbWUg YXMgdGhlIHByb3ZpZGVyIGl0IHdpbGwgcmV0dXJuIDAsIHdoaWNoIGlzIGJlc3QgY2hvaWNlKS4K PiArICoKPiArICogRm9yIG5vdywgImNvbXBhdGlibGUiIG1lYW5zIHRoZSBwcm92aWRlciBhbmQg dGhlIGNsaWVudHMgYXJlIGFsbCBiZWhpbmQKPiArICogdGhlIHNhbWUgUENJIHJvb3QgcG9ydC4g VGhpcyBjdXRzIG91dCBjYXNlcyB0aGF0IG1heSB3b3JrIGJ1dCBpcyBzYWZlc3QKPiArICogZm9y IHRoZSB1c2VyLiBGdXR1cmUgd29yayBjYW4gZXhwYW5kIHRoaXMgdG8gd2hpdGUtbGlzdCByb290 IGNvbXBsZXhlcyB0aGF0Cj4gKyAqIGNhbiBzYWZlbHkgZm9yd2FyZCBiZXR3ZWVuIGVhY2ggcG9y dHMuCj4gKyAqLwo+ICtpbnQgcGNpX3AycGRtYV9kaXN0YW5jZShzdHJ1Y3QgcGNpX2RldiAqcHJv dmlkZXIsIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMsCj4gKwkJCWJvb2wgdmVyYm9zZSkKPiAr ewo+ICsJc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50ICpwb3M7Cj4gKwlpbnQgcmV0Owo+ICsJaW50 IGRpc3RhbmNlID0gMDsKPiArCWJvb2wgbm90X3N1cHBvcnRlZCA9IGZhbHNlOwo+ICsKPiArCWlm IChsaXN0X2VtcHR5KGNsaWVudHMpKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBvcywgY2xpZW50cywgbGlzdCkgewo+ICsJCWlmICh2ZXJib3NlKQo+ICsJCQly ZXQgPSB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Vfd2Fybihwcm92aWRlciwKPiArCQkJCQkJCSAg ICBwb3MtPmNsaWVudCk7Cj4gKwkJZWxzZQo+ICsJCQlyZXQgPSB1cHN0cmVhbV9icmlkZ2VfZGlz dGFuY2UocHJvdmlkZXIsIHBvcy0+Y2xpZW50LAo+ICsJCQkJCQkgICAgICAgTlVMTCk7Cj4gKwo+ ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlub3Rfc3VwcG9ydGVkID0gdHJ1ZTsKPiArCj4gKwkJaWYg KG5vdF9zdXBwb3J0ZWQgJiYgIXZlcmJvc2UpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlkaXN0YW5j ZSArPSByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKG5vdF9zdXBwb3J0ZWQpCj4gKwkJcmV0dXJuIC0x Owo+ICsKPiArCXJldHVybiBkaXN0YW5jZTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChwY2lf cDJwZG1hX2Rpc3RhbmNlKTsKPiArCj4gKy8qKgo+ICsgKiBwY2lfcDJwZG1hX2Fzc2lnbl9wcm92 aWRlciAtIENoZWNrIGNvbXBhdGliaWx5IChhcyBwZXIgcGNpX3AycGRtYV9kaXN0YW5jZSkKPiAr ICoJYW5kIGFzc2lnbiBhIHByb3ZpZGVyIHRvIGEgbGlzdCBvZiBjbGllbnRzCj4gKyAqIEBwcm92 aWRlcjogcDJwZG1hIHByb3ZpZGVyIHRvIGFzc2lnbiB0byB0aGUgY2xpZW50IGxpc3QKPiArICog QGNsaWVudHM6IGxpc3Qgb2YgZGV2aWNlcyB0byBjaGVjayAoTlVMTC10ZXJtaW5hdGVkKQo+ICsg Kgo+ICsgKiBSZXR1cm5zIGZhbHNlIGlmIGFueSBvZiB0aGUgY2xpZW50cyBhcmUgbm90IGNvbXBh dGlibGUsIHRydWUgaWYgdGhlCj4gKyAqIHByb3ZpZGVyIHdhcyBzdWNjZXNzZnVsbHkgYXNzaWdu ZWQgdG8gdGhlIGNsaWVudHMuCj4gKyAqLwo+ICtib29sIHBjaV9wMnBkbWFfYXNzaWduX3Byb3Zp ZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKPiArCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmNs aWVudHMpCj4gK3sKPiArCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9zOwo+ICsKPiArCWlm IChwY2lfcDJwZG1hX2Rpc3RhbmNlKHByb3ZpZGVyLCBjbGllbnRzLCB0cnVlKSA8IDApCj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBjbGllbnRzLCBs aXN0KQo+ICsJCXBvcy0+cHJvdmlkZXIgPSBwcm92aWRlcjsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsK PiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2Fzc2lnbl9wcm92aWRlcik7Cj4g Kwo+ICsvKioKPiArICogcGNpX2hhc19wMnBtZW0gLSBjaGVjayBpZiBhIGdpdmVuIFBDSSBkZXZp Y2UgaGFzIHB1Ymxpc2hlZCBhbnkgcDJwbWVtCj4gKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIGNo ZWNrCj4gKyAqLwo+ICtib29sIHBjaV9oYXNfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ ICt7Cj4gKwlyZXR1cm4gcGRldi0+cDJwZG1hICYmIHBkZXYtPnAycGRtYS0+cDJwbWVtX3B1Ymxp c2hlZDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChwY2lfaGFzX3AycG1lbSk7Cj4gKwo+ICsv KioKPiArICogcGNpX3AycG1lbV9maW5kIC0gZmluZCBhIHBlZXItdG8tcGVlciBETUEgbWVtb3J5 IGRldmljZSBjb21wYXRpYmxlIHdpdGgKPiArICoJdGhlIHNwZWNpZmllZCBsaXN0IG9mIGNsaWVu dHMgYW5kIHNob3J0ZXN0IGRpc3RhbmNlIChhcyBkZXRlcm1pbmVkCj4gKyAqCWJ5IHBjaV9wMnBt ZW1fZG1hKCkpCj4gKyAqIEBjbGllbnRzOiBsaXN0IG9mIGRldmljZXMgdG8gY2hlY2sgKE5VTEwt dGVybWluYXRlZCkKPiArICoKPiArICogSWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgYmVoaW5kIHRo ZSBzYW1lIHN3aXRjaCwgdGhlIG9uZSAiY2xvc2VzdCIgdG8gdGhlCj4gKyAqIGNsaWVudCBkZXZp Y2VzIGluIHVzZSB3aWxsIGJlIGNob3NlbiBmaXJzdC4gKFNvIGlmIG9uZSBvZiB0aGUgcHJvdmlk ZXJzIGFyZQo+ICsgKiB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIGNsaWVudHMsIHRoYXQgcHJvdmlk ZXIgd2lsbCBiZSB1c2VkIGFoZWFkIG9mIGFueQo+ICsgKiBvdGhlciBwcm92aWRlcnMgdGhhdCBh cmUgdW5yZWxhdGVkKS4gSWYgbXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhbiBlcXVhbAo+ICsgKiBk aXN0YW5jZSBhd2F5LCBvbmUgd2lsbCBiZSBjaG9zZW4gYXQgcmFuZG9tLgo+ICsgKgo+ICsgKiBS ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSB3aXRoIGEgcmVmZXJlbmNlIHRha2Vu ICh1c2UgcGNpX2Rldl9wdXQKPiArICogdG8gcmV0dXJuIHRoZSByZWZlcmVuY2UpIG9yIE5VTEwg aWYgbm8gY29tcGF0aWJsZSBkZXZpY2UgaXMgZm91bmQuIFRoZQo+ICsgKiBmb3VuZCBwcm92aWRl ciB3aWxsIGFsc28gYmUgYXNzaWduZWQgdG8gdGhlIGNsaWVudCBsaXN0Lgo+ICsgKi8KPiArc3Ry dWN0IHBjaV9kZXYgKnBjaV9wMnBtZW1fZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKQo+ ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Cj4gKwlzdHJ1Y3QgcGNpX3AycGRt YV9jbGllbnQgKnBvczsKPiArCWludCBkaXN0YW5jZTsKPiArCWludCBjbG9zZXN0X2Rpc3RhbmNl ID0gSU5UX01BWDsKPiArCXN0cnVjdCBwY2lfZGV2ICoqY2xvc2VzdF9wZGV2czsKPiArCWludCBk ZXZfY250ID0gMDsKPiArCWNvbnN0IGludCBtYXhfZGV2cyA9IFBBR0VfU0laRSAvIHNpemVvZigq Y2xvc2VzdF9wZGV2cyk7Cj4gKwlpbnQgaTsKPiArCj4gKwljbG9zZXN0X3BkZXZzID0ga21hbGxv YyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsKPiArCXdoaWxlICgocGRldiA9IHBjaV9nZXRf ZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSkgewo+ICsJCWlmICghcGNpX2hh c19wMnBtZW0ocGRldikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlkaXN0YW5jZSA9IHBjaV9w MnBkbWFfZGlzdGFuY2UocGRldiwgY2xpZW50cywgZmFsc2UpOwo+ICsJCWlmIChkaXN0YW5jZSA8 IDAgfHwgZGlzdGFuY2UgPiBjbG9zZXN0X2Rpc3RhbmNlKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJaWYgKGRpc3RhbmNlID09IGNsb3Nlc3RfZGlzdGFuY2UgJiYgZGV2X2NudCA+PSBtYXhfZGV2 cykKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChkaXN0YW5jZSA8IGNsb3Nlc3RfZGlzdGFu Y2UpIHsKPiArCQkJZm9yIChpID0gMDsgaSA8IGRldl9jbnQ7IGkrKykKPiArCQkJCXBjaV9kZXZf cHV0KGNsb3Nlc3RfcGRldnNbaV0pOwo+ICsKPiArCQkJZGV2X2NudCA9IDA7Cj4gKwkJCWNsb3Nl c3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKPiArCQl9Cj4gKwo+ICsJCWNsb3Nlc3RfcGRldnNbZGV2 X2NudCsrXSA9IHBjaV9kZXZfZ2V0KHBkZXYpOwo+ICsJfQo+ICsKPiArCWlmIChkZXZfY250KQo+ ICsJCXBkZXYgPSBwY2lfZGV2X2dldChjbG9zZXN0X3BkZXZzW3ByYW5kb21fdTMyX21heChkZXZf Y250KV0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkZXZfY250OyBpKyspCj4gKwkJcGNpX2Rl dl9wdXQoY2xvc2VzdF9wZGV2c1tpXSk7Cj4gKwo+ICsJaWYgKHBkZXYpCj4gKwkJbGlzdF9mb3Jf ZWFjaF9lbnRyeShwb3MsIGNsaWVudHMsIGxpc3QpCj4gKwkJCXBvcy0+cHJvdmlkZXIgPSBwZGV2 Owo+ICsKPiArCWtmcmVlKGNsb3Nlc3RfcGRldnMpOwo+ICsJcmV0dXJuIHBkZXY7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycG1lbV9maW5kKTsKPiArCj4gKy8qKgo+ICsgKiBwY2lf YWxsb2NfcDJwX21lbSAtIGFsbG9jYXRlIHBlZXItdG8tcGVlciBETUEgbWVtb3J5Cj4gKyAqIEBw ZGV2OiB0aGUgZGV2aWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCj4gKyAqIEBzaXplOiBudW1i ZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKPiArICoKPiArICogUmV0dXJucyB0aGUgYWxsb2NhdGVk IG1lbW9yeSBvciBOVUxMIG9uIGVycm9yLgo+ICsgKi8KPiArdm9pZCAqcGNpX2FsbG9jX3AycG1l bShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUpCj4gK3sKPiArCXZvaWQgKnJldDsK PiArCj4gKwlpZiAodW5saWtlbHkoIXBkZXYtPnAycGRtYSkpCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJaWYgKHVubGlrZWx5KCFwZXJjcHVfcmVmX3RyeWdldF9saXZlKCZwZGV2LT5wMnBkbWEt PmRldm1hcF9yZWYpKSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXQgPSAodm9pZCAqKWdl bl9wb29sX2FsbG9jKHBkZXYtPnAycGRtYS0+cG9vbCwgc2l6ZSk7Cj4gKwo+ICsJaWYgKHVubGlr ZWx5KCFyZXQpKQo+ICsJCXBlcmNwdV9yZWZfcHV0KCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FsbG9j X3AycG1lbSk7Cj4gKwo+ICsvKioKPiArICogcGNpX2ZyZWVfcDJwbWVtIC0gYWxsb2NhdGUgcGVl ci10by1wZWVyIERNQSBtZW1vcnkKPiArICogQHBkZXY6IHRoZSBkZXZpY2UgdGhlIG1lbW9yeSB3 YXMgYWxsb2NhdGVkIGZyb20KPiArICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0aGF0 IHdhcyBhbGxvY2F0ZWQKPiArICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyBhbGxv Y2F0ZWQKPiArICovCj4gK3ZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJZ2VuX3Bvb2xfZnJlZShwZGV2LT5w MnBkbWEtPnBvb2wsICh1aW50cHRyX3QpYWRkciwgc2l6ZSk7Cj4gKwlwZXJjcHVfcmVmX3B1dCgm cGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChwY2lf ZnJlZV9wMnBtZW0pOwo+ICsKPiArLyoqCj4gKyAqIHBjaV92aXJ0X3RvX2J1cyAtIHJldHVybiB0 aGUgUENJIGJ1cyBhZGRyZXNzIGZvciBhIGdpdmVuIHZpcnR1YWwKPiArICoJYWRkcmVzcyBvYnRh aW5lZCB3aXRoIHBjaV9hbGxvY19wMnBtZW0oKQo+ICsgKiBAcGRldjogdGhlIGRldmljZSB0aGUg bWVtb3J5IHdhcyBhbGxvY2F0ZWQgZnJvbQo+ICsgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgbWVt b3J5IHRoYXQgd2FzIGFsbG9jYXRlZAo+ICsgKi8KPiArcGNpX2J1c19hZGRyX3QgcGNpX3AycG1l bV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqYWRkcikKPiArewo+ICsJ aWYgKCFhZGRyKQo+ICsJCXJldHVybiAwOwo+ICsJaWYgKCFwZGV2LT5wMnBkbWEpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJLyoKPiArCSAqIE5vdGU6IHdoZW4gd2UgYWRkZWQgdGhlIG1lbW9yeSB0 byB0aGUgcG9vbCB3ZSB1c2VkIHRoZSBQQ0kKPiArCSAqIGJ1cyBhZGRyZXNzIGFzIHRoZSBwaHlz aWNhbCBhZGRyZXNzLiBTbyBnZW5fcG9vbF92aXJ0X3RvX3BoeXMoKQo+ICsJICogYWN0dWFsbHkg cmV0dXJucyB0aGUgYnVzIGFkZHJlc3MgZGVzcGl0ZSB0aGUgbWlzbGVhZGluZyBuYW1lLgo+ICsJ ICovCj4gKwlyZXR1cm4gZ2VuX3Bvb2xfdmlydF90b19waHlzKHBkZXYtPnAycGRtYS0+cG9vbCwg KHVuc2lnbmVkIGxvbmcpYWRkcik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycG1l bV92aXJ0X3RvX2J1cyk7Cj4gKwo+ICsvKioKPiArICogcGNpX3AycG1lbV9hbGxvY19zZ2wgLSBh bGxvY2F0ZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSBpbiBhIHNjYXR0ZXJsaXN0Cj4gKyAqIEBw ZGV2OiB0aGUgZGV2aWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCj4gKyAqIEBzZ2w6IHRoZSBh bGxvY2F0ZWQgc2NhdHRlcmxpc3QKPiArICogQG5lbnRzOiB0aGUgbnVtYmVyIG9mIFNHIGVudHJp ZXMgaW4gdGhlIGxpc3QKPiArICogQGxlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRl Cj4gKyAqCj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnBjaV9wMnBtZW1fYWxsb2Nfc2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ICsJCQkJ CSB1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIgbGVuZ3RoKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwo+ICsJdm9pZCAqYWRkcjsKPiArCj4gKwlzZyA9IGt6YWxsb2Moc2l6ZW9mKCpz ZyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzZykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlz Z19pbml0X3RhYmxlKHNnLCAxKTsKPiArCj4gKwlhZGRyID0gcGNpX2FsbG9jX3AycG1lbShwZGV2 LCBsZW5ndGgpOwo+ICsJaWYgKCFhZGRyKQo+ICsJCWdvdG8gb3V0X2ZyZWVfc2c7Cj4gKwo+ICsJ c2dfc2V0X2J1ZihzZywgYWRkciwgbGVuZ3RoKTsKPiArCSpuZW50cyA9IDE7Cj4gKwlyZXR1cm4g c2c7Cj4gKwo+ICtvdXRfZnJlZV9zZzoKPiArCWtmcmVlKHNnKTsKPiArCXJldHVybiBOVUxMOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBtZW1fYWxsb2Nfc2dsKTsKPiArCj4gKy8q Kgo+ICsgKiBwY2lfcDJwbWVtX2ZyZWVfc2dsIC0gZnJlZSBhIHNjYXR0ZXJsaXN0IGFsbG9jYXRl ZCBieSBwY2lfcDJwbWVtX2FsbG9jX3NnbCgpCj4gKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFs bG9jYXRlIG1lbW9yeSBmcm9tCj4gKyAqIEBzZ2w6IHRoZSBhbGxvY2F0ZWQgc2NhdHRlcmxpc3QK PiArICogQG5lbnRzOiB0aGUgbnVtYmVyIG9mIFNHIGVudHJpZXMgaW4gdGhlIGxpc3QKPiArICov Cj4gK3ZvaWQgcGNpX3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZ2wpCj4gK3sKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gKwlp bnQgY291bnQ7Cj4gKwo+ICsJZm9yX2VhY2hfc2coc2dsLCBzZywgSU5UX01BWCwgY291bnQpIHsK PiArCQlpZiAoIXNnKQo+ICsJCQlicmVhazsKPiArCj4gKwkJcGNpX2ZyZWVfcDJwbWVtKHBkZXYs IHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoKTsKPiArCX0KPiArCWtmcmVlKHNnbCk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycG1lbV9mcmVlX3NnbCk7Cj4gKwo+ICsvKioKPiArICog cGNpX3AycG1lbV9wdWJsaXNoIC0gcHVibGlzaCB0aGUgcGVlci10by1wZWVyIERNQSBtZW1vcnkg Zm9yIHVzZSBieQo+ICsgKglvdGhlciBkZXZpY2VzIHdpdGggcGNpX3AycG1lbV9maW5kKCkKPiAr ICogQHBkZXY6IHRoZSBkZXZpY2Ugd2l0aCBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSB0byBwdWJs aXNoCj4gKyAqIEBwdWJsaXNoOiBzZXQgdG8gdHJ1ZSB0byBwdWJsaXNoIHRoZSBtZW1vcnksIGZh bHNlIHRvIHVucHVibGlzaCBpdAo+ICsgKgo+ICsgKiBQdWJsaXNoZWQgbWVtb3J5IGNhbiBiZSB1 c2VkIGJ5IG90aGVyIFBDSSBkZXZpY2UgZHJpdmVycyBmb3IKPiArICogcGVlci0yLXBlZXIgRE1B IG9wZXJhdGlvbnMuIE5vbi1wdWJsaXNoZWQgbWVtb3J5IGlzIHJlc2VydmVkIGZvcgo+ICsgKiBl eGx1c2l2ZSB1c2Ugb2YgdGhlIGRldmljZSBkcml2ZXIgdGhhdCByZWdpc3RlcnMgdGhlIHBlZXIt dG8tcGVlcgo+ICsgKiBtZW1vcnkuCj4gKyAqLwo+ICt2b2lkIHBjaV9wMnBtZW1fcHVibGlzaChz dHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBwdWJsaXNoKQo+ICt7Cj4gKwlpZiAocHVibGlzaCAm JiAhcGRldi0+cDJwZG1hKQo+ICsJCXJldHVybjsKPiArCj4gKwlwZGV2LT5wMnBkbWEtPnAycG1l bV9wdWJsaXNoZWQgPSBwdWJsaXNoOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBt ZW1fcHVibGlzaCk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaCBiL2lu Y2x1ZGUvbGludXgvbWVtcmVtYXAuaAo+IGluZGV4IGY5MWY5ZTc2MzU1Ny4uOTU1MzM3MGViZGFk IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaAo+ICsrKyBiL2luY2x1ZGUv bGludXgvbWVtcmVtYXAuaAo+IEBAIC01MywxMSArNTMsMTYgQEAgc3RydWN0IHZtZW1fYWx0bWFw IHsKPiAgICAqIHdha2V1cCBldmVudCB3aGVuZXZlciBhIHBhZ2UgaXMgdW5waW5uZWQgYW5kIGJl Y29tZXMgaWRsZS4gVGhpcwo+ICAgICogd2FrZXVwIGlzIHVzZWQgdG8gY29vcmRpbmF0ZSBwaHlz aWNhbCBhZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQgKGV4Ogo+ICAgICogZnMgdHJ1bmNhdGUvaG9s ZSBwdW5jaCkgdnMgcGlubmVkIHBhZ2VzIChleDogZGV2aWNlIGRtYSkuCj4gKyAqCj4gKyAqIE1F TU9SWV9ERVZJQ0VfUENJX1AyUERNQToKPiArICogRGV2aWNlIG1lbW9yeSByZXNpZGluZyBpbiBh IFBDSSBCQVIgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIFBlZXItdG8tUGVlcgo+ICsgKiB0cmFuc2Fj dGlvbnMuCj4gICAgKi8KPiAgIGVudW0gbWVtb3J5X3R5cGUgewo+ICAgCU1FTU9SWV9ERVZJQ0Vf UFJJVkFURSA9IDEsCj4gICAJTUVNT1JZX0RFVklDRV9QVUJMSUMsCj4gICAJTUVNT1JZX0RFVklD RV9GU19EQVgsCj4gKwlNRU1PUllfREVWSUNFX1BDSV9QMlBETUEsCj4gICB9Owo+ICAgCj4gICAv Kgo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgK PiBpbmRleCBhNjFlYmU4YWQ0Y2EuLjIwNTVkZjQxMmE3NyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRl L2xpbnV4L21tLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKPiBAQCAtODkwLDYgKzg5MCwx OSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZGV2aWNlX3B1YmxpY19wYWdlKGNvbnN0IHN0cnVj dCBwYWdlICpwYWdlKQo+ICAgCQlwYWdlLT5wZ21hcC0+dHlwZSA9PSBNRU1PUllfREVWSUNFX1BV QkxJQzsKPiAgIH0KPiAgIAo+ICsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKPiArc3RhdGljIGlu bGluZSBib29sIGlzX3BjaV9wMnBkbWFfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKPiAr ewo+ICsJcmV0dXJuIGlzX3pvbmVfZGV2aWNlX3BhZ2UocGFnZSkgJiYKPiArCQlwYWdlLT5wZ21h cC0+dHlwZSA9PSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE7Cj4gK30KPiArI2Vsc2UgLyogQ09O RklHX1BDSV9QMlBETUEgKi8KPiArc3RhdGljIGlubGluZSBib29sIGlzX3BjaV9wMnBkbWFfcGFn ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKPiArewo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4g KyNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqLwo+ICsKPiAgICNlbHNlIC8qIENPTkZJR19E RVZfUEFHRU1BUF9PUFMgKi8KPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfcGFnZW1hcF9nZXRf b3BzKHZvaWQpCj4gICB7Cj4gQEAgLTkxMyw2ICs5MjYsMTEgQEAgc3RhdGljIGlubGluZSBib29s IGlzX2RldmljZV9wdWJsaWNfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKPiAgIHsKPiAg IAlyZXR1cm4gZmFsc2U7Cj4gICB9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNpX3Ay cGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQo+ICt7Cj4gKwlyZXR1cm4gZmFsc2U7 Cj4gK30KPiAgICNlbmRpZiAvKiBDT05GSUdfREVWX1BBR0VNQVBfT1BTICovCj4gICAKPiAgIHN0 YXRpYyBpbmxpbmUgdm9pZCBnZXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEu aAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjJiMGY1NDc1 MjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgKPiBA QCAtMCwwICsxLDEwMiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lwo+ICsvKgo+ICsgKiBQQ0kgUGVlciAyIFBlZXIgRE1BIHN1cHBvcnQuCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBMb2dhbiBHdW50aG9ycGUKPiArICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTcsIE1pY3Jvc2VtaSBDb3Jwb3JhdGlvbgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTcsIENocmlzdG9waCBIZWxsd2lnCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOCwgRWlkZXRpY29t IEluYy4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9MSU5VWF9QQ0lfUDJQRE1BX0gKPiAr I2RlZmluZSBfTElOVVhfUENJX1AyUERNQV9ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+ Cj4gKwo+ICtzdHJ1Y3QgYmxvY2tfZGV2aWNlOwo+ICtzdHJ1Y3Qgc2NhdHRlcmxpc3Q7Cj4gKwo+ ICsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKPiAraW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNl KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSwKPiArCQl1NjQgb2Zm c2V0KTsKPiAraW50IHBjaV9wMnBkbWFfYWRkX2NsaWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFk LCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICt2b2lkIHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVudChz dHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICt2b2lkIHBjaV9w MnBkbWFfY2xpZW50X2xpc3RfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKPiAraW50IHBj aV9wMnBkbWFfZGlzdGFuY2Uoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgbGlzdF9o ZWFkICpjbGllbnRzLAo+ICsJCQlib29sIHZlcmJvc2UpOwo+ICtib29sIHBjaV9wMnBkbWFfYXNz aWduX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKPiArCQkJCXN0cnVjdCBsaXN0 X2hlYWQgKmNsaWVudHMpOwo+ICtib29sIHBjaV9oYXNfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KTsKPiArc3RydWN0IHBjaV9kZXYgKnBjaV9wMnBtZW1fZmluZChzdHJ1Y3QgbGlzdF9oZWFk ICpjbGllbnRzKTsKPiArdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRl diwgc2l6ZV90IHNpemUpOwo+ICt2b2lkIHBjaV9mcmVlX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAq cGRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwo+ICtwY2lfYnVzX2FkZHJfdCBwY2lfcDJw bWVtX3ZpcnRfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRyKTsKPiArc3Ry dWN0IHNjYXR0ZXJsaXN0ICpwY2lfcDJwbWVtX2FsbG9jX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRl diwKPiArCQkJCQkgdW5zaWduZWQgaW50ICpuZW50cywgdTMyIGxlbmd0aCk7Cj4gK3ZvaWQgcGNp X3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZ2wpOwo+ICt2b2lkIHBjaV9wMnBtZW1fcHVibGlzaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwg Ym9vbCBwdWJsaXNoKTsKPiArI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi8KPiArc3RhdGlj IGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYs IGludCBiYXIsCj4gKwkJc2l6ZV90IHNpemUsIHU2NCBvZmZzZXQpCj4gK3sKPiArCXJldHVybiAt RU9QTk9UU1VQUDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIGludCBwY2lfcDJwZG1hX2FkZF9jbGll bnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKPiArCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sK PiArCXJldHVybiAwOwo+ICt9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX3JlbW92 ZV9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKPiArCQlzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3AycGRtYV9jbGllbnRfbGlzdF9m cmVlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCj4gK3sKPiArfQo+ICtzdGF0aWMgaW5saW5lIGlu dCBwY2lfcDJwZG1hX2Rpc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKPiArCQkJCSAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMsCj4gKwkJCQkgICAgICBib29sIHZlcmJvc2Up Cj4gK3sKPiArCXJldHVybiAtMTsKPiArfQo+ICtzdGF0aWMgaW5saW5lIGJvb2wgcGNpX3AycGRt YV9hc3NpZ25fcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLAo+ICsJCQkJCSAgICAg IHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ ICtzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2hhc19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYp Cj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lf ZGV2ICpwY2lfcDJwbWVtX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cykKPiArewo+ICsJ cmV0dXJuIE5VTEw7Cj4gK30KPiArc3RhdGljIGlubGluZSB2b2lkICpwY2lfYWxsb2NfcDJwbWVt KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJcmV0dXJuIE5VTEw7 Cj4gK30KPiArc3RhdGljIGlubGluZSB2b2lkIHBjaV9mcmVlX3AycG1lbShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgdm9pZCAqYWRkciwKPiArCQlzaXplX3Qgc2l6ZSkKPiArewo+ICt9Cj4gK3N0YXRp YyBpbmxpbmUgcGNpX2J1c19hZGRyX3QgcGNpX3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNp X2RldiAqcGRldiwKPiArCQkJCQkJICAgIHZvaWQgKmFkZHIpCj4gK3sKPiArCXJldHVybiAwOwo+ ICt9Cj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjYXR0ZXJsaXN0ICpwY2lfcDJwbWVtX2FsbG9j X3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiArCQl1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIg bGVuZ3RoKQo+ICt7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQg cGNpX3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiArCQlzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnbCkKPiArewo+ICt9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwbWVt X3B1Ymxpc2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgcHVibGlzaCkKPiArewo+ICt9Cj4g KyNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqLwo+ICsjZW5kaWYgLyogX0xJTlVYX1BDSV9Q MlBfSCAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51 eC9wY2kuaAo+IGluZGV4IGU3MmNhOGRkNjI0MS4uNWQ5NWRiZjIxZjRhIDEwMDY0NAo+IC0tLSBh L2luY2x1ZGUvbGludXgvcGNpLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCj4gQEAgLTI4 MSw2ICsyODEsNyBAQCBzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlOwo+ICAgc3RydWN0IHBjaV92cGQ7 Cj4gICBzdHJ1Y3QgcGNpX3NyaW92Owo+ICAgc3RydWN0IHBjaV9hdHM7Cj4gK3N0cnVjdCBwY2lf cDJwZG1hOwo+ICAgCj4gICAvKiBUaGUgcGNpX2RldiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIFBDSSBk ZXZpY2VzICovCj4gICBzdHJ1Y3QgcGNpX2RldiB7Cj4gQEAgLTQzOSw2ICs0NDAsOSBAQCBzdHJ1 Y3QgcGNpX2RldiB7Cj4gICAjaWZkZWYgQ09ORklHX1BDSV9QQVNJRAo+ICAgCXUxNgkJcGFzaWRf ZmVhdHVyZXM7Cj4gICAjZW5kaWYKPiArI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCj4gKwlzdHJ1 Y3QgcGNpX3AycGRtYSAqcDJwZG1hOwo+ICsjZW5kaWYKPiAgIAlwaHlzX2FkZHJfdAlyb207CQkv KiBQaHlzaWNhbCBhZGRyZXNzIGlmIG5vdCBmcm9tIEJBUiAqLwo+ICAgCXNpemVfdAkJcm9tbGVu OwkJLyogTGVuZ3RoIGlmIG5vdCBmcm9tIEJBUiAqLwo+ICAgCWNoYXIJCSpkcml2ZXJfb3ZlcnJp ZGU7IC8qIERyaXZlciBuYW1lIHRvIGZvcmNlIGEgbWF0Y2ggKi8KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52ZGltbSBtYWlsaW5nIGxpc3QK TGludXgtbnZkaW1tQGxpc3RzLjAxLm9yZwpodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LW52ZGltbQo=