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: [3/3] EDAC, skx_edac: Add address translation for non-volatile DIMMs From: "Luck, Tony" Message-Id: <20181009183355.20597-4-tony.luck@intel.com> Date: Tue, 9 Oct 2018 11:33:55 -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 eF9lZGFjLmMgfCAxNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQog MiBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRl eCA1NzMwNGIyZTk4OWYuLmZmZDM0OWMxMjQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tj b25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTIzNCw2ICsyMzQsNyBAQCBjb25m aWcgRURBQ19TS1gKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODZfNjQgJiYgWDg2X01DRV9JTlRFTCAm JiBQQ0lfTU1DT05GSUcKIAlkZXBlbmRzIG9uIEFDUElfTkZJVCB8fCAhQUNQSV9ORklUICMgaWYg QUNQSV9ORklUPW0sIEVEQUNfU0tYIGNhbid0IGJlIHkKIAlzZWxlY3QgRE1JCisJc2VsZWN0IEFD UElfQURYTAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVj dGlvbiB0aGUgSW50ZWwKIAkgIFNreWxha2Ugc2VydmVyIEludGVncmF0ZWQgTWVtb3J5IENvbnRy b2xsZXJzLiBJZiB5b3VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYyBiL2Ry aXZlcnMvZWRhYy9za3hfZWRhYy5jCmluZGV4IGE3MTAxNjlhYmRiYy4uMjk4OWViYWQ4OTcwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvc2t4 X2VkYWMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2lu Y2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2FkeGwuaD4KICNpbmNsdWRlIDxhY3BpL25maXQuaD4KICNpbmNs dWRlIDxhc20vY3B1X2RldmljZV9pZC5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbC1mYW1pbHkuaD4K QEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgogCiAjZGVmaW5lIEVE QUNfTU9EX1NUUiAgICAic2t4X2VkYWMiCisjZGVmaW5lIE1TR19TSVpFCTEwMjQKIAogLyoKICAq IERlYnVnIG1hY3JvcwpAQCAtNTQsNiArNTYsMTcgQEAKIHN0YXRpYyBMSVNUX0hFQUQoc2t4X2Vk YWNfbGlzdCk7CiAKIHN0YXRpYyB1NjQgc2t4X3RvbG0sIHNreF90b2htOworc3RhdGljIGludCBu dmRpbW1fY291bnQ7CitzdGF0aWMgY2hhciBjb21wb25lbnRfbmFtZXNbXVszMl0gPSB7CisJIlBy b2Nlc3NvclNvY2tldElkIiwKKwkiTWVtb3J5Q29udHJvbGxlcklkIiwKKwkiQ2hhbm5lbElkIiwK KwkiRGltbVNsb3RJZCIsCit9OworCitzdGF0aWMgaW50IGNvbXBvbmVudF9pbmRpY2VzW0FSUkFZ X1NJWkUoY29tcG9uZW50X25hbWVzKV07CitzdGF0aWMgaW50IGFkeGxfY29tcG9uZW50X2NvdW50 Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAqYWR4bF9jb21wb25lbnRfbmFtZXM7CiAKICNk ZWZpbmUgTlVNX0lNQwkJCTIJLyogbWVtb3J5IGNvbnRyb2xsZXJzIHBlciBzb2NrZXQgKi8KICNk ZWZpbmUgTlVNX0NIQU5ORUxTCQkzCS8qIGNoYW5uZWxzIHBlciBtZW1vcnkgY29udHJvbGxlciAq LwpAQCAtMTAyLDExICsxMTUsMTEgQEAgc3RydWN0IGRlY29kZWRfYWRkciB7CiAJdTY0CWFkZHI7 CiAJaW50CXNvY2tldDsKIAlpbnQJaW1jOwotCWludAljaGFubmVsOworCXU2NAljaGFubmVsOwog CXU2NAljaGFuX2FkZHI7CiAJaW50CXNrdHdheXM7CiAJaW50CWNoYW53YXlzOwotCWludAlkaW1t OworCXU2NAlkaW1tOwogCWludAlyYW5rOwogCWludAljaGFubmVsX3Jhbms7CiAJdTY0CXJhbmtf YWRkcmVzczsKQEAgLTM5Myw2ICs0MDYsOCBAQCBzdGF0aWMgaW50IGdldF9udmRpbW1faW5mbyhz dHJ1Y3QgZGltbV9pbmZvICpkaW1tLCBzdHJ1Y3Qgc2t4X2ltYyAqaW1jLAogCXUxNiBmbGFnczsK IAl1NjQgc2l6ZSA9IDA7CiAKKwludmRpbW1fY291bnQrKzsKKwogCWRldl9oYW5kbGUgPSBBQ1BJ X05GSVRfQlVJTERfREVWSUNFX0hBTkRMRShkaW1tbm8sIGNoYW4sIGltYy0+bG1jLAogCQkJCQkJ ICAgaW1jLT5zcmNfaWQsIDApOwogCkBAIC02ODIsNyArNjk3LDcgQEAgc3RhdGljIGJvb2wgc2t4 X3NhZF9kZWNvZGUoc3RydWN0IGRlY29kZWRfYWRkciAqcmVzKQogCXJlcy0+aW1jID0gR0VUX0JJ VEZJRUxEKGQtPm1jcm91dGUsIGxjaGFuICogMywgbGNoYW4gKiAzICsgMik7CiAJcmVzLT5jaGFu bmVsID0gR0VUX0JJVEZJRUxEKGQtPm1jcm91dGUsIGxjaGFuICogMiArIDE4LCBsY2hhbiAqIDIg KyAxOSk7CiAKLQllZGFjX2RiZygyLCAiJWxseDogc29ja2V0PSVkIGltYz0lZCBjaGFubmVsPSVk XG4iLAorCWVkYWNfZGJnKDIsICIlbGx4OiBzb2NrZXQ9JWQgaW1jPSVkIGNoYW5uZWw9JWxsdVxu IiwKIAkJIHJlcy0+YWRkciwgcmVzLT5zb2NrZXQsIHJlcy0+aW1jLCByZXMtPmNoYW5uZWwpOwog CXJldHVybiB0cnVlOwogfQpAQCAtODE4LDcgKzgzMyw3IEBAIHN0YXRpYyBib29sIHNreF9yaXJf ZGVjb2RlKHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykKIAlyZXMtPmRpbW0gPSBjaGFuX3Jhbmsg LyA0OwogCXJlcy0+cmFuayA9IGNoYW5fcmFuayAlIDQ7CiAKLQllZGFjX2RiZygyLCAiJWxseDog ZGltbT0lZCByYW5rPSVkIGNoYW5fcmFuaz0lZCByYW5rX2FkZHI9JWxseFxuIiwKKwllZGFjX2Ri ZygyLCAiJWxseDogZGltbT0lbGx1IHJhbms9JWQgY2hhbl9yYW5rPSVkIHJhbmtfYWRkcj0lbGx4 XG4iLAogCQkgcmVzLT5hZGRyLCByZXMtPmRpbW0sIHJlcy0+cmFuaywKIAkJIHJlcy0+Y2hhbm5l bF9yYW5rLCByZXMtPnJhbmtfYWRkcmVzcyk7CiAJcmV0dXJuIHRydWU7CkBAIC04OTQsMTIgKzkw OSw1NSBAQCBzdGF0aWMgYm9vbCBza3hfZGVjb2RlKHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykK IAkJc2t4X3Jpcl9kZWNvZGUocmVzKSAmJiBza3hfbWFkX2RlY29kZShyZXMpOwogfQogCitzdGF0 aWMgYm9vbCBza3hfZHNtX2RlY29kZSh1NjQgYWRkciwgY2hhciAqbXNnLCBpbnQgbXNnbGVuLAor CQkJICAgdTY0ICpzb2NrLCB1NjQgKmltYywKKwkJCSAgIHU2NCAqY2hhbiwgdTY0ICpkaW1tKQor Cit7CisJdTY0ICp2YWx1ZXM7CisJaW50IGksIGxlbiA9IDA7CisKKwlpZiAoYWRkciA+PSBza3hf dG9obSB8fCAoYWRkciA+PSBza3hfdG9sbSAmJiBhZGRyIDwgQklUX1VMTCgzMikpKSB7CisJCWVk YWNfZGJnKDAsICJBZGRyZXNzICVsbHggb3V0IG9mIHJhbmdlXG4iLCBhZGRyKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXZhbHVlcyA9IGtjYWxsb2MoYWR4bF9jb21wb25lbnRfY291bnQsIHNp emVvZigqdmFsdWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YWx1ZXMpIHsKKwkJZWRhY19kYmco MCwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGFkeGxf ZGVjb2RlKGFkZHIsIHZhbHVlcykpIHsKKwkJZWRhY19kYmcoMCwgIkZhaWxlZCB0byBkZWNvZGUg MHglbGx4XG4iLCBhZGRyKTsKKwkJa2ZyZWUodmFsdWVzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCSpzb2NrID0gdmFsdWVzW2NvbXBvbmVudF9pbmRpY2VzWzBdXTsKKwkqaW1jID0gdmFsdWVz W2NvbXBvbmVudF9pbmRpY2VzWzFdXTsKKwkqY2hhbiA9IHZhbHVlc1tjb21wb25lbnRfaW5kaWNl c1syXV07CisJKmRpbW0gPSB2YWx1ZXNbY29tcG9uZW50X2luZGljZXNbM11dOworCisJZm9yIChp ID0gMDsgaSA8IGFkeGxfY29tcG9uZW50X2NvdW50OyBpKyspIHsKKwkJbGVuICs9IHNucHJpbnRm KG1zZyArIGxlbiwgbXNnbGVuLCAiICVzOjB4JWxseCIsCisJCQkJYWR4bF9jb21wb25lbnRfbmFt ZXNbaV0sIHZhbHVlc1tpXSk7CisKKwkJaWYgKG1zZ2xlbiAtIGxlbiA8PSAwKQorCQkJYnJlYWs7 CisJfQorCisJa2ZyZWUodmFsdWVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQg c2t4X21jZV9vdXRwdXRfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQkJCSBjb25z dCBzdHJ1Y3QgbWNlICptLAotCQkJCSBzdHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMpCisJCQkJIHN0 cnVjdCBkZWNvZGVkX2FkZHIgKnJlcywKKwkJCQkgY2hhciAqbXNnKQogewogCWVudW0gaHdfZXZl bnRfbWNfZXJyX3R5cGUgdHBfZXZlbnQ7Ci0JY2hhciAqdHlwZSwgKm9wdHlwZSwgbXNnWzI1Nl07 CisJY2hhciAqdHlwZSwgKm9wdHlwZTsKIAlib29sIHJpcHYgPSBHRVRfQklURklFTEQobS0+bWNn c3RhdHVzLCAwLCAwKTsKIAlib29sIG92ZXJmbG93ID0gR0VUX0JJVEZJRUxEKG0tPnN0YXR1cywg NjIsIDYyKTsKIAlib29sIHVuY29ycmVjdGVkX2Vycm9yID0gR0VUX0JJVEZJRUxEKG0tPnN0YXR1 cywgNjEsIDYxKTsKQEAgLTk2MCwxMyArMTAxOCwxMSBAQCBzdGF0aWMgdm9pZCBza3hfbWNlX291 dHB1dF9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCX0KIAl9CiAKLQlzbnByaW50 Zihtc2csIHNpemVvZihtc2cpLAotCQkgIiVzJXMgZXJyX2NvZGU6JTA0eDolMDR4IHNvY2tldDol ZCBpbWM6JWQgcmFuazolZCBiZzolZCBiYTolZCByb3c6JXggY29sOiV4IiwKKwlzbnByaW50Ziht c2csIE1TR19TSVpFLAorCQkgIiVzJXMgZXJyX2NvZGU6JTA0eDolMDR4ICVzIiwKIAkJIG92ZXJm bG93ID8gIiBPVkVSRkxPVyIgOiAiIiwKIAkJICh1bmNvcnJlY3RlZF9lcnJvciAmJiByZWNvdmVy YWJsZSkgPyAiIHJlY292ZXJhYmxlIiA6ICIiLAotCQkgbXNjb2QsIGVycmNvZGUsCi0JCSByZXMt PnNvY2tldCwgcmVzLT5pbWMsIHJlcy0+cmFuaywKLQkJIHJlcy0+YmFua19ncm91cCwgcmVzLT5i YW5rX2FkZHJlc3MsIHJlcy0+cm93LCByZXMtPmNvbHVtbik7CisJCSBtc2NvZCwgZXJyY29kZSwg bXNnICsgTVNHX1NJWkUpOwogCiAJZWRhY19kYmcoMCwgIiVzXG4iLCBtc2cpOwogCkBAIC05Nzcs MTMgKzEwMzMsMzMgQEAgc3RhdGljIHZvaWQgc2t4X21jZV9vdXRwdXRfZXJyb3Ioc3RydWN0IG1l bV9jdGxfaW5mbyAqbWNpLAogCQkJICAgICBvcHR5cGUsIG1zZyk7CiB9CiAKK3N0YXRpYyBzdHJ1 Y3QgbWVtX2N0bF9pbmZvICpnZXRfbWNpKHU2NCBzcmNfaWQsIHU2NCBsbWMpCit7CisJc3RydWN0 IHNreF9kZXYgKmQ7CisKKwlpZiAobG1jID4gTlVNX0lNQyAtIDEpIHsKKwkJc2t4X3ByaW50ayhL RVJOX0VSUiwgIkJhZCBtYyMgMHglbGx4XG4iLCBsbWMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGQsICZza3hfZWRhY19saXN0LCBsaXN0KSB7CisJCWlmIChk LT5pbWNbMF0uc3JjX2lkID09IHNyY19pZCkKKwkJCXJldHVybiBkLT5pbWNbbG1jXS5tY2k7CisJ fQorCisJc2t4X3ByaW50ayhLRVJOX0VSUiwgIk5vIG1jaSBmb3Igc3JjX2lkICVsbHggbG1jICVs bHhcbiIsIHNyY19pZCwgbG1jKTsKKworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50IHNr eF9tY2VfY2hlY2tfZXJyb3Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9u ZyB2YWwsCiAJCQkgICAgICAgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbWNlICptY2UgPSAoc3Ry dWN0IG1jZSAqKWRhdGE7CiAJc3RydWN0IGRlY29kZWRfYWRkciByZXM7CiAJc3RydWN0IG1lbV9j dGxfaW5mbyAqbWNpOwotCWNoYXIgKnR5cGU7CisJdTY0IHNvY2tldCwgbWVtY3RybDsKKwljaGFy ICp0eXBlLCAqbXNnOwogCiAJaWYgKGVkYWNfZ2V0X3JlcG9ydF9zdGF0dXMoKSA9PSBFREFDX1JF UE9SVElOR19ESVNBQkxFRCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtOTkyLDExICsxMDY4 LDM1IEBAIHN0YXRpYyBpbnQgc2t4X21jZV9jaGVja19lcnJvcihzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKIAlpZiAoKG1jZS0+c3RhdHVzICYgMHhlZmZmKSA+ PiA3ICE9IDEgfHwgIShtY2UtPnN0YXR1cyAmIE1DSV9TVEFUVVNfQUREUlYpKQogCQlyZXR1cm4g Tk9USUZZX0RPTkU7CiAKKwltc2cgPSBremFsbG9jKE1TR19TSVpFICogMiwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFtc2cpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWlmIChhZHhsX2NvbXBvbmVu dF9jb3VudCkKKwkJZ290byBkc21fZGVjb2Rpbmc7CisKIAlyZXMuYWRkciA9IG1jZS0+YWRkcjsK IAlpZiAoIXNreF9kZWNvZGUoJnJlcykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAltY2kgPSBy ZXMuZGV2LT5pbWNbcmVzLmltY10ubWNpOwogCisJc25wcmludGYobXNnICsgTVNHX1NJWkUsIE1T R19TSVpFLAorCQkgInNvY2tldDolZCBpbWM6JWQgY2hhbjolbGx1IGRpbW06JWxsdSByYW5rOiVk IGJnOiVkIGJhOiVkIHJvdzoleCBjb2w6JXgiLAorCQkgcmVzLnNvY2tldCwgcmVzLmltYywgcmVz LmNoYW5uZWwsIHJlcy5kaW1tLCByZXMucmFuaywKKwkJIHJlcy5iYW5rX2dyb3VwLCByZXMuYmFu a19hZGRyZXNzLCByZXMucm93LCByZXMuY29sdW1uKTsKKworCWdvdG8gZGVjb2RlZDsKKworZHNt X2RlY29kaW5nOgorCWlmICghc2t4X2RzbV9kZWNvZGUobWNlLT5hZGRyLCBtc2cgKyBNU0dfU0la RSwgTVNHX1NJWkUsCisJCQkgICAgJnNvY2tldCwgJm1lbWN0cmwsICZyZXMuY2hhbm5lbCwgJnJl cy5kaW1tKSkKKwkJZ290byBvdXQ7CisKKwltY2kgPSBnZXRfbWNpKHNvY2tldCwgbWVtY3RybCk7 CisJaWYgKCFtY2kpCisJCWdvdG8gb3V0OworCitkZWNvZGVkOgogCWlmIChtY2UtPm1jZ3N0YXR1 cyAmIE1DR19TVEFUVVNfTUNJUCkKIAkJdHlwZSA9ICJFeGNlcHRpb24iOwogCWVsc2UKQEAgLTEw MTUsOCArMTExNSwxMCBAQCBzdGF0aWMgaW50IHNreF9tY2VfY2hlY2tfZXJyb3Ioc3RydWN0IG5v dGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICIldSBBUElDICV4XG4i LCBtY2UtPmNwdXZlbmRvciwgbWNlLT5jcHVpZCwKIAkJCSAgbWNlLT50aW1lLCBtY2UtPnNvY2tl dGlkLCBtY2UtPmFwaWNpZCk7CiAKLQlza3hfbWNlX291dHB1dF9lcnJvcihtY2ksIG1jZSwgJnJl cyk7CisJc2t4X21jZV9vdXRwdXRfZXJyb3IobWNpLCBtY2UsICZyZXMsIG1zZyk7CiAKK291dDoK KwlrZnJlZShtc2cpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIApAQCAtMTA5MCw2ICsxMTky LDQ0IEBAIHN0YXRpYyB2b2lkIHNreF9yZW1vdmUodm9pZCkKIAl9CiB9CiAKK3N0YXRpYyB2b2lk IF9faW5pdCBza3hfZHNtX2dldCh2b2lkKQoreworCWNvbnN0IGNoYXIgKiBjb25zdCAqbmFtZXM7 CisJaW50IGksIGosIG47CisKKwluYW1lcyA9IGFkeGxfZ2V0X2NvbXBvbmVudF9uYW1lcygpOwor CWlmICghbmFtZXMpIHsKKwkJc2t4X3ByaW50ayhLRVJOX05PVElDRSwgIk5vIGZpcm13YXJlIHN1 cHBvcnRzIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLiIpOworCQlza3hfcHJpbnRrKEtFUk5fQ09O VCwgIiBPbmx5IGRlY29kaW5nIEREUjQgYWRkcmVzcyFcbiIpOworCQlyZXR1cm47CisJfQorCisJ biA9IEFSUkFZX1NJWkUoY29tcG9uZW50X25hbWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7CisJCWZvciAoaiA9IDA7IG5hbWVzW2pdOyBqKyspIHsKKwkJCWlmICghc3RyY21wKGNvbXBv bmVudF9uYW1lc1tpXSwgbmFtZXNbal0pKSB7CisJCQkJY29tcG9uZW50X2luZGljZXNbaV0gPSBq OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFuYW1lc1tqXSkKKwkJCWdvdG8gZXJy OworCX0KKworCWFkeGxfY29tcG9uZW50X25hbWVzID0gbmFtZXM7CisJd2hpbGUgKCpuYW1lcysr KQorCQlhZHhsX2NvbXBvbmVudF9jb3VudCsrOworCisJcmV0dXJuOworZXJyOgorCXNreF9wcmlu dGsoS0VSTl9FUlIsICInJXMnIGlzIG5vdCBtYXRjaGVkIGZyb20gRFNNIHBhcmFtZXRlcnM6ICIs CisJCSAgIGNvbXBvbmVudF9uYW1lc1tpXSk7CisJZm9yIChqID0gMDsgbmFtZXNbal07IGorKykK KwkJc2t4X3ByaW50ayhLRVJOX0NPTlQsICIlcyAiLCBuYW1lc1tqXSk7CisJc2t4X3ByaW50ayhL RVJOX0NPTlQsICJcbiIpOworfQorCiAvKgogICogc2t4X2luaXQ6CiAgKgltYWtlIHN1cmUgd2Ug YXJlIHJ1bm5pbmcgb24gdGhlIGNvcnJlY3QgY3B1IG1vZGVsCkBAIC0xMTU0LDYgKzEyOTQsOSBA QCBzdGF0aWMgaW50IF9faW5pdCBza3hfaW5pdCh2b2lkKQogCQl9CiAJfQogCisJaWYgKG52ZGlt bV9jb3VudCkKKwkJc2t4X2RzbV9nZXQoKTsKKwogCS8qIEVuc3VyZSB0aGF0IHRoZSBPUFNUQVRF IGlzIHNldCBjb3JyZWN0bHkgZm9yIFBPTEwgb3IgTk1JICovCiAJb3BzdGF0ZV9pbml0KCk7CiAK QEAgLTExODAsNiArMTMyMywxNCBAQCBtb2R1bGVfZXhpdChza3hfZXhpdCk7CiAKIG1vZHVsZV9w YXJhbShlZGFjX29wX3N0YXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlZGFjX29w X3N0YXRlLCAiRURBQyBFcnJvciBSZXBvcnRpbmcgc3RhdGU6IDA9UG9sbCwxPU5NSSIpOworbW9k dWxlX3BhcmFtX3N0cmluZyhzb2NrLCBjb21wb25lbnRfbmFtZXNbMF0sIHNpemVvZihjb21wb25l bnRfbmFtZXNbMF0pLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc29jaywgIlN0cmluZyB0byBn ZXQgc29ja2V0IElEIik7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGltYywgY29tcG9uZW50X25hbWVz WzFdLCBzaXplb2YoY29tcG9uZW50X25hbWVzWzFdKSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVND KGltYywgIlN0cmluZyB0byBnZXQgSU1DIElEIik7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGNoYW4s IGNvbXBvbmVudF9uYW1lc1syXSwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lc1syXSksIDA2NDQpOwor TU9EVUxFX1BBUk1fREVTQyhjaGFuLCAiU3RyaW5nIHRvIGdldCBjaGFubmVsIElEIik7Cittb2R1 bGVfcGFyYW1fc3RyaW5nKGRpbW0sIGNvbXBvbmVudF9uYW1lc1szXSwgc2l6ZW9mKGNvbXBvbmVu dF9uYW1lc1szXSksIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaW1tLCAiU3RyaW5nIHRvIGdl dCBESU1NIElEIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1Io IlRvbnkgTHVjayIpOwo=