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: [v2,3/3] EDAC, skx_edac: Add address translation for non-volatile DIMMs From: Borislav Petkov Message-Id: <20181016085831.GD5212@zn.tnic> Date: Tue, 16 Oct 2018 10:58:32 +0200 To: Tony Luck Cc: "Rafael J. Wysocki" , Qiuxu Zhuo , Aristeu Rozanski , Mauro Carvalho Chehab , linux-edac@vger.kernel.org, linux-acpi@vger.kernel.org List-ID: T24gVGh1LCBPY3QgMTEsIDIwMTggYXQgMDI6MTI6MzZQTSAtMDcwMCwgVG9ueSBMdWNrIHdyb3Rl Ogo+IEZyb206IFFpdXh1IFpodW8gPHFpdXh1LnpodW9AaW50ZWwuY29tPgo+IAo+IEN1cnJlbnQg c2t4X2VkYWMgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBhZGRyZXNzIHRyYW5zbGF0aW9uIGZvcgo+ IG5vbi12b2xhdGlsZSBESU1Ncy4KPiAKPiBUaGUgQUNQSSBBRFhMIERTTSBtZXRob2Qgc3VwcG9y dCBhZGRyZXNzIHRyYW5zbGF0aW9uIGZvciBib3RoCj4gdm9sYXRpbGUgRElNTXMgYW5kIG5vbi12 b2xhdGlsZSBESU1Ncy4gU28gc3dpdGNoIHNreF9lZGFjIHRvIHVzZQo+IHRoZSB3cmFwcGVkIEFD UEkgRFNNIG1ldGhvZHMsIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBhbmQgdGhlcmUgYXJlCj4gbm9u LXZvbGF0aWxlIERJTU1zIHBvcHVsYXRlZCBvbiB0aGUgc3lzdGVtLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IFFpdXh1IFpodW8gPHFpdXh1LnpodW9AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFRv bnkgTHVjayA8dG9ueS5sdWNrQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9lZGFjL0tjb25m aWcgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2VkYWMvc2t4X2VkYWMuYyB8IDE5MSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTc5IGlu c2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Vk YWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCj4gaW5kZXggNTczMDRiMmU5ODlmLi5m ZmQzNDljMTI0NzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKPiArKysgYi9k cml2ZXJzL2VkYWMvS2NvbmZpZwo+IEBAIC0yMzQsNiArMjM0LDcgQEAgY29uZmlnIEVEQUNfU0tY Cj4gIAlkZXBlbmRzIG9uIFBDSSAmJiBYODZfNjQgJiYgWDg2X01DRV9JTlRFTCAmJiBQQ0lfTU1D T05GSUcKPiAgCWRlcGVuZHMgb24gQUNQSV9ORklUIHx8ICFBQ1BJX05GSVQgIyBpZiBBQ1BJX05G SVQ9bSwgRURBQ19TS1ggY2FuJ3QgYmUgeQo+ICAJc2VsZWN0IERNSQo+ICsJc2VsZWN0IEFDUElf QURYTAo+ICAJaGVscAo+ICAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJl Y3Rpb24gdGhlIEludGVsCj4gIAkgIFNreWxha2Ugc2VydmVyIEludGVncmF0ZWQgTWVtb3J5IENv bnRyb2xsZXJzLiBJZiB5b3VyCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9za3hfZWRhYy5j IGIvZHJpdmVycy9lZGFjL3NreF9lZGFjLmMKPiBpbmRleCBhNzEwMTY5YWJkYmMuLjU5ODU2NGY5 YzRiMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYwo+ICsrKyBiL2RyaXZl cnMvZWRhYy9za3hfZWRhYy5jCj4gQEAgLTI2LDYgKzI2LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4 L2JpdG1hcC5oPgo+ICAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+Cj4gICNpbmNsdWRlIDxsaW51 eC9tb2RfZGV2aWNldGFibGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2FkeGwuaD4KPiAgI2luY2x1 ZGUgPGFjcGkvbmZpdC5oPgo+ICAjaW5jbHVkZSA8YXNtL2NwdV9kZXZpY2VfaWQuaD4KPiAgI2lu Y2x1ZGUgPGFzbS9pbnRlbC1mYW1pbHkuaD4KPiBAQCAtMzUsNiArMzYsNyBAQAo+ICAjaW5jbHVk ZSAiZWRhY19tb2R1bGUuaCIKPiAgCj4gICNkZWZpbmUgRURBQ19NT0RfU1RSICAgICJza3hfZWRh YyIKPiArI2RlZmluZSBNU0dfU0laRQkxMDI0Cj4gIAo+ICAvKgo+ICAgKiBEZWJ1ZyBtYWNyb3MK PiBAQCAtNTQsNiArNTYsMjYgQEAKPiAgc3RhdGljIExJU1RfSEVBRChza3hfZWRhY19saXN0KTsK PiAgCj4gIHN0YXRpYyB1NjQgc2t4X3RvbG0sIHNreF90b2htOwo+ICtzdGF0aWMgaW50IG52ZGlt bV9jb3VudDsKPiArc3RhdGljIHU2NCAqYWR4bF92YWx1ZXM7Cj4gKwo+ICtlbnVtIHsKPiArCUlO REVYX1NPQ0tFVCwKPiArCUlOREVYX01FTUNUUkwsCj4gKwlJTkRFWF9DSEFOTkVMLAo+ICsJSU5E RVhfRElNTSwKPiArCUlOREVYX01BWAo+ICt9Owo+ICtzdGF0aWMgY2hhciBjb21wb25lbnRfbmFt ZXNbXVszMl0gPSB7Cj4gKwlbSU5ERVhfU09DS0VUXQk9ICJQcm9jZXNzb3JTb2NrZXRJZCIsCj4g KwlbSU5ERVhfTUVNQ1RSTF0JPSAiTWVtb3J5Q29udHJvbGxlcklkIiwKPiArCVtJTkRFWF9DSEFO TkVMXQk9ICJDaGFubmVsSWQiLAo+ICsJW0lOREVYX0RJTU1dCT0gIkRpbW1TbG90SWQiLAo+ICt9 Owo+ICsKPiArc3RhdGljIGludCBjb21wb25lbnRfaW5kaWNlc1tBUlJBWV9TSVpFKGNvbXBvbmVu dF9uYW1lcyldOwo+ICtzdGF0aWMgaW50IGFkeGxfY29tcG9uZW50X2NvdW50Owo+ICtzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0ICphZHhsX2NvbXBvbmVudF9uYW1lczsKPiAgCj4gICNkZWZpbmUg TlVNX0lNQwkJCTIJLyogbWVtb3J5IGNvbnRyb2xsZXJzIHBlciBzb2NrZXQgKi8KPiAgI2RlZmlu ZSBOVU1fQ0hBTk5FTFMJCTMJLyogY2hhbm5lbHMgcGVyIG1lbW9yeSBjb250cm9sbGVyICovCj4g QEAgLTEwMiwxMSArMTI0LDExIEBAIHN0cnVjdCBkZWNvZGVkX2FkZHIgewo+ICAJdTY0CWFkZHI7 Cj4gIAlpbnQJc29ja2V0Owo+ICAJaW50CWltYzsKPiAtCWludAljaGFubmVsOwo+ICsJdTY0CWNo YW5uZWw7Cj4gIAl1NjQJY2hhbl9hZGRyOwo+ICAJaW50CXNrdHdheXM7Cj4gIAlpbnQJY2hhbndh eXM7Cj4gLQlpbnQJZGltbTsKPiArCXU2NAlkaW1tOwo+ICAJaW50CXJhbms7Cj4gIAlpbnQJY2hh bm5lbF9yYW5rOwo+ICAJdTY0CXJhbmtfYWRkcmVzczsKPiBAQCAtMzkzLDYgKzQxNSw4IEBAIHN0 YXRpYyBpbnQgZ2V0X252ZGltbV9pbmZvKHN0cnVjdCBkaW1tX2luZm8gKmRpbW0sIHN0cnVjdCBz a3hfaW1jICppbWMsCj4gIAl1MTYgZmxhZ3M7Cj4gIAl1NjQgc2l6ZSA9IDA7Cj4gIAo+ICsJbnZk aW1tX2NvdW50Kys7Cj4gKwo+ICAJZGV2X2hhbmRsZSA9IEFDUElfTkZJVF9CVUlMRF9ERVZJQ0Vf SEFORExFKGRpbW1ubywgY2hhbiwgaW1jLT5sbWMsCj4gIAkJCQkJCSAgIGltYy0+c3JjX2lkLCAw KTsKPiAgCj4gQEAgLTY4Miw3ICs3MDYsNyBAQCBzdGF0aWMgYm9vbCBza3hfc2FkX2RlY29kZShz dHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMpCj4gIAlyZXMtPmltYyA9IEdFVF9CSVRGSUVMRChkLT5t Y3JvdXRlLCBsY2hhbiAqIDMsIGxjaGFuICogMyArIDIpOwo+ICAJcmVzLT5jaGFubmVsID0gR0VU X0JJVEZJRUxEKGQtPm1jcm91dGUsIGxjaGFuICogMiArIDE4LCBsY2hhbiAqIDIgKyAxOSk7Cj4g IAo+IC0JZWRhY19kYmcoMiwgIiVsbHg6IHNvY2tldD0lZCBpbWM9JWQgY2hhbm5lbD0lZFxuIiwK PiArCWVkYWNfZGJnKDIsICIlbGx4OiBzb2NrZXQ9JWQgaW1jPSVkIGNoYW5uZWw9JWxsdVxuIiwK ClByZXBlbmQgaGV4IGZvcm1hdHRpbmcgd2l0aCAiMHgiLiBDaGVjayB0aGUgd2hvbGUgcGF0Y2gg cGxzLgoKPiAgCQkgcmVzLT5hZGRyLCByZXMtPnNvY2tldCwgcmVzLT5pbWMsIHJlcy0+Y2hhbm5l bCk7Cj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+IEBAIC04MTgsNyArODQyLDcgQEAgc3RhdGljIGJv b2wgc2t4X3Jpcl9kZWNvZGUoc3RydWN0IGRlY29kZWRfYWRkciAqcmVzKQo+ICAJcmVzLT5kaW1t ID0gY2hhbl9yYW5rIC8gNDsKPiAgCXJlcy0+cmFuayA9IGNoYW5fcmFuayAlIDQ7Cj4gIAo+IC0J ZWRhY19kYmcoMiwgIiVsbHg6IGRpbW09JWQgcmFuaz0lZCBjaGFuX3Jhbms9JWQgcmFua19hZGRy PSVsbHhcbiIsCj4gKwllZGFjX2RiZygyLCAiJWxseDogZGltbT0lbGx1IHJhbms9JWQgY2hhbl9y YW5rPSVkIHJhbmtfYWRkcj0lbGx4XG4iLAo+ICAJCSByZXMtPmFkZHIsIHJlcy0+ZGltbSwgcmVz LT5yYW5rLAo+ICAJCSByZXMtPmNoYW5uZWxfcmFuaywgcmVzLT5yYW5rX2FkZHJlc3MpOwo+ICAJ cmV0dXJuIHRydWU7Cj4gQEAgLTg5NCwxMiArOTE4LDQ4IEBAIHN0YXRpYyBib29sIHNreF9kZWNv ZGUoc3RydWN0IGRlY29kZWRfYWRkciAqcmVzKQo+ICAJCXNreF9yaXJfZGVjb2RlKHJlcykgJiYg c2t4X21hZF9kZWNvZGUocmVzKTsKPiAgfQo+ICAKPiArc3RhdGljIGJvb2wgc2t4X2RzbV9kZWNv ZGUodTY0IGFkZHIsIGNoYXIgKm1zZywgaW50IG1zZ2xlbiwKPiArCQkJICAgdTY0ICpzb2NrLCB1 NjQgKmltYywKPiArCQkJICAgdTY0ICpjaGFuLCB1NjQgKmRpbW0pCj4gKwo+ICt7Cj4gKwlpbnQg aSwgbGVuID0gMDsKPiArCj4gKwlpZiAoYWRkciA+PSBza3hfdG9obSB8fCAoYWRkciA+PSBza3hf dG9sbSAmJiBhZGRyIDwgQklUX1VMTCgzMikpKSB7Cj4gKwkJZWRhY19kYmcoMCwgIkFkZHJlc3Mg JWxseCBvdXQgb2YgcmFuZ2VcbiIsIGFkZHIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiAr Cj4gKwlpZiAoYWR4bF9kZWNvZGUoYWRkciwgYWR4bF92YWx1ZXMpKSB7Cj4gKwkJZWRhY19kYmco MCwgIkZhaWxlZCB0byBkZWNvZGUgMHglbGx4XG4iLCBhZGRyKTsKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwl9Cj4gKwo+ICsJKnNvY2sgPSBhZHhsX3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRF WF9TT0NLRVRdXTsKPiArCSppbWMgPSBhZHhsX3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRF WF9NRU1DVFJMXV07CgpBbGlnbiBhbGwgJz0nIHZlcnRpY2FsbHkuCgo+ICsJKmNoYW4gPSBhZHhs X3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRFWF9DSEFOTkVMXV07Cj4gKwkqZGltbSA9IGFk eGxfdmFsdWVzW2NvbXBvbmVudF9pbmRpY2VzW0lOREVYX0RJTU1dXTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgYWR4bF9jb21wb25lbnRfY291bnQ7IGkrKykgewo+ICsJCWlmIChhZHhsX3ZhbHVl c1tpXSA9PSB+MHgwdWxsKQo+ICsJCQljb250aW51ZTsKPiArCQlsZW4gKz0gc25wcmludGYobXNn ICsgbGVuLCBtc2dsZW4sICIgJXM6MHglbGx4IiwKPiArCQkJCWFkeGxfY29tcG9uZW50X25hbWVz W2ldLCBhZHhsX3ZhbHVlc1tpXSk7Cj4gKwo+ICsJCWlmIChtc2dsZW4gLSBsZW4gPD0gMCkKPiAr CQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gIHN0YXRpYyB2 b2lkIHNreF9tY2Vfb3V0cHV0X2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKPiAgCQkJ CSBjb25zdCBzdHJ1Y3QgbWNlICptLAo+IC0JCQkJIHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykK PiArCQkJCSBzdHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMsCj4gKwkJCQkgY2hhciAqbXNnKQo+ICB7 Cj4gIAllbnVtIGh3X2V2ZW50X21jX2Vycl90eXBlIHRwX2V2ZW50Owo+IC0JY2hhciAqdHlwZSwg Km9wdHlwZSwgbXNnWzI1Nl07Cj4gKwljaGFyICp0eXBlLCAqb3B0eXBlOwo+ICAJYm9vbCByaXB2 ID0gR0VUX0JJVEZJRUxEKG0tPm1jZ3N0YXR1cywgMCwgMCk7Cj4gIAlib29sIG92ZXJmbG93ID0g R0VUX0JJVEZJRUxEKG0tPnN0YXR1cywgNjIsIDYyKTsKPiAgCWJvb2wgdW5jb3JyZWN0ZWRfZXJy b3IgPSBHRVRfQklURklFTEQobS0+c3RhdHVzLCA2MSwgNjEpOwo+IEBAIC05NjAsMTMgKzEwMjAs MTEgQEAgc3RhdGljIHZvaWQgc2t4X21jZV9vdXRwdXRfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5m byAqbWNpLAo+ICAJCX0KPiAgCX0KPiAgCj4gLQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAo+ IC0JCSAiJXMlcyBlcnJfY29kZTolMDR4OiUwNHggc29ja2V0OiVkIGltYzolZCByYW5rOiVkIGJn OiVkIGJhOiVkIHJvdzoleCBjb2w6JXgiLAo+ICsJc25wcmludGYobXNnLCBNU0dfU0laRSwKPiAr CQkgIiVzJXMgZXJyX2NvZGU6JTA0eDolMDR4ICVzIiwKPiAgCQkgb3ZlcmZsb3cgPyAiIE9WRVJG TE9XIiA6ICIiLAo+ICAJCSAodW5jb3JyZWN0ZWRfZXJyb3IgJiYgcmVjb3ZlcmFibGUpID8gIiBy ZWNvdmVyYWJsZSIgOiAiIiwKPiAtCQkgbXNjb2QsIGVycmNvZGUsCj4gLQkJIHJlcy0+c29ja2V0 LCByZXMtPmltYywgcmVzLT5yYW5rLAo+IC0JCSByZXMtPmJhbmtfZ3JvdXAsIHJlcy0+YmFua19h ZGRyZXNzLCByZXMtPnJvdywgcmVzLT5jb2x1bW4pOwo+ICsJCSBtc2NvZCwgZXJyY29kZSwgbXNn ICsgTVNHX1NJWkUpOwo+ICAKPiAgCWVkYWNfZGJnKDAsICIlc1xuIiwgbXNnKTsKPiAgCj4gQEAg LTk3NywxMyArMTAzNSwzMyBAQCBzdGF0aWMgdm9pZCBza3hfbWNlX291dHB1dF9lcnJvcihzdHJ1 Y3QgbWVtX2N0bF9pbmZvICptY2ksCj4gIAkJCSAgICAgb3B0eXBlLCBtc2cpOwo+ICB9Cj4gIAo+ ICtzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqZ2V0X21jaSh1NjQgc3JjX2lkLCB1NjQgbG1j KQo+ICt7Cj4gKwlzdHJ1Y3Qgc2t4X2RldiAqZDsKPiArCj4gKwlpZiAobG1jID4gTlVNX0lNQyAt IDEpIHsKPiArCQlza3hfcHJpbnRrKEtFUk5fRVJSLCAiQmFkIG1jIyAweCVsbHhcbiIsIGxtYyk7 Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAm c2t4X2VkYWNfbGlzdCwgbGlzdCkgewo+ICsJCWlmIChkLT5pbWNbMF0uc3JjX2lkID09IHNyY19p ZCkKPiArCQkJcmV0dXJuIGQtPmltY1tsbWNdLm1jaTsKPiArCX0KPiArCj4gKwlza3hfcHJpbnRr KEtFUk5fRVJSLCAiTm8gbWNpIGZvciBzcmNfaWQgJWxseCBsbWMgJWxseFxuIiwgc3JjX2lkLCBs bWMpOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHNreF9tY2Vf Y2hlY2tfZXJyb3Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWws Cj4gIAkJCSAgICAgICB2b2lkICpkYXRhKQo+ICB7Cj4gIAlzdHJ1Y3QgbWNlICptY2UgPSAoc3Ry dWN0IG1jZSAqKWRhdGE7Cj4gIAlzdHJ1Y3QgZGVjb2RlZF9hZGRyIHJlczsKPiAgCXN0cnVjdCBt ZW1fY3RsX2luZm8gKm1jaTsKPiAtCWNoYXIgKnR5cGU7Cj4gKwl1NjQgc29ja2V0LCBtZW1jdHJs Owo+ICsJY2hhciAqdHlwZSwgKm1zZzsKPiAgCj4gIAlpZiAoZWRhY19nZXRfcmVwb3J0X3N0YXR1 cygpID09IEVEQUNfUkVQT1JUSU5HX0RJU0FCTEVEKQo+ICAJCXJldHVybiBOT1RJRllfRE9ORTsK PiBAQCAtOTkyLDExICsxMDcwLDM1IEBAIHN0YXRpYyBpbnQgc2t4X21jZV9jaGVja19lcnJvcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKPiAgCWlmICgobWNl LT5zdGF0dXMgJiAweGVmZmYpID4+IDcgIT0gMSB8fCAhKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRV U19BRERSVikpCj4gIAkJcmV0dXJuIE5PVElGWV9ET05FOwo+ICAKPiArCW1zZyA9IGt6YWxsb2Mo TVNHX1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKCllvdSBhbGxvY2F0ZSB0aGlzIG9uIGV2ZXJ5IG5v dGlmaWVyIGNhbGwuIFdoeSBub3QgYWxsb2NhdGUgaXQgb25jZSBvbgpkcml2ZXIgaW5pdD8KCkFs c28sIHdoYXQncyB0aGF0IG1hZ2ljICIqIDIiIHRoaW5nPwoKPiArCWlmICghbXNnKQo+ICsJCXJl dHVybiBOT1RJRllfRE9ORTsKPiArCj4gKwlpZiAoYWR4bF9jb21wb25lbnRfY291bnQpCj4gKwkJ Z290byBkc21fZGVjb2Rpbmc7Cj4gKwo+ICAJcmVzLmFkZHIgPSBtY2UtPmFkZHI7Cj4gIAlpZiAo IXNreF9kZWNvZGUoJnJlcykpCj4gIAkJcmV0dXJuIE5PVElGWV9ET05FOwo+ICAJbWNpID0gcmVz LmRldi0+aW1jW3Jlcy5pbWNdLm1jaTsKPiAgCj4gKwlzbnByaW50Zihtc2cgKyBNU0dfU0laRSwg TVNHX1NJWkUsCgpUaGF0J3MganVtcGluZyBvdmVyIHRoZSBmaXJzdCBNU0dfU0laRS4gV2h5PwoK PiArCQkgInNvY2tldDolZCBpbWM6JWQgY2hhbjolbGx1IGRpbW06JWxsdSByYW5rOiVkIGJnOiVk IGJhOiVkIHJvdzoleCBjb2w6JXgiLAo+ICsJCSByZXMuc29ja2V0LCByZXMuaW1jLCByZXMuY2hh bm5lbCwgcmVzLmRpbW0sIHJlcy5yYW5rLAo+ICsJCSByZXMuYmFua19ncm91cCwgcmVzLmJhbmtf YWRkcmVzcywgcmVzLnJvdywgcmVzLmNvbHVtbik7Cj4gKwo+ICsJZ290byBkZWNvZGVkOwo+ICsK PiArZHNtX2RlY29kaW5nOgo+ICsJaWYgKCFza3hfZHNtX2RlY29kZShtY2UtPmFkZHIsIG1zZyAr IE1TR19TSVpFLCBNU0dfU0laRSwKPiArCQkJICAgICZzb2NrZXQsICZtZW1jdHJsLCAmcmVzLmNo YW5uZWwsICZyZXMuZGltbSkpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJbWNpID0gZ2V0X21jaShz b2NrZXQsIG1lbWN0cmwpOwo+ICsJaWYgKCFtY2kpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICtkZWNv ZGVkOgo+ICAJaWYgKG1jZS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19NQ0lQKQo+ICAJCXR5cGUg PSAiRXhjZXB0aW9uIjsKPiAgCWVsc2UKPiBAQCAtMTAxNSw4ICsxMTE3LDEwIEBAIHN0YXRpYyBp bnQgc2t4X21jZV9jaGVja19lcnJvcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25l ZCBsb25nIHZhbCwKPiAgCQkJICAiJXUgQVBJQyAleFxuIiwgbWNlLT5jcHV2ZW5kb3IsIG1jZS0+ Y3B1aWQsCj4gIAkJCSAgbWNlLT50aW1lLCBtY2UtPnNvY2tldGlkLCBtY2UtPmFwaWNpZCk7Cj4g IAo+IC0Jc2t4X21jZV9vdXRwdXRfZXJyb3IobWNpLCBtY2UsICZyZXMpOwo+ICsJc2t4X21jZV9v dXRwdXRfZXJyb3IobWNpLCBtY2UsICZyZXMsIG1zZyk7CgpBaCwgdGhlcmUgaXQgaXMgLSB0aGlz IGZ1bmN0aW9uIHdyaXRlcyB0aGUgZmlyc3QgMTAyNCBieXRlcy4gU28gaWYgaXQgaXMKYSBzaG9y dCBmaXJzdCBlcnJvcnMsIHRoZXJlJ2xsIGJlIGEgYnVuY2ggb2YgJ1wwJyBpbiBiZXR3ZWVuLgoK V2h5IGlzbid0IHRoZSBhYm92ZSBzbnByaW50ZigpIHNpbXBseSBoYXBwZW5pbmcgaW4gc2t4X21j ZV9vdXRwdXRfZXJyb3IoKT8KClRoaXMgd2hvbGUgY29kZSBuZWVkcyBhIHJlb3JnIC0gbGlrZSBz a3hfbWNlX2NoZWNrX2Vycm9yKCkgZG9lcyBhICpsb3QqCm9mIG90aGVyIHN0dWZmIHRvby4KCj4g IAo+ICtvdXQ6Cj4gKwlrZnJlZShtc2cpOwo+ICAJcmV0dXJuIE5PVElGWV9ET05FOwo+ICB9Cj4g IAo+IEBAIC0xMDkwLDYgKzExOTQsNTQgQEAgc3RhdGljIHZvaWQgc2t4X3JlbW92ZSh2b2lkKQo+ ICAJfQo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBfX2luaXQgc2t4X2RzbV9nZXQodm9pZCkKPiAr ewo+ICsJY29uc3QgY2hhciAqIGNvbnN0ICpuYW1lczsKPiArCWludCBpLCBqOwo+ICsKPiArCW5h bWVzID0gYWR4bF9nZXRfY29tcG9uZW50X25hbWVzKCk7Cj4gKwlpZiAoIW5hbWVzKSB7Cj4gKwkJ c2t4X3ByaW50ayhLRVJOX05PVElDRSwgIk5vIGZpcm13YXJlIHN1cHBvcnQgZm9yIGFkZHJlc3Mg dHJhbnNsYXRpb24uIik7Cj4gKwkJc2t4X3ByaW50ayhLRVJOX0NPTlQsICIgT25seSBkZWNvZGlu ZyBERFI0IGFkZHJlc3MhXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IElOREVYX01BWDsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsgbmFtZXNbal07IGorKykg ewo+ICsJCQlpZiAoIXN0cmNtcChjb21wb25lbnRfbmFtZXNbaV0sIG5hbWVzW2pdKSkgewo+ICsJ CQkJY29tcG9uZW50X2luZGljZXNbaV0gPSBqOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9 Cj4gKwo+ICsJCWlmICghbmFtZXNbal0pCj4gKwkJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWFk eGxfY29tcG9uZW50X25hbWVzID0gbmFtZXM7Cj4gKwl3aGlsZSAoKm5hbWVzKyspCj4gKwkJYWR4 bF9jb21wb25lbnRfY291bnQrKzsKPiArCj4gKwlhZHhsX3ZhbHVlcyA9IGtjYWxsb2MoYWR4bF9j b21wb25lbnRfY291bnQsIHNpemVvZigqYWR4bF92YWx1ZXMpLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghYWR4bF92YWx1ZXMpIHsKPiArCQlhZHhsX2NvbXBvbmVudF9jb3VudCA9IDA7Cj4gKwkJZWRh Y19kYmcoMCwgIk5vIG1lbW9yeSBmb3IgYWR4bF9kZWNvZGUoKVxuIik7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuOwo+ICtlcnI6Cj4gKwlza3hfcHJpbnRrKEtFUk5fRVJSLCAiJyVzJyBpcyBub3QgbWF0 Y2hlZCBmcm9tIERTTSBwYXJhbWV0ZXJzOiAiLAo+ICsJCSAgIGNvbXBvbmVudF9uYW1lc1tpXSk7 Cj4gKwlmb3IgKGogPSAwOyBuYW1lc1tqXTsgaisrKQo+ICsJCXNreF9wcmludGsoS0VSTl9DT05U LCAiJXMgIiwgbmFtZXNbal0pOwo+ICsJc2t4X3ByaW50ayhLRVJOX0NPTlQsICJcbiIpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgc2t4X2RzbV9wdXQodm9pZCkKPiArewo+ICsJa2Zy ZWUoYWR4bF92YWx1ZXMpOwo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBza3hfaW5pdDoKPiAgICoJbWFr ZSBzdXJlIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBjb3JyZWN0IGNwdSBtb2RlbAo+IEBAIC0xMTU0 LDYgKzEzMDYsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBza3hfaW5pdCh2b2lkKQo+ICAJCX0KPiAg CX0KPiAgCj4gKwlpZiAobnZkaW1tX2NvdW50KQo+ICsJCXNreF9kc21fZ2V0KCk7Cj4gKwo+ICAJ LyogRW5zdXJlIHRoYXQgdGhlIE9QU1RBVEUgaXMgc2V0IGNvcnJlY3RseSBmb3IgUE9MTCBvciBO TUkgKi8KPiAgCW9wc3RhdGVfaW5pdCgpOwo+ICAKPiBAQCAtMTE3MCw2ICsxMzI1LDggQEAgc3Rh dGljIGludCBfX2luaXQgc2t4X2luaXQodm9pZCkKPiAgc3RhdGljIHZvaWQgX19leGl0IHNreF9l eGl0KHZvaWQpCj4gIHsKPiAgCWVkYWNfZGJnKDIsICJcbiIpOwo+ICsJaWYgKG52ZGltbV9jb3Vu dCkKPiArCQlza3hfZHNtX3B1dCgpOwo+ICAJbWNlX3VucmVnaXN0ZXJfZGVjb2RlX2NoYWluKCZz a3hfbWNlX2RlYyk7Cj4gIAlza3hfcmVtb3ZlKCk7Cj4gIAl0ZWFyZG93bl9za3hfZGVidWcoKTsK PiBAQCAtMTE4MCw2ICsxMzM3LDE0IEBAIG1vZHVsZV9leGl0KHNreF9leGl0KTsKPiAgCj4gIG1v ZHVsZV9wYXJhbShlZGFjX29wX3N0YXRlLCBpbnQsIDA0NDQpOwo+ICBNT0RVTEVfUEFSTV9ERVND KGVkYWNfb3Bfc3RhdGUsICJFREFDIEVycm9yIFJlcG9ydGluZyBzdGF0ZTogMD1Qb2xsLDE9Tk1J Iik7Cj4gK21vZHVsZV9wYXJhbV9zdHJpbmcoc29jaywgY29tcG9uZW50X25hbWVzWzBdLCBzaXpl b2YoY29tcG9uZW50X25hbWVzWzBdKSwgMDY0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0Moc29jaywg IlN0cmluZyB0byBnZXQgc29ja2V0IElEIik7Cj4gK21vZHVsZV9wYXJhbV9zdHJpbmcoaW1jLCBj b21wb25lbnRfbmFtZXNbMV0sIHNpemVvZihjb21wb25lbnRfbmFtZXNbMV0pLCAwNjQ0KTsKPiAr TU9EVUxFX1BBUk1fREVTQyhpbWMsICJTdHJpbmcgdG8gZ2V0IElNQyBJRCIpOwo+ICttb2R1bGVf cGFyYW1fc3RyaW5nKGNoYW4sIGNvbXBvbmVudF9uYW1lc1syXSwgc2l6ZW9mKGNvbXBvbmVudF9u YW1lc1syXSksIDA2NDQpOwo+ICtNT0RVTEVfUEFSTV9ERVNDKGNoYW4sICJTdHJpbmcgdG8gZ2V0 IGNoYW5uZWwgSUQiKTsKPiArbW9kdWxlX3BhcmFtX3N0cmluZyhkaW1tLCBjb21wb25lbnRfbmFt ZXNbM10sIHNpemVvZihjb21wb25lbnRfbmFtZXNbM10pLCAwNjQ0KTsKPiArTU9EVUxFX1BBUk1f REVTQyhkaW1tLCAiU3RyaW5nIHRvIGdldCBESU1NIElEIik7CgpTbyB0aGlzIGlzIG5vdCByZWFs bHkgdXNlci1mcmllbmRseSAtIGRvIHlvdSByZWFsbHkgZXhwZWN0IHBlb3BsZQp0byBtb2Rwcm9i ZSB0aGlzIHdpdGggNCBtb2R1bGUgcGFyYW1zIG1heGltdW0gd2hlbiB0aGUgZmlybXdhcmUgaGFz CmNoYW5nZWQ/CgphZHhsX2dldF9jb21wb25lbnRfbmFtZXMoKSBhbHJlYWR5IGdpdmVzIHRoZSBj b21wb25lbnQgbmFtZXMgYW5kIHlvdQpjb250cm9sIHdoYXQgZ2V0cyB3cml0dGVuIGluIHRoZXJl IHNvIHdoeSBkb2VzIHRoZSBkcml2ZXIgbmVlZCB0aG9zZSBhdAphbGw/CgpXb3JzdCBjYXNlIHlv dSBjYW4gZG8gc29tZSB0cml2aWFsIHBhdHRlcm4gbWF0Y2hpbmcgYnV0IGxldHRpbmcgdGhlIHVz ZXIKZmlndXJlIGl0IG91dCBpcyBzaW1wbHkgd3JvbmcsIElNTy4K