From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v0,3/4] drivers: edac: Add cache erp driver for Last Level Cache Controller (LLCC) From: Borislav Petkov Message-Id: <20180729034927.GA2916@nazgul.tnic> Date: Sun, 29 Jul 2018 05:49:27 +0200 To: Venkata Narendra Kumar Gutta Cc: evgreen@chromium.org, robh@kernel.org, mchehab@kernel.org, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, tsoni@codeaurora.org, ckadabi@codeaurora.org, rishabhb@codeaurora.org List-ID: T24gV2VkLCBKdWwgMjUsIDIwMTggYXQgMTA6NDQ6NTZBTSAtMDcwMCwgVmVua2F0YSBOYXJlbmRy YSBLdW1hciBHdXR0YSB3cm90ZToKPiBBZGQgY2FjaGUgZXJyb3IgcmVwb3J0aW5nIGRyaXZlciBm b3Igc2luZ2xlIGFuZCBkb3VibGUgYml0IGVycm9ycyBvbgo+IExhc3QgTGV2ZWwgQ2FjaGUgQ29u dHJvbGxlciAoTExDQykgY2FjaGUuIFRoaXMgZHJpdmVyIHRha2VzIGNhcmUgb2YKPiBkdW1waW5n IHJlZ2lzdGVycyBhbmQgYWRkIGNvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBw YW5pYwo+IHdoZW4gdGhlc2UgZXJyb3JzIGhhcHBlbi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaGFu bmFnb3VkIEthZGFiaSA8Y2thZGFiaUBjb2RlYXVyb3JhLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBW ZW5rYXRhIE5hcmVuZHJhIEt1bWFyIEd1dHRhIDx2bmtndXR0YUBjb2RlYXVyb3JhLm9yZz4KClRo aXMgU09CIGNoYWluIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgLSBzZWUKRG9jdW1lbnRhdGlvbi9w cm9jZXNzL3N1Ym1pdHRpbmctcGF0Y2hlcy5yc3QKCj4gLS0tCj4gIGRyaXZlcnMvZWRhYy9LY29u ZmlnICAgICAgICAgIHwgIDIxICsrCj4gIGRyaXZlcnMvZWRhYy9NYWtlZmlsZSAgICAgICAgIHwg ICAxICsKPiAgZHJpdmVycy9lZGFjL3Fjb21fbGxjY19lZGFjLmMgfCA1MjAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNTQyIGlu c2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZWRhYy9xY29tX2xsY2Nf ZWRhYy5jCgpOZWVkcyBNQUlOVEFJTkVSUyBlbnRyeSBzbyB0aGF0IHlvdSBnZXQgYWxsIHRoZSBi dWcgcmVwb3J0cy4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9LY29uZmlnIGIvZHJpdmVy cy9lZGFjL0tjb25maWcKPiBpbmRleCA1NzMwNGIyLi42ODUxOGFkIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZWRhYy9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKPiBAQCAtNDYw LDQgKzQ2MCwyNSBAQCBjb25maWcgRURBQ19USQo+ICAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRl Y3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCj4gICAgICAgICAgICBUSSBTb0NzLgo+ICAKPiAr Y29uZmlnIEVEQUNfUUNPTV9MTENDCj4gKyAgICAgICAgZGVwZW5kcyBvbiBRQ09NX0xMQ0MKPiAr ICAgICAgICB0cmlzdGF0ZSAiUUNPTSBFREFDIENvbnRyb2xsZXIgZm9yIExMQ0MgQ2FjaGUiCgpO byBlZGFjIGRyaXZlciBwZXIgZnVuY3Rpb25hbCB1bml0IHBscyAtIHNlZSBob3cgYWx0ZXJhX2Vk YWMuYyBkb2VzIGl0LApmb3IgZXhhbXBsZS4gSU9XLCB0aGlzIGRyaXZlciAtIGlmIGl0IGNhbm5v dCBzaGFyZS9yZXVzZSBhbnkgb2YgdGhlCmV4aXN0aW5nIGVkYWMgZHJpdmVycywgaXQgc2hvdWxk IGJlIGNhbGxlZCBxY29tX2VkYWMgYW5kIGNvbnRhaW4gYWxsIHRoZQpRdWFsY29tbS1zcGVjaWZp YyBSQVMgZmVhdHVyZXMgdGhlcmUuCgo+ICsgICAgICAgIGhlbHAKPiArICAgICAgICAgIFN1cHBv cnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUKPiArICAgICAgICAg IFFDT00gTExDQyBjYWNoZS4gUmVwb3J0IGVycm9ycyBjYXVnaHQgYnkgTExDQyBFQ0MKPiArICAg ICAgICAgIG1lY2hhbmlzbS4KPiArCj4gKyAgICAgICAgICBGb3IgZGVidWdnaW5nIGlzc3VlcyBo YXZpbmcgdG8gZG8gd2l0aCBzdGFiaWxpdHkgYW5kIG92ZXJhbGwgc3lzdGVtCj4gKyAgICAgICAg ICBoZWFsdGgsIHlvdSBzaG91bGQgcHJvYmFibHkgc2F5ICdZJyBoZXJlLgo+ICsKPiArY29uZmln IEVEQUNfUUNPTV9MTENDX1BBTklDX09OX1VFCj4gKyAgICAgICAgZGVwZW5kcyBvbiBFREFDX1FD T01fTExDQwo+ICsgICAgICAgIGJvb2wgIlBhbmljIG9uIHVuY29ycmVjdGFibGUgZXJyb3JzIC0g cWNvbSBsbGNjIgo+ICsgICAgICAgIGhlbHAKPiArICAgICAgICAgIEZvcmNpYmx5IGNhdXNlIGEg a2VybmVsIHBhbmljIGlmIGFuIHVuY29ycmVjdGFibGUgZXJyb3IgKFVFKSBpcwo+ICsgICAgICAg ICAgZGV0ZWN0ZWQuIFRoaXMgY2FuIHJlZHVjZSBkZWJ1Z2dpbmcgdGltZXMgb24gaGFyZHdhcmUg d2hpY2ggbWF5IGJlCj4gKyAgICAgICAgICBvcGVyYXRpbmcgYXQgdm9sdGFnZXMgb3IgZnJlcXVl bmNpZXMgb3V0c2lkZSBub3JtYWwgc3BlY2lmaWNhdGlvbi4KPiArCj4gKyAgICAgICAgICBGb3Ig cHJvZHVjdGlvbiBidWlsZHMsIHlvdSBzaG91bGQgcHJvYmFibHkgc2F5ICdOJyBoZXJlLgo+ICsK PiAgZW5kaWYgIyBFREFDCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2Ry aXZlcnMvZWRhYy9NYWtlZmlsZQo+IGluZGV4IDAyYjQzYTcuLjI4YWZmMjggMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCj4g QEAgLTc3LDMgKzc3LDQgQEAgb2JqLSQoQ09ORklHX0VEQUNfQUxURVJBKQkJKz0gYWx0ZXJhX2Vk YWMubwo+ICBvYmotJChDT05GSUdfRURBQ19TWU5PUFNZUykJCSs9IHN5bm9wc3lzX2VkYWMubwo+ ICBvYmotJChDT05GSUdfRURBQ19YR0VORSkJCSs9IHhnZW5lX2VkYWMubwo+ICBvYmotJChDT05G SUdfRURBQ19USSkJCQkrPSB0aV9lZGFjLm8KPiArb2JqLSQoQ09ORklHX0VEQUNfUUNPTV9MTEND KQkJKz0gcWNvbV9sbGNjX2VkYWMubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcWNvbV9s bGNjX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9xY29tX2xsY2NfZWRhYy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43YTY3OGI1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZWRhYy9xY29tX2xsY2NfZWRhYy5jCj4gQEAgLTAsMCArMSw1MjAgQEAKPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChj KSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lZGFj Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc21wLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NvYy9xY29tL2xsY2MtcWNv bS5oPgo+ICsjaW5jbHVkZSAiZWRhY19tYy5oIgo+ICsjaW5jbHVkZSAiZWRhY19kZXZpY2UuaCIK PiArCj4gKyNpZmRlZiBDT05GSUdfRURBQ19RQ09NX0xMQ0NfUEFOSUNfT05fVUUKPiArI2RlZmlu ZSBMTENDX0VSUF9QQU5JQ19PTl9VRSAxCj4gKyNlbHNlCj4gKyNkZWZpbmUgTExDQ19FUlBfUEFO SUNfT05fVUUgMAo+ICsjZW5kaWYKPiArCj4gKyNkZWZpbmUgRURBQ19MTENDCSJxY29tX2xsY2Mi Cj4gKwo+ICsjZGVmaW5lIFRSUF9TWU5fUkVHX0NOVAk2Cj4gKwo+ICsjZGVmaW5lIERSUF9TWU5f UkVHX0NOVAk4Cj4gKwo+ICsjZGVmaW5lIExMQ0NfQ09NTU9OX1NUQVRVUzAJCTB4MDAwMzAwMEMK PiArI2RlZmluZSBMTENDX0xCX0NOVF9NQVNLCQlHRU5NQVNLKDMxLCAyOCkKPiArI2RlZmluZSBM TENDX0xCX0NOVF9TSElGVAkJMjgKPiArCj4gKy8qIHNpbmdsZSAmIERvdWJsZSBCaXQgc3luZHJv bWUgcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ICsjZGVmaW5lIFRSUF9FQ0NfU0JfRVJSX1NZTjAJCTB4 MDAwMjMwNEMKPiArI2RlZmluZSBUUlBfRUNDX0RCX0VSUl9TWU4wCQkweDAwMDIwMzcwCj4gKyNk ZWZpbmUgRFJQX0VDQ19TQl9FUlJfU1lOMAkJMHgwMDA0MjA0Qwo+ICsjZGVmaW5lIERSUF9FQ0Nf REJfRVJSX1NZTjAJCTB4MDAwNDIwNzAKPiArCj4gKy8qIEVycm9yIHJlZ2lzdGVyIG9mZnNldHMg Ki8KPiArI2RlZmluZSBUUlBfRUNDX0VSUk9SX1NUQVRVUzEJCTB4MDAwMjAzNDgKPiArI2RlZmlu ZSBUUlBfRUNDX0VSUk9SX1NUQVRVUzAJCTB4MDAwMjAzNDQKPiArI2RlZmluZSBEUlBfRUNDX0VS Uk9SX1NUQVRVUzEJCTB4MDAwNDIwNDgKPiArI2RlZmluZSBEUlBfRUNDX0VSUk9SX1NUQVRVUzAJ CTB4MDAwNDIwNDQKPiArCj4gKy8qIFRSUCwgRFJQIGludGVycnVwdCByZWdpc3RlciBvZmZzZXRz ICovCj4gKyNkZWZpbmUgRFJQX0lOVEVSUlVQVF9TVEFUVVMJCTB4MDAwNDEwMDAKPiArI2RlZmlu ZSBUUlBfSU5URVJSVVBUXzBfU1RBVFVTCQkweDAwMDIwNDgwCj4gKyNkZWZpbmUgRFJQX0lOVEVS UlVQVF9DTEVBUgkJMHgwMDA0MTAwOAo+ICsjZGVmaW5lIERSUF9FQ0NfRVJST1JfQ05UUl9DTEVB UgkweDAwMDQwMDA0Cj4gKyNkZWZpbmUgVFJQX0lOVEVSUlVQVF8wX0NMRUFSCQkweDAwMDIwNDg0 Cj4gKyNkZWZpbmUgVFJQX0VDQ19FUlJPUl9DTlRSX0NMRUFSCTB4MDAwMjA0NDAKPiArCj4gKy8q IE1hc2sgYW5kIHNoaWZ0IG1hY3JvcyAqLwo+ICsjZGVmaW5lIEVDQ19EQl9FUlJfQ09VTlRfTUFT SwlHRU5NQVNLKDQsIDApCgpBbGlnbiBhbGwgdGhvc2UgdG8gdGhlIHNhbWUgdmVydGljYWwgY29s dW1uLgoKPiArI2RlZmluZSBFQ0NfREJfRVJSX1dBWVNfTUFTSwlHRU5NQVNLKDMxLCAxNikKPiAr I2RlZmluZSBFQ0NfREJfRVJSX1dBWVNfU0hJRlQJQklUKDQpCj4gKwo+ICsjZGVmaW5lIEVDQ19T Ql9FUlJfQ09VTlRfTUFTSwlHRU5NQVNLKDIzLCAxNikKPiArI2RlZmluZSBFQ0NfU0JfRVJSX0NP VU5UX1NISUZUCUJJVCg0KQo+ICsjZGVmaW5lIEVDQ19TQl9FUlJfV0FZU19NQVNLCUdFTk1BU0so MTUsIDApCj4gKwo+ICsjZGVmaW5lIFNCX0VDQ19FUlJPUgkJQklUKDApCj4gKyNkZWZpbmUgREJf RUNDX0VSUk9SCQlCSVQoMSkKPiArCj4gKyNkZWZpbmUgRFJQX1RSUF9JTlRfQ0xFQVIJR0VOTUFT SygxLCAwKQo+ICsjZGVmaW5lIERSUF9UUlBfQ05UX0NMRUFSCUdFTk1BU0soMSwgMCkKPiArCj4g Ky8qIENvbmZpZyByZWdpc3RlcnMgb2Zmc2V0cyovCj4gKyNkZWZpbmUgRFJQX0VDQ19FUlJPUl9D RkcgICAgICAgMHgwMDA0MDAwMAo+ICsKPiArLyogVFJQLCBEUlAgaW50ZXJydXB0IHJlZ2lzdGVy IG9mZnNldHMgKi8KPiArI2RlZmluZSBDTU5fSU5URVJSVVBUXzBfRU5BQkxFICAgICAgICAgIDB4 MDAwMzAwMUMKPiArI2RlZmluZSBDTU5fSU5URVJSVVBUXzJfRU5BQkxFICAgICAgICAgIDB4MDAw MzAwM0MKPiArI2RlZmluZSBUUlBfSU5URVJSVVBUXzBfRU5BQkxFICAgICAgICAgIDB4MDAwMjA0 ODgKPiArI2RlZmluZSBEUlBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDB4MDAwNDEwMEMK PiArCj4gKyNkZWZpbmUgU0JfRVJST1JfVEhSRVNIT0xEICAgICAgMHgxCj4gKyNkZWZpbmUgU0Jf RVJST1JfVEhSRVNIT0xEX1NISUZUICAgICAgICAyNAo+ICsjZGVmaW5lIFNCX0RCX1RSUF9JTlRF UlJVUFRfRU5BQkxFICAgICAgMHgzCj4gKyNkZWZpbmUgVFJQMF9JTlRFUlJVUFRfRU5BQkxFICAg MHgxCj4gKyNkZWZpbmUgRFJQMF9JTlRFUlJVUFRfRU5BQkxFICAgQklUKDYpCj4gKyNkZWZpbmUg U0JfREJfRFJQX0lOVEVSUlVQVF9FTkFCTEUgICAgICAweDMKPiArCj4gKwo+ICtlbnVtIHsKPiAr CUxMQ0NfRFJBTV9DRSA9IDAsCj4gKwlMTENDX0RSQU1fVUUsCj4gKwlMTENDX1RSQU1fQ0UsCj4g KwlMTENDX1RSQU1fVUUsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZXJyb3JzX2VkYWMgewo+ICsJY29u c3QgY2hhciAqbXNnOwo+ICsJdm9pZCAoKmZ1bmMpKHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5m byAqZWRldl9jdGwsCj4gKwkJCQlpbnQgaW5zdF9uciwgaW50IGJsb2NrX25yLCBjb25zdCBjaGFy ICptc2cpOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBlcnJvcnNfZWRhYyBlcnJv cnNbXSA9IHsKPiArCXsiTExDQyBEYXRhIFJBTSBjb3JyZWN0YWJsZSBFcnJvciIsIGVkYWNfZGV2 aWNlX2hhbmRsZV9jZX0sCj4gKwl7IkxMQ0MgRGF0YSBSQU0gdW5jb3JyZWN0YWJsZSBFcnJvciIs IGVkYWNfZGV2aWNlX2hhbmRsZV91ZX0sCj4gKwl7IkxMQ0MgVGFnIFJBTSBjb3JyZWN0YWJsZSBF cnJvciIsIGVkYWNfZGV2aWNlX2hhbmRsZV9jZX0sCj4gKwl7IkxMQ0MgVGFnIFJBTSB1bmNvcnJl Y3RhYmxlIEVycm9yIiwgZWRhY19kZXZpY2VfaGFuZGxlX3VlfSwKPiArfTsKPiArCj4gK3N0YXRp YyBpbnQgcWNvbV9sbGNjX2NvcmVfc2V0dXAoc3RydWN0IHJlZ21hcCAqbGxjY19iY2FzdF9yZWdt YXApCj4gK3sKPiArCXUzMiBzYl9lcnJfdGhyZXNob2xkOwo+ICsJaW50IHJldDsKPiArCj4gKwkv KiBFbmFibGUgVFJQIGluIGluc3RhbmNlIDIgb2YgY29tbW9uIGludGVycnVwdCBlbmFibGUgcmVn aXN0ZXIgKi8KPiArCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhsbGNjX2JjYXN0X3JlZ21hcCwg Q01OX0lOVEVSUlVQVF8yX0VOQUJMRSwKPiArCQkJCVRSUDBfSU5URVJSVVBUX0VOQUJMRSwKPiAr CQkJCVRSUDBfSU5URVJSVVBUX0VOQUJMRSk7CgpBbGlnbiBhcmd1bWVudHMgYXQgdGhlIG9wZW5p bmcgYnJhY2UuIENoZWNrIHRoZSByZXN0IGJlbG93IHRvby4KCj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJLyogRW5hYmxlIEVDQyBpbnRlcnJ1cHRzIG9uIFRhZyBSYW0gKi8K PiArCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhsbGNjX2JjYXN0X3JlZ21hcCwgVFJQX0lOVEVS UlVQVF8wX0VOQUJMRSwKPiArCQkJCVNCX0RCX1RSUF9JTlRFUlJVUFRfRU5BQkxFLAo+ICsJCQkJ U0JfREJfVFJQX0lOVEVSUlVQVF9FTkFCTEUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiArCS8qIEVuYWJsZSBTQiBlcnJvciBmb3IgRGF0YSBSQU0gKi8KPiArCXNiX2Vycl90 aHJlc2hvbGQgPSAoU0JfRVJST1JfVEhSRVNIT0xEIDw8IFNCX0VSUk9SX1RIUkVTSE9MRF9TSElG VCk7Cj4gKwlyZXQgPSByZWdtYXBfd3JpdGUobGxjY19iY2FzdF9yZWdtYXAsIERSUF9FQ0NfRVJS T1JfQ0ZHLAo+ICsJCQkJc2JfZXJyX3RocmVzaG9sZCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJLyogRW5hYmxlIERSUCBpbiBpbnN0YW5jZSAyIG9mIGNvbW1vbiBpbnRl cnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMobGxj Y19iY2FzdF9yZWdtYXAsIENNTl9JTlRFUlJVUFRfMl9FTkFCTEUsCj4gKwkJCQlEUlAwX0lOVEVS UlVQVF9FTkFCTEUsIERSUDBfSU5URVJSVVBUX0VOQUJMRSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJLyogRW5hYmxlIEVDQyBpbnRlcnJ1cHRzIG9uIERhdGEgUmFtICov Cj4gKwlyZXQgPSByZWdtYXBfd3JpdGUobGxjY19iY2FzdF9yZWdtYXAsIERSUF9JTlRFUlJVUFRf RU5BQkxFLAo+ICsJCQkJU0JfREJfRFJQX0lOVEVSUlVQVF9FTkFCTEUpOwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArLyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdCBhbmQgY291bnRlciBy ZWdpc3RlcnMgKi8KPiArc3RhdGljIGludCBxY29tX2xsY2NfY2xlYXJfZXJyb3JzKGludCBlcnJf dHlwZSwgc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRydikKPiArewo+ICsJaW50IHJldCA9IDA7Cj4g Kwo+ICsJc3dpdGNoIChlcnJfdHlwZSkgewo+ICsJY2FzZSBMTENDX0RSQU1fQ0U6Cj4gKwljYXNl IExMQ0NfRFJBTV9VRToKPiArCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCj4gKwkJcmV0ID0g cmVnbWFwX3dyaXRlKGRydi0+YmNhc3RfcmVnbWFwLCBEUlBfSU5URVJSVVBUX0NMRUFSLAo+ICsJ CQkJCURSUF9UUlBfSU5UX0NMRUFSKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ ICsKPiArCQkvKiBDbGVhciB0aGUgY291bnRlcnMgKi8KPiArCQlyZXQgPSByZWdtYXBfd3JpdGUo ZHJ2LT5iY2FzdF9yZWdtYXAsIERSUF9FQ0NfRVJST1JfQ05UUl9DTEVBUiwKPiArCQkJCQlEUlBf VFJQX0NOVF9DTEVBUik7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCQlicmVh azsKPiArCWNhc2UgTExDQ19UUkFNX0NFOgo+ICsJY2FzZSBMTENDX1RSQU1fVUU6Cj4gKwkJcmV0 ID0gcmVnbWFwX3dyaXRlKGRydi0+YmNhc3RfcmVnbWFwLCBUUlBfSU5URVJSVVBUXzBfQ0xFQVIs Cj4gKwkJCQkJRFJQX1RSUF9JTlRfQ0xFQVIpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJCXJldCA9IHJlZ21hcF93cml0ZShkcnYtPmJjYXN0X3JlZ21hcCwgVFJQX0VD Q19FUlJPUl9DTlRSX0NMRUFSLAo+ICsJCQkJCURSUF9UUlBfQ05UX0NMRUFSKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArLyogRHVtcCBzeW5kcm9tZSByZWdpc3RlcnMgZm9yIHRhZyBSYW0gRG91Ymxl IGJpdCBlcnJvcnMgKi8KPiArc3RhdGljIGludCBkdW1wX3RycF9kYl9zeW5fcmVnKHN0cnVjdCBs bGNjX2Rydl9kYXRhICpkcnYsIHUzMiBiYW5rKQo+ICt7Cj4gKwlpbnQgaSwgcmV0Owo+ICsJaW50 IGRiX2Vycl9jbnQ7Cj4gKwlpbnQgZGJfZXJyX3dheXM7Cj4gKwl1MzIgc3luZF9yZWc7Cj4gKwl1 MzIgc3luZF92YWw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFRSUF9TWU5fUkVHX0NOVDsgaSsr KSB7Cj4gKwkJc3luZF9yZWcgPSBUUlBfRUNDX0RCX0VSUl9TWU4wICsgKGkgKiA0KTsKPiArCQly ZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwgZHJ2LT5vZmZzZXRzW2JhbmtdICsgc3luZF9y ZWcsCj4gKwkJCQkmc3luZF92YWwpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4g KwkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsICJUUlBfRUNDX1NZTiVkOiAweCU4 eFxuIiwKPiArCQkJaSwgc3luZF92YWwpOwo+ICsJfQo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFk KGRydi0+cmVnbWFwLAo+ICsJCQkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9T VEFUVVMxLAo+ICsJCQkJJmRiX2Vycl9jbnQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsJZGJfZXJyX2NudCA9IChkYl9lcnJfY250ICYgRUNDX0RCX0VSUl9DT1VOVF9NQVNLKTsK PiArCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciBj b3VudDogMHglNHhcbiIsCj4gKwkJZGJfZXJyX2NudCk7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3Jl YWQoZHJ2LT5yZWdtYXAsCj4gKwkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9T VEFUVVMwLCAmZGJfZXJyX3dheXMpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJ ZGJfZXJyX3dheXMgPSAoZGJfZXJyX3dheXMgJiBFQ0NfREJfRVJSX1dBWVNfTUFTSyk7Cj4gKwlk Yl9lcnJfd2F5cyA+Pj0gRUNDX0RCX0VSUl9XQVlTX1NISUZUOwo+ICsKPiArCWVkYWNfcHJpbnRr KEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciB3YXlzOiAweCU0eFxuIiwK PiArCQlkYl9lcnJfd2F5cyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyogRHVt cCBzeW5kcm9tZSByZWdpc3RlciBmb3IgdGFnIFJhbSBTaW5nbGUgQml0IEVycm9ycyAqLwo+ICtz dGF0aWMgaW50IGR1bXBfdHJwX3NiX3N5bl9yZWcoc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRydiwg dTMyIGJhbmspCj4gK3sKPiArCWludCBpLCByZXQ7Cj4gKwlpbnQgc2JfZXJyX2NudDsKPiArCWlu dCBzYl9lcnJfd2F5czsKPiArCXUzMiBzeW5kX3JlZzsKPiArCXUzMiBzeW5kX3ZhbDsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgVFJQX1NZTl9SRUdfQ05UOyBpKyspIHsKPiArCQlzeW5kX3JlZyA9 IFRSUF9FQ0NfU0JfRVJSX1NZTjAgKyAoaSAqIDQpOwo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGRy di0+cmVnbWFwLCBkcnYtPm9mZnNldHNbYmFua10gKyBzeW5kX3JlZywKPiArCQkJCQkmc3luZF92 YWwpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJZWRhY19wcmludGsoS0VS Tl9DUklULCBFREFDX0xMQ0MsICJUUlBfRUNDX1NZTiVkOiAweCU4eFxuIiwKPiArCQkJCWksIHN5 bmRfdmFsKTsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKPiAr CQkJCWRydi0+b2Zmc2V0c1tiYW5rXSArIFRSUF9FQ0NfRVJST1JfU1RBVFVTMSwKPiArCQkJCSZz Yl9lcnJfY250KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCXNiX2Vycl9jbnQg PSAoc2JfZXJyX2NudCAmIEVDQ19TQl9FUlJfQ09VTlRfTUFTSyk7Cj4gKwlzYl9lcnJfY250ID4+ PSBFQ0NfU0JfRVJSX0NPVU5UX1NISUZUOwo+ICsJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFD X0xMQ0MsICJTaW5nbGUtQml0IGVycm9yIGNvdW50OiAweCU0eFxuIiwKPiArCQlzYl9lcnJfY250 KTsKPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKPiArCQkJCWRydi0+b2Zm c2V0c1tiYW5rXSArIFRSUF9FQ0NfRVJST1JfU1RBVFVTMCwKPiArCQkJCSZzYl9lcnJfd2F5cyk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc2JfZXJyX3dheXMgPSBzYl9l cnJfd2F5cyAmIEVDQ19TQl9FUlJfV0FZU19NQVNLOwo+ICsKPiArCWVkYWNfcHJpbnRrKEtFUk5f Q1JJVCwgRURBQ19MTENDLCAiU2luZ2xlLUJpdCBlcnJvciB3YXlzOiAweCU0eFxuIiwKPiArCQkJ c2JfZXJyX3dheXMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qIER1bXAgc3lu ZHJvbWUgcmVnaXN0ZXJzIGZvciBEYXRhIFJhbSBEb3VibGUgYml0IGVycm9ycyAqLwo+ICtzdGF0 aWMgaW50IGR1bXBfZHJwX2RiX3N5bl9yZWcoc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRydiwgdTMy IGJhbmspCj4gK3sKPiArCWludCBpLCByZXQ7Cj4gKwlpbnQgZGJfZXJyX2NudDsKPiArCWludCBk Yl9lcnJfd2F5czsKPiArCXUzMiBzeW5kX3JlZzsKPiArCXUzMiBzeW5kX3ZhbDsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgRFJQX1NZTl9SRUdfQ05UOyBpKyspIHsKPiArCQlzeW5kX3JlZyA9IERS UF9FQ0NfREJfRVJSX1NZTjAgKyAoaSAqIDQpOwo+ICsJCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+ cmVnbWFwLCBkcnYtPm9mZnNldHNbYmFua10gKyBzeW5kX3JlZywKPiArCQkJCQkmc3luZF92YWwp Owo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJZWRhY19wcmludGsoS0VSTl9D UklULCBFREFDX0xMQ0MsICJEUlBfRUNDX1NZTiVkOiAweCU4eFxuIiwKPiArCQkJCWksIHN5bmRf dmFsKTsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKPiArCQkJ CWRydi0+b2Zmc2V0c1tiYW5rXSArIERSUF9FQ0NfRVJST1JfU1RBVFVTMSwKPiArCQkJCSZkYl9l cnJfY250KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWRiX2Vycl9jbnQgPSAo ZGJfZXJyX2NudCAmIEVDQ19EQl9FUlJfQ09VTlRfTUFTSyk7Cj4gKwllZGFjX3ByaW50ayhLRVJO X0NSSVQsIEVEQUNfTExDQywgIkRvdWJsZS1CaXQgZXJyb3IgY291bnQ6IDB4JTR4XG4iLAo+ICsJ CWRiX2Vycl9jbnQpOwo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAo+ICsJ CQkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJPUl9TVEFUVVMwLAo+ICsJCQkJJmRi X2Vycl93YXlzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWRiX2Vycl93YXlz ICY9IEVDQ19EQl9FUlJfV0FZU19NQVNLOwo+ICsJZGJfZXJyX3dheXMgPj49IEVDQ19EQl9FUlJf V0FZU19TSElGVDsKPiArCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91Ymxl LUJpdCBlcnJvciB3YXlzOiAweCU0eFxuIiwKPiArCQlkYl9lcnJfd2F5cyk7Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArLyogRHVtcCBTeW5kcm9tZSByZWdpc3RlcnMgZm9yIERhdGEg UmFtIFNpbmdsZSBiaXQgZXJyb3JzKi8KPiArc3RhdGljIGludCBkdW1wX2RycF9zYl9zeW5fcmVn KHN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYsIHUzMiBiYW5rKQo+ICt7Cj4gKwlpbnQgaSwgcmV0 Owo+ICsJaW50IHNiX2Vycl9jbnQ7Cj4gKwlpbnQgc2JfZXJyX3dheXM7Cj4gKwl1MzIgc3luZF9y ZWc7Cj4gKwl1MzIgc3luZF92YWw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IERSUF9TWU5fUkVH X0NOVDsgaSsrKSB7Cj4gKwkJc3luZF9yZWcgPSBEUlBfRUNDX1NCX0VSUl9TWU4wICsgKGkgKiA0 KTsKPiArCQlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwgZHJ2LT5vZmZzZXRzW2Jhbmtd ICsgc3luZF9yZWcsCj4gKwkJCQkJJnN5bmRfdmFsKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRFJQX0VDQ19T WU4lZDogMHglOHhcbiIsCj4gKwkJCQlpLCBzeW5kX3ZhbCk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g cmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAsCj4gKwkJCQlkcnYtPm9mZnNldHNbYmFua10gKyBEUlBf RUNDX0VSUk9SX1NUQVRVUzEsCj4gKwkJCQkmc2JfZXJyX2NudCk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwlzYl9lcnJfY250ICY9IEVDQ19TQl9FUlJfQ09VTlRfTUFTSzsKPiAr CXNiX2Vycl9jbnQgPj49IEVDQ19TQl9FUlJfQ09VTlRfU0hJRlQ7Cj4gKwllZGFjX3ByaW50ayhL RVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJyb3IgY291bnQ6IDB4JTR4XG4iLAo+ ICsJCXNiX2Vycl9jbnQpOwo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAo+ ICsJCQkJZHJ2LT5vZmZzZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJPUl9TVEFUVVMwLAo+ICsJCQkJ JnNiX2Vycl93YXlzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCXNiX2Vycl93 YXlzID0gc2JfZXJyX3dheXMgJiBFQ0NfU0JfRVJSX1dBWVNfTUFTSzsKPiArCj4gKwllZGFjX3By aW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJyb3Igd2F5czogMHglNHhc biIsCj4gKwkJc2JfZXJyX3dheXMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKwoK b25lIG5ld2xpbmUgaXMgZW5vdWdoLgoKPiArc3RhdGljIGludCBkdW1wX3N5bl9yZWcoc3RydWN0 IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0bCwKPiArCQkJIGludCBlcnJfdHlwZSwgdTMy IGJhbmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRy diA9IGVkZXZfY3RsLT5wdnRfaW5mbzsKPiArCj4gKwlzd2l0Y2ggKGVycl90eXBlKSB7Cj4gKwlj YXNlIExMQ0NfRFJBTV9DRToKPiArCQlyZXQgPSBkdW1wX2RycF9zYl9zeW5fcmVnKGRydiwgYmFu ayk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIExMQ0NfRFJBTV9VRToKPiArCQlyZXQgPSBkdW1wX2Ry cF9kYl9zeW5fcmVnKGRydiwgYmFuayk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIExMQ0NfVFJBTV9D RToKPiArCQlyZXQgPSBkdW1wX3RycF9zYl9zeW5fcmVnKGRydiwgYmFuayk7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIExMQ0NfVFJBTV9VRToKPiArCQlyZXQgPSBkdW1wX3RycF9kYl9zeW5fcmVnKGRy diwgYmFuayk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJcmV0ID0gcWNvbV9sbGNjX2NsZWFyX2Vycm9ycyhlcnJfdHlwZSwgZHJ2KTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwllcnJvcnNbZXJyX3R5cGVdLmZ1bmMo ZWRldl9jdGwsIDAsIGJhbmssIGVycm9yc1tlcnJfdHlwZV0ubXNnKTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgcWNvbV9sbGNjX2NoZWNrX2NhY2hl X2Vycm9ycwo+ICsJCShzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkZXZfY3RsKQoKUGxl YXNlIGRvbid0IHNwbGl0IHRoZSBmdW5jdGlvbiBuYW1lIGZyb20gdGhlIGFyZ3MuCgpzdGF0aWMg aXJxcmV0dXJuX3QKcWNvbV9sbGNjX2NoZWNrX2NhY2hlX2Vycm9ycyhzdHJ1Y3QgZWRhY19kZXZp Y2VfY3RsX2luZm8gKmVkZXZfY3RsKQoKaXMgYSBiaXQgYmV0dGVyLCBmb3IgZXhhbXBsZS4KCj4g K3sKPiArCWludCByZXQ7Cj4gKwl1MzIgZHJwX2Vycm9yOwo+ICsJdTMyIHRycF9lcnJvcjsKPiAr CXN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYgPSBlZGV2X2N0bC0+cHZ0X2luZm87Cj4gKwl1MzIg aTsKPiArCWlycXJldHVybl90IGlycV9yYyA9IElSUV9OT05FOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBkcnYtPm51bV9iYW5rczsgaSsrKSB7Cj4gKwkJLyogTG9vayBmb3IgRGF0YSBSQU0gZXJy b3JzICovCj4gKwkJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAsCj4gKwkJCQlkcnYtPm9m ZnNldHNbaV0gKyBEUlBfSU5URVJSVVBUX1NUQVRVUywKPiArCQkJCSZkcnBfZXJyb3IpOwo+ICsJ CWlmIChyZXQpCj4gKwkJCXJldHVybiBpcnFfcmM7Cj4gKwo+ICsJCWlmIChkcnBfZXJyb3IgJiBT Ql9FQ0NfRVJST1IpIHsKPiArCQkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsCj4g KwkJCQkiU2luZ2xlIEJpdCBFcnJvciBkZXRlY3RlZCBpbiBEYXRhIFJhbVxuIik7Cj4gKwkJCWR1 bXBfc3luX3JlZyhlZGV2X2N0bCwgTExDQ19EUkFNX0NFLCBpKTsKPiArCQkJaXJxX3JjID0gSVJR X0hBTkRMRUQ7Cj4gKwkJfSBlbHNlIGlmIChkcnBfZXJyb3IgJiBEQl9FQ0NfRVJST1IpIHsKPiAr CQkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsCj4gKwkJCQkiRG91YmxlIEJpdCBF cnJvciBkZXRlY3RlZCBpbiBEYXRhIFJhbVxuIik7Cj4gKwkJCWR1bXBfc3luX3JlZyhlZGV2X2N0 bCwgTExDQ19EUkFNX1VFLCBpKTsKPiArCQkJaXJxX3JjID0gSVJRX0hBTkRMRUQ7Cj4gKwkJfQo+ ICsKPiArCQkvKiBMb29rIGZvciBUYWcgUkFNIGVycm9ycyAqLwo+ICsJCXJldCA9IHJlZ21hcF9y ZWFkKGRydi0+cmVnbWFwLAo+ICsJCQkJZHJ2LT5vZmZzZXRzW2ldICsgVFJQX0lOVEVSUlVQVF8w X1NUQVRVUywKPiArCQkJCSZ0cnBfZXJyb3IpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBp cnFfcmM7Cj4gKwkJaWYgKHRycF9lcnJvciAmIFNCX0VDQ19FUlJPUikgewo+ICsJCQllZGFjX3By aW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywKPiArCQkJCSJTaW5nbGUgQml0IEVycm9yIGRldGVj dGVkIGluIFRhZyBSYW1cbiIpOwo+ICsJCQlkdW1wX3N5bl9yZWcoZWRldl9jdGwsIExMQ0NfVFJB TV9DRSwgaSk7Cj4gKwkJCWlycV9yYyA9IElSUV9IQU5ETEVEOwo+ICsJCX0gZWxzZSBpZiAodHJw X2Vycm9yICYgREJfRUNDX0VSUk9SKSB7Cj4gKwkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURB Q19MTENDLAo+ICsJCQkJIkRvdWJsZSBCaXQgRXJyb3IgZGV0ZWN0ZWQgaW4gVGFnIFJhbVxuIik7 Cj4gKwkJCWR1bXBfc3luX3JlZyhlZGV2X2N0bCwgTExDQ19UUkFNX1VFLCBpKTsKPiArCQkJaXJx X3JjID0gSVJRX0hBTkRMRUQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBpcnFfcmM7Cj4g K30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBsbGNjX2VjY19pcnFfaGFuZGxlcgo+ICsJCQko aW50IGlycSwgdm9pZCAqZWRldl9jdGwpCgpUaGF0IGxvb2tzIGxpa2UgYSB1c2VsZXNzIHdyYXBw ZXIsIGdldCByaWQgb2YgaXQuCgo+ICt7Cj4gKwlyZXR1cm4gcWNvbV9sbGNjX2NoZWNrX2NhY2hl X2Vycm9ycyhlZGV2X2N0bCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcWNvbV9sbGNjX2VycF9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwl1 MzIgZWNjX2lycTsKPiArCXN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRldl9jdGw7Cj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IGxsY2NfZHJ2X2Rh dGEgKmxsY2NfZHJpdl9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CgpQbGVhc2Ugc29y dCBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZXMgZGVjbGFyYXRpb24gaW4gYSByZXZlcnNlIGNocmlz dG1hcwp0cmVlIG9yZGVyOgoKCTx0eXBlPiBsb25nZXN0X3ZhcmlhYmxlX25hbWU7Cgk8dHlwZT4g c2hvcnRlcl92YXJfbmFtZTsKCTx0eXBlPiBldmVuX3Nob3J0ZXI7Cgk8dHlwZT4gaTsKCkRpdHRv IGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zLgo=