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: "Luck, Tony" Message-Id: <20181011211236.23525-4-tony.luck@intel.com> Date: Thu, 11 Oct 2018 14:12:36 -0700 To: "Rafael J. Wysocki" Cc: Qiuxu Zhuo , Tony Luck , Borislav Petkov , Aristeu Rozanski , Mauro Carvalho Chehab , linux-edac@vger.kernel.org, linux-acpi@vger.kernel.org List-ID: RnJvbTogUWl1eHUgWmh1byA8cWl1eHUuemh1b0BpbnRlbC5jb20+CgpDdXJyZW50IHNreF9lZGFj IGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYWRkcmVzcyB0cmFuc2xhdGlvbiBmb3IKbm9uLXZvbGF0 aWxlIERJTU1zLgoKVGhlIEFDUEkgQURYTCBEU00gbWV0aG9kIHN1cHBvcnQgYWRkcmVzcyB0cmFu c2xhdGlvbiBmb3IgYm90aAp2b2xhdGlsZSBESU1NcyBhbmQgbm9uLXZvbGF0aWxlIERJTU1zLiBT byBzd2l0Y2ggc2t4X2VkYWMgdG8gdXNlCnRoZSB3cmFwcGVkIEFDUEkgRFNNIG1ldGhvZHMsIGlm IHRoZXkgYXJlIHN1cHBvcnRlZCBhbmQgdGhlcmUgYXJlCm5vbi12b2xhdGlsZSBESU1NcyBwb3B1 bGF0ZWQgb24gdGhlIHN5c3RlbS4KClNpZ25lZC1vZmYtYnk6IFFpdXh1IFpodW8gPHFpdXh1Lnpo dW9AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5j b20+Ci0tLQogZHJpdmVycy9lZGFjL0tjb25maWcgICAgfCAgIDEgKwogZHJpdmVycy9lZGFjL3Nr eF9lZGFjLmMgfCAxOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQog MiBmaWxlcyBjaGFuZ2VkLCAxNzkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRl eCA1NzMwNGIyZTk4OWYuLmZmZDM0OWMxMjQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tj b25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTIzNCw2ICsyMzQsNyBAQCBjb25m aWcgRURBQ19TS1gKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODZfNjQgJiYgWDg2X01DRV9JTlRFTCAm JiBQQ0lfTU1DT05GSUcKIAlkZXBlbmRzIG9uIEFDUElfTkZJVCB8fCAhQUNQSV9ORklUICMgaWYg QUNQSV9ORklUPW0sIEVEQUNfU0tYIGNhbid0IGJlIHkKIAlzZWxlY3QgRE1JCisJc2VsZWN0IEFD UElfQURYTAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVj dGlvbiB0aGUgSW50ZWwKIAkgIFNreWxha2Ugc2VydmVyIEludGVncmF0ZWQgTWVtb3J5IENvbnRy b2xsZXJzLiBJZiB5b3VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYyBiL2Ry aXZlcnMvZWRhYy9za3hfZWRhYy5jCmluZGV4IGE3MTAxNjlhYmRiYy4uNTk4NTY0ZjljNGIyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvc2t4 X2VkYWMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2lu Y2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2FkeGwuaD4KICNpbmNsdWRlIDxhY3BpL25maXQuaD4KICNpbmNs dWRlIDxhc20vY3B1X2RldmljZV9pZC5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbC1mYW1pbHkuaD4K QEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgogCiAjZGVmaW5lIEVE QUNfTU9EX1NUUiAgICAic2t4X2VkYWMiCisjZGVmaW5lIE1TR19TSVpFCTEwMjQKIAogLyoKICAq IERlYnVnIG1hY3JvcwpAQCAtNTQsNiArNTYsMjYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoc2t4X2Vk YWNfbGlzdCk7CiAKIHN0YXRpYyB1NjQgc2t4X3RvbG0sIHNreF90b2htOworc3RhdGljIGludCBu dmRpbW1fY291bnQ7CitzdGF0aWMgdTY0ICphZHhsX3ZhbHVlczsKKworZW51bSB7CisJSU5ERVhf U09DS0VULAorCUlOREVYX01FTUNUUkwsCisJSU5ERVhfQ0hBTk5FTCwKKwlJTkRFWF9ESU1NLAor CUlOREVYX01BWAorfTsKK3N0YXRpYyBjaGFyIGNvbXBvbmVudF9uYW1lc1tdWzMyXSA9IHsKKwlb SU5ERVhfU09DS0VUXQk9ICJQcm9jZXNzb3JTb2NrZXRJZCIsCisJW0lOREVYX01FTUNUUkxdCT0g Ik1lbW9yeUNvbnRyb2xsZXJJZCIsCisJW0lOREVYX0NIQU5ORUxdCT0gIkNoYW5uZWxJZCIsCisJ W0lOREVYX0RJTU1dCT0gIkRpbW1TbG90SWQiLAorfTsKKworc3RhdGljIGludCBjb21wb25lbnRf aW5kaWNlc1tBUlJBWV9TSVpFKGNvbXBvbmVudF9uYW1lcyldOworc3RhdGljIGludCBhZHhsX2Nv bXBvbmVudF9jb3VudDsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgKmFkeGxfY29tcG9uZW50 X25hbWVzOwogCiAjZGVmaW5lIE5VTV9JTUMJCQkyCS8qIG1lbW9yeSBjb250cm9sbGVycyBwZXIg c29ja2V0ICovCiAjZGVmaW5lIE5VTV9DSEFOTkVMUwkJMwkvKiBjaGFubmVscyBwZXIgbWVtb3J5 IGNvbnRyb2xsZXIgKi8KQEAgLTEwMiwxMSArMTI0LDExIEBAIHN0cnVjdCBkZWNvZGVkX2FkZHIg ewogCXU2NAlhZGRyOwogCWludAlzb2NrZXQ7CiAJaW50CWltYzsKLQlpbnQJY2hhbm5lbDsKKwl1 NjQJY2hhbm5lbDsKIAl1NjQJY2hhbl9hZGRyOwogCWludAlza3R3YXlzOwogCWludAljaGFud2F5 czsKLQlpbnQJZGltbTsKKwl1NjQJZGltbTsKIAlpbnQJcmFuazsKIAlpbnQJY2hhbm5lbF9yYW5r OwogCXU2NAlyYW5rX2FkZHJlc3M7CkBAIC0zOTMsNiArNDE1LDggQEAgc3RhdGljIGludCBnZXRf bnZkaW1tX2luZm8oc3RydWN0IGRpbW1faW5mbyAqZGltbSwgc3RydWN0IHNreF9pbWMgKmltYywK IAl1MTYgZmxhZ3M7CiAJdTY0IHNpemUgPSAwOwogCisJbnZkaW1tX2NvdW50Kys7CisKIAlkZXZf aGFuZGxlID0gQUNQSV9ORklUX0JVSUxEX0RFVklDRV9IQU5ETEUoZGltbW5vLCBjaGFuLCBpbWMt PmxtYywKIAkJCQkJCSAgIGltYy0+c3JjX2lkLCAwKTsKIApAQCAtNjgyLDcgKzcwNiw3IEBAIHN0 YXRpYyBib29sIHNreF9zYWRfZGVjb2RlKHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykKIAlyZXMt PmltYyA9IEdFVF9CSVRGSUVMRChkLT5tY3JvdXRlLCBsY2hhbiAqIDMsIGxjaGFuICogMyArIDIp OwogCXJlcy0+Y2hhbm5lbCA9IEdFVF9CSVRGSUVMRChkLT5tY3JvdXRlLCBsY2hhbiAqIDIgKyAx OCwgbGNoYW4gKiAyICsgMTkpOwogCi0JZWRhY19kYmcoMiwgIiVsbHg6IHNvY2tldD0lZCBpbWM9 JWQgY2hhbm5lbD0lZFxuIiwKKwllZGFjX2RiZygyLCAiJWxseDogc29ja2V0PSVkIGltYz0lZCBj aGFubmVsPSVsbHVcbiIsCiAJCSByZXMtPmFkZHIsIHJlcy0+c29ja2V0LCByZXMtPmltYywgcmVz LT5jaGFubmVsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTgxOCw3ICs4NDIsNyBAQCBzdGF0aWMg Ym9vbCBza3hfcmlyX2RlY29kZShzdHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMpCiAJcmVzLT5kaW1t ID0gY2hhbl9yYW5rIC8gNDsKIAlyZXMtPnJhbmsgPSBjaGFuX3JhbmsgJSA0OwogCi0JZWRhY19k YmcoMiwgIiVsbHg6IGRpbW09JWQgcmFuaz0lZCBjaGFuX3Jhbms9JWQgcmFua19hZGRyPSVsbHhc biIsCisJZWRhY19kYmcoMiwgIiVsbHg6IGRpbW09JWxsdSByYW5rPSVkIGNoYW5fcmFuaz0lZCBy YW5rX2FkZHI9JWxseFxuIiwKIAkJIHJlcy0+YWRkciwgcmVzLT5kaW1tLCByZXMtPnJhbmssCiAJ CSByZXMtPmNoYW5uZWxfcmFuaywgcmVzLT5yYW5rX2FkZHJlc3MpOwogCXJldHVybiB0cnVlOwpA QCAtODk0LDEyICs5MTgsNDggQEAgc3RhdGljIGJvb2wgc2t4X2RlY29kZShzdHJ1Y3QgZGVjb2Rl ZF9hZGRyICpyZXMpCiAJCXNreF9yaXJfZGVjb2RlKHJlcykgJiYgc2t4X21hZF9kZWNvZGUocmVz KTsKIH0KIAorc3RhdGljIGJvb2wgc2t4X2RzbV9kZWNvZGUodTY0IGFkZHIsIGNoYXIgKm1zZywg aW50IG1zZ2xlbiwKKwkJCSAgIHU2NCAqc29jaywgdTY0ICppbWMsCisJCQkgICB1NjQgKmNoYW4s IHU2NCAqZGltbSkKKworeworCWludCBpLCBsZW4gPSAwOworCisJaWYgKGFkZHIgPj0gc2t4X3Rv aG0gfHwgKGFkZHIgPj0gc2t4X3RvbG0gJiYgYWRkciA8IEJJVF9VTEwoMzIpKSkgeworCQllZGFj X2RiZygwLCAiQWRkcmVzcyAlbGx4IG91dCBvZiByYW5nZVxuIiwgYWRkcik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlpZiAoYWR4bF9kZWNvZGUoYWRkciwgYWR4bF92YWx1ZXMpKSB7CisJCWVk YWNfZGJnKDAsICJGYWlsZWQgdG8gZGVjb2RlIDB4JWxseFxuIiwgYWRkcik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkqc29jayA9IGFkeGxfdmFsdWVzW2NvbXBvbmVudF9pbmRpY2VzW0lOREVY X1NPQ0tFVF1dOworCSppbWMgPSBhZHhsX3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRFWF9N RU1DVFJMXV07CisJKmNoYW4gPSBhZHhsX3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRFWF9D SEFOTkVMXV07CisJKmRpbW0gPSBhZHhsX3ZhbHVlc1tjb21wb25lbnRfaW5kaWNlc1tJTkRFWF9E SU1NXV07CisKKwlmb3IgKGkgPSAwOyBpIDwgYWR4bF9jb21wb25lbnRfY291bnQ7IGkrKykgewor CQlpZiAoYWR4bF92YWx1ZXNbaV0gPT0gfjB4MHVsbCkKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0g c25wcmludGYobXNnICsgbGVuLCBtc2dsZW4sICIgJXM6MHglbGx4IiwKKwkJCQlhZHhsX2NvbXBv bmVudF9uYW1lc1tpXSwgYWR4bF92YWx1ZXNbaV0pOworCisJCWlmIChtc2dsZW4gLSBsZW4gPD0g MCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdm9pZCBza3hf bWNlX291dHB1dF9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCQkJIGNvbnN0IHN0 cnVjdCBtY2UgKm0sCi0JCQkJIHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykKKwkJCQkgc3RydWN0 IGRlY29kZWRfYWRkciAqcmVzLAorCQkJCSBjaGFyICptc2cpCiB7CiAJZW51bSBod19ldmVudF9t Y19lcnJfdHlwZSB0cF9ldmVudDsKLQljaGFyICp0eXBlLCAqb3B0eXBlLCBtc2dbMjU2XTsKKwlj aGFyICp0eXBlLCAqb3B0eXBlOwogCWJvb2wgcmlwdiA9IEdFVF9CSVRGSUVMRChtLT5tY2dzdGF0 dXMsIDAsIDApOwogCWJvb2wgb3ZlcmZsb3cgPSBHRVRfQklURklFTEQobS0+c3RhdHVzLCA2Miwg NjIpOwogCWJvb2wgdW5jb3JyZWN0ZWRfZXJyb3IgPSBHRVRfQklURklFTEQobS0+c3RhdHVzLCA2 MSwgNjEpOwpAQCAtOTYwLDEzICsxMDIwLDExIEBAIHN0YXRpYyB2b2lkIHNreF9tY2Vfb3V0cHV0 X2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAkJfQogCX0KIAotCXNucHJpbnRmKG1z Zywgc2l6ZW9mKG1zZyksCi0JCSAiJXMlcyBlcnJfY29kZTolMDR4OiUwNHggc29ja2V0OiVkIGlt YzolZCByYW5rOiVkIGJnOiVkIGJhOiVkIHJvdzoleCBjb2w6JXgiLAorCXNucHJpbnRmKG1zZywg TVNHX1NJWkUsCisJCSAiJXMlcyBlcnJfY29kZTolMDR4OiUwNHggJXMiLAogCQkgb3ZlcmZsb3cg PyAiIE9WRVJGTE9XIiA6ICIiLAogCQkgKHVuY29ycmVjdGVkX2Vycm9yICYmIHJlY292ZXJhYmxl KSA/ICIgcmVjb3ZlcmFibGUiIDogIiIsCi0JCSBtc2NvZCwgZXJyY29kZSwKLQkJIHJlcy0+c29j a2V0LCByZXMtPmltYywgcmVzLT5yYW5rLAotCQkgcmVzLT5iYW5rX2dyb3VwLCByZXMtPmJhbmtf YWRkcmVzcywgcmVzLT5yb3csIHJlcy0+Y29sdW1uKTsKKwkJIG1zY29kLCBlcnJjb2RlLCBtc2cg KyBNU0dfU0laRSk7CiAKIAllZGFjX2RiZygwLCAiJXNcbiIsIG1zZyk7CiAKQEAgLTk3NywxMyAr MTAzNSwzMyBAQCBzdGF0aWMgdm9pZCBza3hfbWNlX291dHB1dF9lcnJvcihzdHJ1Y3QgbWVtX2N0 bF9pbmZvICptY2ksCiAJCQkgICAgIG9wdHlwZSwgbXNnKTsKIH0KIAorc3RhdGljIHN0cnVjdCBt ZW1fY3RsX2luZm8gKmdldF9tY2kodTY0IHNyY19pZCwgdTY0IGxtYykKK3sKKwlzdHJ1Y3Qgc2t4 X2RldiAqZDsKKworCWlmIChsbWMgPiBOVU1fSU1DIC0gMSkgeworCQlza3hfcHJpbnRrKEtFUk5f RVJSLCAiQmFkIG1jIyAweCVsbHhcbiIsIGxtYyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxp c3RfZm9yX2VhY2hfZW50cnkoZCwgJnNreF9lZGFjX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGQtPmlt Y1swXS5zcmNfaWQgPT0gc3JjX2lkKQorCQkJcmV0dXJuIGQtPmltY1tsbWNdLm1jaTsKKwl9CisK Kwlza3hfcHJpbnRrKEtFUk5fRVJSLCAiTm8gbWNpIGZvciBzcmNfaWQgJWxseCBsbWMgJWxseFxu Iiwgc3JjX2lkLCBsbWMpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2t4X21j ZV9jaGVja19lcnJvcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZh bCwKIAkJCSAgICAgICB2b2lkICpkYXRhKQogewogCXN0cnVjdCBtY2UgKm1jZSA9IChzdHJ1Y3Qg bWNlICopZGF0YTsKIAlzdHJ1Y3QgZGVjb2RlZF9hZGRyIHJlczsKIAlzdHJ1Y3QgbWVtX2N0bF9p bmZvICptY2k7Ci0JY2hhciAqdHlwZTsKKwl1NjQgc29ja2V0LCBtZW1jdHJsOworCWNoYXIgKnR5 cGUsICptc2c7CiAKIAlpZiAoZWRhY19nZXRfcmVwb3J0X3N0YXR1cygpID09IEVEQUNfUkVQT1JU SU5HX0RJU0FCTEVEKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC05OTIsMTEgKzEwNzAsMzUg QEAgc3RhdGljIGludCBza3hfbWNlX2NoZWNrX2Vycm9yKHN0cnVjdCBub3RpZmllcl9ibG9jayAq bmIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCWlmICgobWNlLT5zdGF0dXMgJiAweGVmZmYpID4+IDcg IT0gMSB8fCAhKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRVU19BRERSVikpCiAJCXJldHVybiBOT1RJ RllfRE9ORTsKIAorCW1zZyA9IGt6YWxsb2MoTVNHX1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIW1zZykKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJaWYgKGFkeGxfY29tcG9uZW50X2Nv dW50KQorCQlnb3RvIGRzbV9kZWNvZGluZzsKKwogCXJlcy5hZGRyID0gbWNlLT5hZGRyOwogCWlm ICghc2t4X2RlY29kZSgmcmVzKSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCW1jaSA9IHJlcy5k ZXYtPmltY1tyZXMuaW1jXS5tY2k7CiAKKwlzbnByaW50Zihtc2cgKyBNU0dfU0laRSwgTVNHX1NJ WkUsCisJCSAic29ja2V0OiVkIGltYzolZCBjaGFuOiVsbHUgZGltbTolbGx1IHJhbms6JWQgYmc6 JWQgYmE6JWQgcm93OiV4IGNvbDoleCIsCisJCSByZXMuc29ja2V0LCByZXMuaW1jLCByZXMuY2hh bm5lbCwgcmVzLmRpbW0sIHJlcy5yYW5rLAorCQkgcmVzLmJhbmtfZ3JvdXAsIHJlcy5iYW5rX2Fk ZHJlc3MsIHJlcy5yb3csIHJlcy5jb2x1bW4pOworCisJZ290byBkZWNvZGVkOworCitkc21fZGVj b2Rpbmc6CisJaWYgKCFza3hfZHNtX2RlY29kZShtY2UtPmFkZHIsIG1zZyArIE1TR19TSVpFLCBN U0dfU0laRSwKKwkJCSAgICAmc29ja2V0LCAmbWVtY3RybCwgJnJlcy5jaGFubmVsLCAmcmVzLmRp bW0pKQorCQlnb3RvIG91dDsKKworCW1jaSA9IGdldF9tY2koc29ja2V0LCBtZW1jdHJsKTsKKwlp ZiAoIW1jaSkKKwkJZ290byBvdXQ7CisKK2RlY29kZWQ6CiAJaWYgKG1jZS0+bWNnc3RhdHVzICYg TUNHX1NUQVRVU19NQ0lQKQogCQl0eXBlID0gIkV4Y2VwdGlvbiI7CiAJZWxzZQpAQCAtMTAxNSw4 ICsxMTE3LDEwIEBAIHN0YXRpYyBpbnQgc2t4X21jZV9jaGVja19lcnJvcihzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJCSAgIiV1IEFQSUMgJXhcbiIsIG1j ZS0+Y3B1dmVuZG9yLCBtY2UtPmNwdWlkLAogCQkJICBtY2UtPnRpbWUsIG1jZS0+c29ja2V0aWQs IG1jZS0+YXBpY2lkKTsKIAotCXNreF9tY2Vfb3V0cHV0X2Vycm9yKG1jaSwgbWNlLCAmcmVzKTsK Kwlza3hfbWNlX291dHB1dF9lcnJvcihtY2ksIG1jZSwgJnJlcywgbXNnKTsKIAorb3V0OgorCWtm cmVlKG1zZyk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC0xMDkwLDYgKzExOTQsNTQg QEAgc3RhdGljIHZvaWQgc2t4X3JlbW92ZSh2b2lkKQogCX0KIH0KIAorc3RhdGljIHZvaWQgX19p bml0IHNreF9kc21fZ2V0KHZvaWQpCit7CisJY29uc3QgY2hhciAqIGNvbnN0ICpuYW1lczsKKwlp bnQgaSwgajsKKworCW5hbWVzID0gYWR4bF9nZXRfY29tcG9uZW50X25hbWVzKCk7CisJaWYgKCFu YW1lcykgeworCQlza3hfcHJpbnRrKEtFUk5fTk9USUNFLCAiTm8gZmlybXdhcmUgc3VwcG9ydCBm b3IgYWRkcmVzcyB0cmFuc2xhdGlvbi4iKTsKKwkJc2t4X3ByaW50ayhLRVJOX0NPTlQsICIgT25s eSBkZWNvZGluZyBERFI0IGFkZHJlc3MhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9 IDA7IGkgPCBJTkRFWF9NQVg7IGkrKykgeworCQlmb3IgKGogPSAwOyBuYW1lc1tqXTsgaisrKSB7 CisJCQlpZiAoIXN0cmNtcChjb21wb25lbnRfbmFtZXNbaV0sIG5hbWVzW2pdKSkgeworCQkJCWNv bXBvbmVudF9pbmRpY2VzW2ldID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgh bmFtZXNbal0pCisJCQlnb3RvIGVycjsKKwl9CisKKwlhZHhsX2NvbXBvbmVudF9uYW1lcyA9IG5h bWVzOworCXdoaWxlICgqbmFtZXMrKykKKwkJYWR4bF9jb21wb25lbnRfY291bnQrKzsKKworCWFk eGxfdmFsdWVzID0ga2NhbGxvYyhhZHhsX2NvbXBvbmVudF9jb3VudCwgc2l6ZW9mKCphZHhsX3Zh bHVlcyksIEdGUF9LRVJORUwpOworCWlmICghYWR4bF92YWx1ZXMpIHsKKwkJYWR4bF9jb21wb25l bnRfY291bnQgPSAwOworCQllZGFjX2RiZygwLCAiTm8gbWVtb3J5IGZvciBhZHhsX2RlY29kZSgp XG4iKTsKKwl9CisKKwlyZXR1cm47CitlcnI6CisJc2t4X3ByaW50ayhLRVJOX0VSUiwgIiclcycg aXMgbm90IG1hdGNoZWQgZnJvbSBEU00gcGFyYW1ldGVyczogIiwKKwkJICAgY29tcG9uZW50X25h bWVzW2ldKTsKKwlmb3IgKGogPSAwOyBuYW1lc1tqXTsgaisrKQorCQlza3hfcHJpbnRrKEtFUk5f Q09OVCwgIiVzICIsIG5hbWVzW2pdKTsKKwlza3hfcHJpbnRrKEtFUk5fQ09OVCwgIlxuIik7Cit9 CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBza3hfZHNtX3B1dCh2b2lkKQoreworCWtmcmVlKGFkeGxf dmFsdWVzKTsKK30KKwogLyoKICAqIHNreF9pbml0OgogICoJbWFrZSBzdXJlIHdlIGFyZSBydW5u aW5nIG9uIHRoZSBjb3JyZWN0IGNwdSBtb2RlbApAQCAtMTE1NCw2ICsxMzA2LDkgQEAgc3RhdGlj IGludCBfX2luaXQgc2t4X2luaXQodm9pZCkKIAkJfQogCX0KIAorCWlmIChudmRpbW1fY291bnQp CisJCXNreF9kc21fZ2V0KCk7CisKIAkvKiBFbnN1cmUgdGhhdCB0aGUgT1BTVEFURSBpcyBzZXQg Y29ycmVjdGx5IGZvciBQT0xMIG9yIE5NSSAqLwogCW9wc3RhdGVfaW5pdCgpOwogCkBAIC0xMTcw LDYgKzEzMjUsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBza3hfaW5pdCh2b2lkKQogc3RhdGljIHZv aWQgX19leGl0IHNreF9leGl0KHZvaWQpCiB7CiAJZWRhY19kYmcoMiwgIlxuIik7CisJaWYgKG52 ZGltbV9jb3VudCkKKwkJc2t4X2RzbV9wdXQoKTsKIAltY2VfdW5yZWdpc3Rlcl9kZWNvZGVfY2hh aW4oJnNreF9tY2VfZGVjKTsKIAlza3hfcmVtb3ZlKCk7CiAJdGVhcmRvd25fc2t4X2RlYnVnKCk7 CkBAIC0xMTgwLDYgKzEzMzcsMTQgQEAgbW9kdWxlX2V4aXQoc2t4X2V4aXQpOwogCiBtb2R1bGVf cGFyYW0oZWRhY19vcF9zdGF0ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZWRhY19v cF9zdGF0ZSwgIkVEQUMgRXJyb3IgUmVwb3J0aW5nIHN0YXRlOiAwPVBvbGwsMT1OTUkiKTsKK21v ZHVsZV9wYXJhbV9zdHJpbmcoc29jaywgY29tcG9uZW50X25hbWVzWzBdLCBzaXplb2YoY29tcG9u ZW50X25hbWVzWzBdKSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNvY2ssICJTdHJpbmcgdG8g Z2V0IHNvY2tldCBJRCIpOworbW9kdWxlX3BhcmFtX3N0cmluZyhpbWMsIGNvbXBvbmVudF9uYW1l c1sxXSwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lc1sxXSksIDA2NDQpOworTU9EVUxFX1BBUk1fREVT QyhpbWMsICJTdHJpbmcgdG8gZ2V0IElNQyBJRCIpOworbW9kdWxlX3BhcmFtX3N0cmluZyhjaGFu LCBjb21wb25lbnRfbmFtZXNbMl0sIHNpemVvZihjb21wb25lbnRfbmFtZXNbMl0pLCAwNjQ0KTsK K01PRFVMRV9QQVJNX0RFU0MoY2hhbiwgIlN0cmluZyB0byBnZXQgY2hhbm5lbCBJRCIpOworbW9k dWxlX3BhcmFtX3N0cmluZyhkaW1tLCBjb21wb25lbnRfbmFtZXNbM10sIHNpemVvZihjb21wb25l bnRfbmFtZXNbM10pLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGltbSwgIlN0cmluZyB0byBn ZXQgRElNTSBJRCIpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfQVVUSE9S KCJUb255IEx1Y2siKTsK