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: [v5,3/4] edac: synopsys: Add EDAC ECC support for ZynqMP DDRC From: Manish Narani Message-Id: <1535722070-10394-4-git-send-email-manish.narani@xilinx.com> Date: Fri, 31 Aug 2018 18:57:49 +0530 To: robh+dt@kernel.org, mark.rutland@arm.com, michal.simek@xilinx.com, bp@alien8.de, mchehab@kernel.org, manish.narani@xilinx.com, leoyang.li@nxp.com, amit.kucheria@linaro.org, olof@lixom.net Cc: sgoud@xilinx.com, anirudh@xilinx.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org List-ID: QWRkIEVEQUMgRUNDIHN1cHBvcnQgZm9yIFp5bnFNUCBERFJDIElQLiBBbHNvIGFkZCBzdXBwb3J0 IGZvciBFQ0MgRXJyb3IKSW5qZWN0aW9uIGluIFp5bnFNUC4gVGhlIGNvcnJlY3RlZCBhbmQgdW5j b3JyZWN0ZWQgZXJyb3IgaW50ZXJydXB0cwpzdXBwb3J0IGlzIGFkZGVkLiBUaGUgUm93LCBDb2x1 bW4sIEJhbmssIEJhbmsgR3JvdXAgYW5kIFJhbmsgYml0cwpwb3NpdGlvbnMgYXJlIGRldGVybWlu ZWQgdmlhIEFkZHJlc3MgTWFwIHJlZ2lzdGVycyBvZiBTeW5vcHN5cyBERFJDLgpNaW5vciBpbmRl bnRhdGlvbiBjaGFuZ2VzIGFyZSBhbHNvIGRvbmUgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KClNp Z25lZC1vZmYtYnk6IE1hbmlzaCBOYXJhbmkgPG1hbmlzaC5uYXJhbmlAeGlsaW54LmNvbT4KLS0t CiBkcml2ZXJzL2VkYWMvS2NvbmZpZyAgICAgICAgIHwgICAgMiArLQogZHJpdmVycy9lZGFjL3N5 bm9wc3lzX2VkYWMuYyB8IDEwNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDkzNyBpbnNlcnRpb25zKCspLCAxMTkgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2Nv bmZpZwppbmRleCA1NzMwNGIyLi5iMWZjN2ExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tj b25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTQ0MSw3ICs0NDEsNyBAQCBjb25m aWcgRURBQ19BTFRFUkFfU0RNTUMKIAogY29uZmlnIEVEQUNfU1lOT1BTWVMKIAl0cmlzdGF0ZSAi U3lub3BzeXMgRERSIE1lbW9yeSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9aWU5RCisJ ZGVwZW5kcyBvbiBBUkNIX1pZTlEgfHwgQVJNNjQKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJv ciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIFN5bm9wc3lzIEREUgogCSAgbWVtb3J5 IGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jIGIv ZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMuYwppbmRleCAyNDcwZDM1Li41MzMzODc3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9z eW5vcHN5c19lZGFjLmMKQEAgLTIyLDgwICsyMiwyNDkgQEAKICNpbmNsdWRlIDxsaW51eC9lZGFj Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgv b2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KIAogI2luY2x1ZGUgImVkYWNfbW9k dWxlLmgiCiAKIC8qIE51bWJlciBvZiBjc19yb3dzIG5lZWRlZCBwZXIgbWVtb3J5IGNvbnRyb2xs ZXIgKi8KLSNkZWZpbmUgU1lOUFNfRURBQ19OUl9DU1JPV1MJMQorI2RlZmluZSBTWU5QU19FREFD X05SX0NTUk9XUwkJMQogCiAvKiBOdW1iZXIgb2YgY2hhbm5lbHMgcGVyIG1lbW9yeSBjb250cm9s bGVyICovCi0jZGVmaW5lIFNZTlBTX0VEQUNfTlJfQ0hBTlMJMQorI2RlZmluZSBTWU5QU19FREFD X05SX0NIQU5TCQkxCiAKIC8qIEdyYW51bGFyaXR5IG9mIHJlcG9ydGVkIGVycm9yIGluIGJ5dGVz ICovCi0jZGVmaW5lIFNZTlBTX0VEQUNfRVJSX0dSQUlOCTEKKyNkZWZpbmUgU1lOUFNfRURBQ19F UlJfR1JBSU4JCTEKIAotI2RlZmluZSBTWU5QU19FREFDX01TR19TSVpFCTI1NgorI2RlZmluZSBT WU5QU19FREFDX01TR19TSVpFCQkyNTYKIAotI2RlZmluZSBTWU5QU19FREFDX01PRF9TVFJJTkcJ InN5bnBzX2VkYWMiCi0jZGVmaW5lIFNZTlBTX0VEQUNfTU9EX1ZFUgkiMSIKKyNkZWZpbmUgU1lO UFNfRURBQ19NT0RfU1RSSU5HCQkic3lucHNfZWRhYyIKKyNkZWZpbmUgU1lOUFNfRURBQ19NT0Rf VkVSCQkiMSIKIAogLyogU3lub3BzeXMgRERSIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycyB0 aGF0IGFyZSByZWxldmFudCB0byBFQ0MgKi8KLSNkZWZpbmUgQ1RSTF9PRlNUCQkweDAKLSNkZWZp bmUgVF9aUV9PRlNUCQkweEE0CisjZGVmaW5lIENUUkxfT0ZTVAkJCTB4MAorI2RlZmluZSBUX1pR X09GU1QJCQkweEE0CiAKIC8qIEVDQyBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIEVDQ19D VFJMX09GU1QJCTB4QzQKKyNkZWZpbmUgRUNDX0NUUkxfT0ZTVAkJCTB4QzQKIC8qIEVDQyBsb2cg cmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ0VfTE9HX09GU1QJCTB4QzgKKyNkZWZpbmUgQ0VfTE9HX09G U1QJCQkweEM4CiAvKiBFQ0MgYWRkcmVzcyByZWdpc3RlciAqLwotI2RlZmluZSBDRV9BRERSX09G U1QJCTB4Q0MKKyNkZWZpbmUgQ0VfQUREUl9PRlNUCQkJMHhDQwogLyogRUNDIGRhdGFbMzE6MF0g cmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ0VfREFUQV8zMV8wX09GU1QJMHhEMAorI2RlZmluZSBDRV9E QVRBXzMxXzBfT0ZTVAkJMHhEMAogCiAvKiBVbmNvcnJlY3RhYmxlIGVycm9yIGluZm8gcmVnaXN0 ZXJzICovCi0jZGVmaW5lIFVFX0xPR19PRlNUCQkweERDCi0jZGVmaW5lIFVFX0FERFJfT0ZTVAkJ MHhFMAotI2RlZmluZSBVRV9EQVRBXzMxXzBfT0ZTVAkweEU0CisjZGVmaW5lIFVFX0xPR19PRlNU CQkJMHhEQworI2RlZmluZSBVRV9BRERSX09GU1QJCQkweEUwCisjZGVmaW5lIFVFX0RBVEFfMzFf MF9PRlNUCQkweEU0CiAKLSNkZWZpbmUgU1RBVF9PRlNUCQkweEYwCi0jZGVmaW5lIFNDUlVCX09G U1QJCTB4RjQKKyNkZWZpbmUgU1RBVF9PRlNUCQkJMHhGMAorI2RlZmluZSBTQ1JVQl9PRlNUCQkJ MHhGNAogCiAvKiBDb250cm9sIHJlZ2lzdGVyIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAqLwotI2Rl ZmluZSBDVFJMX0JXX01BU0sJCTB4QwotI2RlZmluZSBDVFJMX0JXX1NISUZUCQkyCisjZGVmaW5l IENUUkxfQldfTUFTSwkJCTB4QworI2RlZmluZSBDVFJMX0JXX1NISUZUCQkJMgogCi0jZGVmaW5l IEREUkNUTF9XRFRIXzE2CQkxCi0jZGVmaW5lIEREUkNUTF9XRFRIXzMyCQkwCisjZGVmaW5lIERE UkNUTF9XRFRIXzE2CQkJMQorI2RlZmluZSBERFJDVExfV0RUSF8zMgkJCTAKIAogLyogWlEgcmVn aXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFRfWlFfRERSTU9ERV9NQVNL CTB4MgorI2RlZmluZSBUX1pRX0REUk1PREVfTUFTSwkJMHgyCiAKIC8qIEVDQyBjb250cm9sIHJl Z2lzdGVyIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBFQ0NfQ1RSTF9DTFJfQ0Vf RVJSCTB4MgotI2RlZmluZSBFQ0NfQ1RSTF9DTFJfVUVfRVJSCTB4MQorI2RlZmluZSBFQ0NfQ1RS TF9DTFJfQ0VfRVJSCQkweDIKKyNkZWZpbmUgRUNDX0NUUkxfQ0xSX1VFX0VSUgkJMHgxCiAKIC8q IEVDQyBjb3JyZWN0YWJsZS91bmNvcnJlY3RhYmxlIGVycm9yIGxvZyByZWdpc3RlciBkZWZpbml0 aW9ucyAqLwotI2RlZmluZSBMT0dfVkFMSUQJCTB4MQotI2RlZmluZSBDRV9MT0dfQklUUE9TX01B U0sJMHhGRQotI2RlZmluZSBDRV9MT0dfQklUUE9TX1NISUZUCTEKKyNkZWZpbmUgTE9HX1ZBTElE CQkJMHgxCisjZGVmaW5lIENFX0xPR19CSVRQT1NfTUFTSwkJMHhGRQorI2RlZmluZSBDRV9MT0df QklUUE9TX1NISUZUCQkxCiAKIC8qIEVDQyBjb3JyZWN0YWJsZS91bmNvcnJlY3RhYmxlIGVycm9y IGFkZHJlc3MgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgQUREUl9DT0xfTUFTSwkJ MHhGRkYKLSNkZWZpbmUgQUREUl9ST1dfTUFTSwkJMHhGRkZGMDAwCi0jZGVmaW5lIEFERFJfUk9X X1NISUZUCQkxMgotI2RlZmluZSBBRERSX0JBTktfTUFTSwkJMHg3MDAwMDAwMAotI2RlZmluZSBB RERSX0JBTktfU0hJRlQJCTI4CisjZGVmaW5lIEFERFJfQ09MX01BU0sJCQkweEZGRgorI2RlZmlu ZSBBRERSX1JPV19NQVNLCQkJMHhGRkZGMDAwCisjZGVmaW5lIEFERFJfUk9XX1NISUZUCQkJMTIK KyNkZWZpbmUgQUREUl9CQU5LX01BU0sJCQkweDcwMDAwMDAwCisjZGVmaW5lIEFERFJfQkFOS19T SElGVAkJCTI4CiAKIC8qIEVDQyBzdGF0aXN0aWMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLSNk ZWZpbmUgU1RBVF9VRUNOVF9NQVNLCQkweEZGCi0jZGVmaW5lIFNUQVRfQ0VDTlRfTUFTSwkJMHhG RjAwCi0jZGVmaW5lIFNUQVRfQ0VDTlRfU0hJRlQJOAorI2RlZmluZSBTVEFUX1VFQ05UX01BU0sJ CQkweEZGCisjZGVmaW5lIFNUQVRfQ0VDTlRfTUFTSwkJCTB4RkYwMAorI2RlZmluZSBTVEFUX0NF Q05UX1NISUZUCQk4CiAKIC8qIEVDQyBzY3J1YiByZWdpc3RlciBkZWZpbml0aW9ucyAqLwotI2Rl ZmluZSBTQ1JVQl9NT0RFX01BU0sJCTB4NwotI2RlZmluZSBTQ1JVQl9NT0RFX1NFQ0RFRAkweDQK KyNkZWZpbmUgU0NSVUJfTU9ERV9NQVNLCQkJMHg3CisjZGVmaW5lIFNDUlVCX01PREVfU0VDREVE CQkweDQKKworLyogRERSIEVDQyBRdWlya3MgKi8KKyNkZWZpbmUgRERSX0VDQ19JTlRSX1NVUFBP UlQJCUJJVCgwKQorI2RlZmluZSBERFJfRUNDX0RBVEFfUE9JU09OX1NVUFBPUlQJQklUKDEpCisK Ky8qIFp5bnFNUCBFbmhhbmNlZCBERFIgbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRoYXQg YXJlIHJlbGV2YW50IHRvIEVDQyAqLworLyogRUNDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICov CisjZGVmaW5lIEVDQ19DRkcwX09GU1QJCQkweDcwCisjZGVmaW5lIEVDQ19DRkcxX09GU1QJCQkw eDc0CisKKy8qIEVDQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX1NUQVRfT0ZTVAkJ CTB4NzgKKworLyogRUNDIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIEVDQ19DTFJfT0ZTVAkJ CTB4N0MKKworLyogRUNDIEVycm9yIGNvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIEVDQ19FUlJD TlRfT0ZTVAkJCTB4ODAKKworLyogRUNDIENvcnJlY3RlZCBFcnJvciBBZGRyZXNzIFJlZ2lzdGVy ICovCisjZGVmaW5lIEVDQ19DRUFERFIwX09GU1QJCTB4ODQKKyNkZWZpbmUgRUNDX0NFQUREUjFf T0ZTVAkJMHg4OAorCisvKiBFQ0MgU3luZHJvbWUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVDQ19D U1lORDBfT0ZTVAkJCTB4OEMKKyNkZWZpbmUgRUNDX0NTWU5EMV9PRlNUCQkJMHg5MAorI2RlZmlu ZSBFQ0NfQ1NZTkQyX09GU1QJCQkweDk0CisKKy8qIEVDQyBCaXQgTWFzazAgQWRkcmVzcyBSZWdp c3RlciAqLworI2RlZmluZSBFQ0NfQklUTUFTSzBfT0ZTVAkJMHg5OAorI2RlZmluZSBFQ0NfQklU TUFTSzFfT0ZTVAkJMHg5QworI2RlZmluZSBFQ0NfQklUTUFTSzJfT0ZTVAkJMHhBMAorCisvKiBF Q0MgVW5Db3JyZWN0ZWQgRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBFQ0NfVUVB RERSMF9PRlNUCQkweEE0CisjZGVmaW5lIEVDQ19VRUFERFIxX09GU1QJCTB4QTgKKworLyogRUND IFN5bmRyb21lIFJlZ2lzdGVycyAqLworI2RlZmluZSBFQ0NfVUVTWU5EMF9PRlNUCQkweEFDCisj ZGVmaW5lIEVDQ19VRVNZTkQxX09GU1QJCTB4QjAKKyNkZWZpbmUgRUNDX1VFU1lORDJfT0ZTVAkJ MHhCNAorCisvKiBFQ0MgUG9pc29uIEFkZHJlc3MgUmVnICovCisjZGVmaW5lIEVDQ19QT0lTT04w X09GU1QJCTB4QjgKKyNkZWZpbmUgRUNDX1BPSVNPTjFfT0ZTVAkJMHhCQworCisjZGVmaW5lIEVD Q19BRERSTUFQMF9PRkZTRVQJCTB4MjAwCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgYml0ZmllbGQg ZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRUNDX0NUUkxfQlVTV0lEVEhfTUFTSwkJMHgzMDAwCisj ZGVmaW5lIEVDQ19DVFJMX0JVU1dJRFRIX1NISUZUCQkxMgorI2RlZmluZSBFQ0NfQ1RSTF9DTFJf Q0VfRVJSQ05UCQlCSVQoMikKKyNkZWZpbmUgRUNDX0NUUkxfQ0xSX1VFX0VSUkNOVAkJQklUKDMp CisKKy8qIEREUiBDb250cm9sIFJlZ2lzdGVyIHdpZHRoIGRlZmluaXRpb25zICAqLworI2RlZmlu ZSBERFJDVExfRVdEVEhfMTYJCQkyCisjZGVmaW5lIEREUkNUTF9FV0RUSF8zMgkJCTEKKyNkZWZp bmUgRERSQ1RMX0VXRFRIXzY0CQkJMAorCisvKiBFQ0Mgc3RhdHVzIHJlZ2lzdGVyIGRlZmluaXRp b25zICovCisjZGVmaW5lIEVDQ19TVEFUX1VFQ05UX01BU0sJCTB4RjAwMDAKKyNkZWZpbmUgRUND X1NUQVRfVUVDTlRfU0hJRlQJCTE2CisjZGVmaW5lIEVDQ19TVEFUX0NFQ05UX01BU0sJCTB4RjAw CisjZGVmaW5lIEVDQ19TVEFUX0NFQ05UX1NISUZUCQk4CisjZGVmaW5lIEVDQ19TVEFUX0JJVE5V TV9NQVNLCQkweDdGCisKKy8qIEREUiBRT1MgSW50ZXJydXB0IHJlZ2lzdGVyIGRlZmluaXRpb25z ICovCisjZGVmaW5lIEREUl9RT1NfSVJRX1NUQVRfT0ZTVAkJMHgyMDIwMAorI2RlZmluZSBERFJf UU9TVUVfTUFTSwkJCTB4NAorI2RlZmluZQlERFJfUU9TQ0VfTUFTSwkJCTB4MgorI2RlZmluZQlF Q0NfQ0VfVUVfSU5UUl9NQVNLCQkweDYKKyNkZWZpbmUgRERSX1FPU19JUlFfRU5fT0ZTVAkJMHgy MDIwOAorI2RlZmluZSBERFJfUU9TX0lSUV9EQl9PRlNUCQkweDIwMjBDCisKKy8qIEVDQyBDb3Jy ZWN0ZWQgRXJyb3IgUmVnaXN0ZXIgTWFzayBhbmQgU2hpZnRzKi8KKyNkZWZpbmUgRUNDX0NFQURE UjBfUldfTUFTSwkJMHgzRkZGRgorI2RlZmluZSBFQ0NfQ0VBRERSMF9STktfTUFTSwkJQklUKDI0 KQorI2RlZmluZSBFQ0NfQ0VBRERSMV9CTktHUlBfTUFTSwkJMHgzMDAwMDAwCisjZGVmaW5lIEVD Q19DRUFERFIxX0JOS05SX01BU0sJCTB4NzAwMDAKKyNkZWZpbmUgRUNDX0NFQUREUjFfQkxLTlJf TUFTSwkJMHhGRkYKKyNkZWZpbmUgRUNDX0NFQUREUjFfQk5LR1JQX1NISUZUCTI0CisjZGVmaW5l IEVDQ19DRUFERFIxX0JOS05SX1NISUZUCQkxNgorCisvKiBFQ0MgUG9pc29uIHJlZ2lzdGVyIHNo aWZ0cyAqLworI2RlZmluZSBFQ0NfUE9JU09OMF9SQU5LX1NISUZUCQkyNAorI2RlZmluZSBFQ0Nf UE9JU09OMF9SQU5LX01BU0sJCUJJVCgyNCkKKyNkZWZpbmUgRUNDX1BPSVNPTjBfQ09MVU1OX1NI SUZUCTAKKyNkZWZpbmUgRUNDX1BPSVNPTjBfQ09MVU1OX01BU0sJCTB4RkZGCisjZGVmaW5lIEVD Q19QT0lTT04xX0JHX1NISUZUCQkyOAorI2RlZmluZSBFQ0NfUE9JU09OMV9CR19NQVNLCQkweDMw MDAwMDAwCisjZGVmaW5lIEVDQ19QT0lTT04xX0JBTktOUl9TSElGVAkyNAorI2RlZmluZSBFQ0Nf UE9JU09OMV9CQU5LTlJfTUFTSwkJMHg3MDAwMDAwCisjZGVmaW5lIEVDQ19QT0lTT04xX1JPV19T SElGVAkJMAorI2RlZmluZSBFQ0NfUE9JU09OMV9ST1dfTUFTSwkJMHgzRkZGRgorCisvKiBERFIg TWVtb3J5IHR5cGUgZGVmaW5lcyAqLworI2RlZmluZSBNRU1fVFlQRV9ERFIzCQkJMHgxCisjZGVm aW5lIE1FTV9UWVBFX0xQRERSMwkJCTB4OAorI2RlZmluZSBNRU1fVFlQRV9ERFIyCQkJMHg0Cisj ZGVmaW5lIE1FTV9UWVBFX0REUjQJCQkweDEwCisjZGVmaW5lIE1FTV9UWVBFX0xQRERSNAkJCTB4 MjAKKworLyogRERSQyBTb2Z0d2FyZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEREUkNf U1dDVEwJCQkweDMyMAorCisvKiBERFJDIEVDQyBDRSAmIFVFIHBvaXNvbiBtYXNrICovCisjZGVm aW5lIEVDQ19DRVBPSVNPTl9NQVNLCQkweDMKKyNkZWZpbmUgRUNDX1VFUE9JU09OX01BU0sJCTB4 MQorCisvKiBERFJDIERldmljZSBjb25maWcgbWFza3MgKi8KKyNkZWZpbmUgRERSQ19NU1RSX0NG R19NQVNLCQkweEMwMDAwMDAwCisjZGVmaW5lIEREUkNfTVNUUl9DRkdfU0hJRlQJCTMwCisjZGVm aW5lIEREUkNfTVNUUl9DRkdfWDRfTUFTSwkJMHgwCisjZGVmaW5lIEREUkNfTVNUUl9DRkdfWDhf TUFTSwkJMHgxCisjZGVmaW5lIEREUkNfTVNUUl9DRkdfWDE2X01BU0sJCTB4MgorI2RlZmluZSBE RFJDX01TVFJfQ0ZHX1gzMl9NQVNLCQkweDMKKworI2RlZmluZSBERFJfTUFYX1JPV19TSElGVAkJ MTgKKyNkZWZpbmUgRERSX01BWF9DT0xfU0hJRlQJCTE0CisjZGVmaW5lIEREUl9NQVhfQkFOS19T SElGVAkJMworI2RlZmluZSBERFJfTUFYX0JBTktHUlBfU0hJRlQJCTIKKworI2RlZmluZSBST1df TUFYX1ZBTF9NQVNLCQkweEYKKyNkZWZpbmUgQ09MX01BWF9WQUxfTUFTSwkJMHhGCisjZGVmaW5l IEJBTktfTUFYX1ZBTF9NQVNLCQkweDFGCisjZGVmaW5lIEJBTktHUlBfTUFYX1ZBTF9NQVNLCQkw eDFGCisjZGVmaW5lIFJBTktfTUFYX1ZBTF9NQVNLCQkweDFGCisKKyNkZWZpbmUgUk9XX0IwX0JB U0UJCQk2CisjZGVmaW5lIFJPV19CMV9CQVNFCQkJNworI2RlZmluZSBST1dfQjJfQkFTRQkJCTgK KyNkZWZpbmUgUk9XX0IzX0JBU0UJCQk5CisjZGVmaW5lIFJPV19CNF9CQVNFCQkJMTAKKyNkZWZp bmUgUk9XX0I1X0JBU0UJCQkxMQorI2RlZmluZSBST1dfQjZfQkFTRQkJCTEyCisjZGVmaW5lIFJP V19CN19CQVNFCQkJMTMKKyNkZWZpbmUgUk9XX0I4X0JBU0UJCQkxNAorI2RlZmluZSBST1dfQjlf QkFTRQkJCTE1CisjZGVmaW5lIFJPV19CMTBfQkFTRQkJCTE2CisjZGVmaW5lIFJPV19CMTFfQkFT RQkJCTE3CisjZGVmaW5lIFJPV19CMTJfQkFTRQkJCTE4CisjZGVmaW5lIFJPV19CMTNfQkFTRQkJ CTE5CisjZGVmaW5lIFJPV19CMTRfQkFTRQkJCTIwCisjZGVmaW5lIFJPV19CMTVfQkFTRQkJCTIx CisjZGVmaW5lIFJPV19CMTZfQkFTRQkJCTIyCisjZGVmaW5lIFJPV19CMTdfQkFTRQkJCTIzCisK KyNkZWZpbmUgQ09MX0IyX0JBU0UJCQkyCisjZGVmaW5lIENPTF9CM19CQVNFCQkJMworI2RlZmlu ZSBDT0xfQjRfQkFTRQkJCTQKKyNkZWZpbmUgQ09MX0I1X0JBU0UJCQk1CisjZGVmaW5lIENPTF9C Nl9CQVNFCQkJNgorI2RlZmluZSBDT0xfQjdfQkFTRQkJCTcKKyNkZWZpbmUgQ09MX0I4X0JBU0UJ CQk4CisjZGVmaW5lIENPTF9COV9CQVNFCQkJOQorI2RlZmluZSBDT0xfQjEwX0JBU0UJCQkxMAor I2RlZmluZSBDT0xfQjExX0JBU0UJCQkxMQorI2RlZmluZSBDT0xfQjEyX0JBU0UJCQkxMgorI2Rl ZmluZSBDT0xfQjEzX0JBU0UJCQkxMworCisjZGVmaW5lIEJBTktfQjBfQkFTRQkJCTIKKyNkZWZp bmUgQkFOS19CMV9CQVNFCQkJMworI2RlZmluZSBCQU5LX0IyX0JBU0UJCQk0CisKKyNkZWZpbmUg QkFOS0dSUF9CMF9CQVNFCQkJMgorI2RlZmluZSBCQU5LR1JQX0IxX0JBU0UJCQkzCisKKyNkZWZp bmUgUkFOS19CMF9CQVNFCQkJNgogCiAvKioKICAqIHN0cnVjdCBlY2NfZXJyb3JfaW5mbyAtIEVD QyBlcnJvciBsb2cgaW5mb3JtYXRpb24KQEAgLTEwNCw2ICsyNzMsOCBAQAogICogQGJhbms6CUJh bmsgbnVtYmVyCiAgKiBAYml0cG9zOglCaXQgcG9zaXRpb24KICAqIEBkYXRhOglEYXRhIGNhdXNp bmcgdGhlIGVycm9yCisgKiBAYmFua2dycG5yOglCYW5rIGdyb3VwIG51bWJlcgorICogQGJsa25y OglCbG9jayBudW1iZXIKICAqLwogc3RydWN0IGVjY19lcnJvcl9pbmZvIHsKIAl1MzIgcm93OwpA QCAtMTExLDYgKzI4Miw4IEBAIHN0cnVjdCBlY2NfZXJyb3JfaW5mbyB7CiAJdTMyIGJhbms7CiAJ dTMyIGJpdHBvczsKIAl1MzIgZGF0YTsKKwl1MzIgYmFua2dycG5yOworCXUzMiBibGtucjsKIH07 CiAKIC8qKgpAQCAtMTI5LDEyICszMDIsMTggQEAgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgewog CiAvKioKICAqIHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgLSBERFIgbWVtb3J5IGNvbnRyb2xsZXIg cHJpdmF0ZSBpbnN0YW5jZSBkYXRhCi0gKiBAYmFzZWFkZHI6CUJhc2UgYWRkcmVzcyBvZiB0aGUg RERSIGNvbnRyb2xsZXIKLSAqIEBtZXNzYWdlOglCdWZmZXIgZm9yIGZyYW1pbmcgdGhlIGV2ZW50 IHNwZWNpZmljIGluZm8KLSAqIEBzdGF0OglFQ0Mgc3RhdHVzIGluZm9ybWF0aW9uCi0gKiBAcF9k YXRhOglQb2ludGVyIHRvIHBsYXRmb3JtIGRhdGEKLSAqIEBjZV9jbnQ6CUNvcnJlY3RhYmxlIEVy cm9yIGNvdW50Ci0gKiBAdWVfY250OglVbmNvcnJlY3RhYmxlIEVycm9yIGNvdW50CisgKiBAYmFz ZWFkZHI6CQlCYXNlIGFkZHJlc3Mgb2YgdGhlIEREUiBjb250cm9sbGVyCisgKiBAbWVzc2FnZToJ CUJ1ZmZlciBmb3IgZnJhbWluZyB0aGUgZXZlbnQgc3BlY2lmaWMgaW5mbworICogQHN0YXQ6CQlF Q0Mgc3RhdHVzIGluZm9ybWF0aW9uCisgKiBAcF9kYXRhOgkJUG9pbnRlciB0byBwbGF0Zm9ybSBk YXRhCisgKiBAY2VfY250OgkJQ29ycmVjdGFibGUgRXJyb3IgY291bnQKKyAqIEB1ZV9jbnQ6CQlV bmNvcnJlY3RhYmxlIEVycm9yIGNvdW50CisgKiBAcG9pc29uX2FkZHI6CURhdGEgcG9pc29uIGFk ZHJlc3MKKyAqIEByb3dfc2hpZnQ6CQlCaXQgc2hpZnRzIGZvciByb3cgYml0CisgKiBAY29sX3No aWZ0OgkJQml0IHNoaWZ0cyBmb3IgY29sdW1uIGJpdAorICogQGJhbmtfc2hpZnQ6CQlCaXQgc2hp ZnRzIGZvciBiYW5rIGJpdAorICogQGJhbmtncnBfc2hpZnQ6CUJpdCBzaGlmdHMgZm9yIGJhbmsg Z3JvdXAgYml0CisgKiBAcmFua19zaGlmdDoJCUJpdCBzaGlmdHMgZm9yIHJhbmsgYml0CiAgKi8K IHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgewogCXZvaWQgX19pb21lbSAqYmFzZWFkZHI7CkBAIC0x NDMsMzMgKzMyMiw0MCBAQCBzdHJ1Y3Qgc3lucHNfZWRhY19wcml2IHsKIAljb25zdCBzdHJ1Y3Qg c3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRhOwogCXUzMiBjZV9jbnQ7CiAJdTMyIHVlX2NudDsK Kwl1bG9uZyBwb2lzb25fYWRkcjsKKwl1MzIgcm93X3NoaWZ0WzE4XTsKKwl1MzIgY29sX3NoaWZ0 WzE0XTsKKwl1MzIgYmFua19zaGlmdFszXTsKKwl1MzIgYmFua2dycF9zaGlmdFsyXTsKKwl1MzIg cmFua19zaGlmdFsxXTsKIH07CiAKIC8qKgogICogc3RydWN0IHN5bnBzX3BsYXRmb3JtX2RhdGEg LSAgc3lucHMgcGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUKLSAqIEBlZGFjX2dldGVycm9yX2luZm86 CWZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lucHMgZWRhYyBlcnJvciBpbmZvCi0gKiBAZWRhY19nZXRf bXR5cGU6CWZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lucHMgZWRhYyBtdHlwZQotICogQGVkYWNfZ2V0 X2R0eXBlOglmdW5jdGlvbiBwb2ludGVyIHRvIHN5bnBzIGVkYWMgZHR5cGUKLSAqIEBlZGFjX2dl dF9lY2NzdGF0ZToJZnVuY3Rpb24gcG9pbnRlciB0byBzeW5wcyBlZGFjIGVjY3N0YXRlCi0gKiBA cXVpcmtzOgkJdG8gZGlmZmVyZW50aWF0ZSBJUHMKKyAqIEBnZXRlcnJvcl9pbmZvOglTeW5wcyBF REFDIGVycm9yIGluZm8KKyAqIEBnZXRfbXR5cGU6CQlTeW5wcyBFREFDIG10eXBlCisgKiBAZ2V0 X2R0eXBlOgkJU3lucHMgRURBQyBkdHlwZQorICogQGdldF9lY2NzdGF0ZToJU3lucHMgRURBQyBl Y2NzdGF0ZQorICogQHF1aXJrczoJCVRvIGRpZmZlcmVudGlhdGUgSVBzCiAgKi8KIHN0cnVjdCBz eW5wc19wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgKCplZGFjX2dldGVycm9yX2luZm8pKHN0cnVjdCBz eW5wc19lZGFjX3ByaXYgKnByaXYpOwotCWVudW0gbWVtX3R5cGUgKCplZGFjX2dldF9tdHlwZSko Y29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlKTsKLQllbnVtIGRldl90eXBlICgqZWRhY19nZXRfZHR5 cGUpKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSk7Ci0JYm9vbCAoKmVkYWNfZ2V0X2VjY3N0YXRl KSh2b2lkIF9faW9tZW0gKmJhc2UpOworCWludCAoKmdldGVycm9yX2luZm8pKHN0cnVjdCBzeW5w c19lZGFjX3ByaXYgKnByaXYpOworCWVudW0gbWVtX3R5cGUgKCpnZXRfbXR5cGUpKGNvbnN0IHZv aWQgX19pb21lbSAqYmFzZSk7CisJZW51bSBkZXZfdHlwZSAoKmdldF9kdHlwZSkoY29uc3Qgdm9p ZCBfX2lvbWVtICpiYXNlKTsKKwlib29sICgqZ2V0X2VjY3N0YXRlKSh2b2lkIF9faW9tZW0gKmJh c2UpOwogCWludCBxdWlya3M7CiB9OwogCiAvKioKLSAqIHN5bnBzX2VkYWNfZ2V0ZXJyb3JfaW5m byAtIEdldCB0aGUgY3VycmVudCBlY2MgZXJyb3IgaW5mbwotICogQHByaXY6CVBvaW50ZXIgdG8g RERSIG1lbW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YQorICogenlucV9nZXRl cnJvcl9pbmZvIC0gR2V0IHRoZSBjdXJyZW50IEVDQyBlcnJvciBpbmZvCisgKiBAcHJpdjoJRERS IG1lbW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YQogICoKLSAqIERldGVybWlu ZXMgdGhlcmUgaXMgYW55IGVjYyBlcnJvciBvciBub3QKKyAqIEdldCB0aGUgRUNDIGVycm9yIGlu Zm9ybWF0aW9uIGZyb20gdGhlIEVDQyByZWdpc3RlcnMgYW5kIGNsZWFyIHRoZSBlcnJvcgorICog c3RhdHVzIGJpdHMgaW4gdGhlIEVDQyByZWdpc3RlcnMuCiAgKgotICogUmV0dXJuOiBvbmUgaWYg dGhlcmUgaXMgbm8gZXJyb3Igb3RoZXJ3aXNlIHJldHVybnMgemVybworICogUmV0dXJuOiAwIGlm IHRoZXJlIGlzIG5vIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIDEKICAqLwotc3RhdGljIGludCBz eW5wc19lZGFjX2dldGVycm9yX2luZm8oc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikKK3N0 YXRpYyBpbnQgenlucV9nZXRlcnJvcl9pbmZvKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYp CiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCXN0cnVjdCBzeW5wc19lY2Nfc3RhdHVzICpwOwpA QCAtMjIyLDExICs0MDgsNzcgQEAgc3RhdGljIGludCBzeW5wc19lZGFjX2dldGVycm9yX2luZm8o c3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikKIH0KIAogLyoqCisgKiB6eW5xbXBfZ2V0ZXJy b3JfaW5mbyAtIEdldCB0aGUgY3VycmVudCBFQ0MgZXJyb3IgaW5mbworICogQHByaXY6CUREUiBt ZW1vcnkgY29udHJvbGxlciBwcml2YXRlIGluc3RhbmNlIGRhdGEKKyAqCisgKiBHZXQgdGhlIEVD QyBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFQ0MgcmVnaXN0ZXJzIGFuZCBjbGVhciB0aGUg ZXJyb3IKKyAqIHN0YXR1cyBiaXRzIGluIHRoZSBFQ0MgcmVnaXN0ZXJzLgorICoKKyAqIFJldHVy bjogMCBpZiB0aGVyZSBpcyBubyBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiAxCisgKi8KK3N0YXRp YyBpbnQgenlucW1wX2dldGVycm9yX2luZm8oc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikK K3sKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgKnA7CisJ dTMyIHJlZ3ZhbCwgY2xlYXJ2YWwgPSAwOworCisJaWYgKCFwcml2KQorCQlyZXR1cm4gMTsKKwor CWJhc2UgPSBwcml2LT5iYXNlYWRkcjsKKwlwID0gJnByaXYtPnN0YXQ7CisKKwlyZWd2YWwgPSBy ZWFkbChiYXNlICsgRUNDX1NUQVRfT0ZTVCk7CisJaWYgKCFyZWd2YWwpCisJCXJldHVybiAxOwor CisJcC0+Y2VfY250ID0gKHJlZ3ZhbCAmIEVDQ19TVEFUX0NFQ05UX01BU0spID4+IEVDQ19TVEFU X0NFQ05UX1NISUZUOworCXAtPnVlX2NudCA9IChyZWd2YWwgJiBFQ0NfU1RBVF9VRUNOVF9NQVNL KSA+PiBFQ0NfU1RBVF9VRUNOVF9TSElGVDsKKwlwLT5jZWluZm8uYml0cG9zID0gKHJlZ3ZhbCAm IEVDQ19TVEFUX0JJVE5VTV9NQVNLKTsKKworCXJlZ3ZhbCA9IHJlYWRsKGJhc2UgKyBFQ0NfQ0VB RERSMF9PRlNUKTsKKwlpZiAoIShwLT5jZV9jbnQpKQorCQlnb3RvIHVlX2VycjsKKworCXAtPmNl aW5mby5yb3cgPSAocmVndmFsICYgRUNDX0NFQUREUjBfUldfTUFTSyk7CisJcmVndmFsID0gcmVh ZGwoYmFzZSArIEVDQ19DRUFERFIxX09GU1QpOworCXAtPmNlaW5mby5iYW5rID0gKHJlZ3ZhbCAm IEVDQ19DRUFERFIxX0JOS05SX01BU0spID4+CisJCQkJCUVDQ19DRUFERFIxX0JOS05SX1NISUZU OworCXAtPmNlaW5mby5iYW5rZ3JwbnIgPSAocmVndmFsICYJRUNDX0NFQUREUjFfQk5LR1JQX01B U0spID4+CisJCQkJCUVDQ19DRUFERFIxX0JOS0dSUF9TSElGVDsKKwlwLT5jZWluZm8uYmxrbnIg PSAocmVndmFsICYgRUNDX0NFQUREUjFfQkxLTlJfTUFTSyk7CisJcC0+Y2VpbmZvLmRhdGEgPSBy ZWFkbChiYXNlICsgRUNDX0NTWU5EMF9PRlNUKTsKKwllZGFjX2RiZygzLCAiY2UgYml0IHBvc2l0 aW9uOiAlZCBkYXRhOiAlZFxuIiwgcC0+Y2VpbmZvLmJpdHBvcywKKwkJIHAtPmNlaW5mby5kYXRh KTsKKwordWVfZXJyOgorCXJlZ3ZhbCA9IHJlYWRsKGJhc2UgKyBFQ0NfVUVBRERSMF9PRlNUKTsK KwlpZiAoIShwLT51ZV9jbnQpKQorCQlnb3RvIG91dDsKKworCXAtPnVlaW5mby5yb3cgPSAocmVn dmFsICYgRUNDX0NFQUREUjBfUldfTUFTSyk7CisJcmVndmFsID0gcmVhZGwoYmFzZSArIEVDQ19V RUFERFIxX09GU1QpOworCXAtPnVlaW5mby5iYW5rZ3JwbnIgPSAocmVndmFsICYgRUNDX0NFQURE UjFfQk5LR1JQX01BU0spID4+CisJCQkJCUVDQ19DRUFERFIxX0JOS0dSUF9TSElGVDsKKwlwLT51 ZWluZm8uYmFuayA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9CTktOUl9NQVNLKSA+PgorCQkJCQlF Q0NfQ0VBRERSMV9CTktOUl9TSElGVDsKKwlwLT51ZWluZm8uYmxrbnIgPSAocmVndmFsICYgRUND X0NFQUREUjFfQkxLTlJfTUFTSyk7CisJcC0+dWVpbmZvLmRhdGEgPSByZWFkbChiYXNlICsgRUND X1VFU1lORDBfT0ZTVCk7CitvdXQ6CisJY2xlYXJ2YWwgPSBFQ0NfQ1RSTF9DTFJfQ0VfRVJSIHwg RUNDX0NUUkxfQ0xSX0NFX0VSUkNOVDsKKwljbGVhcnZhbCB8PSBFQ0NfQ1RSTF9DTFJfVUVfRVJS IHwgRUNDX0NUUkxfQ0xSX1VFX0VSUkNOVDsKKwl3cml0ZWwoY2xlYXJ2YWwsIGJhc2UgKyBFQ0Nf Q0xSX09GU1QpOworCXdyaXRlbCgweDAsIGJhc2UgKyBFQ0NfQ0xSX09GU1QpOworCisJcmV0dXJu IDA7Cit9CisKKy8qKgogICogc3lucHNfZWRhY19oYW5kbGVfZXJyb3IgLSBIYW5kbGUgY29udHJv bGxlciBlcnJvciB0eXBlcyBDRSBhbmQgVUUKLSAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMg bWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKLSAqIEBwOgkJUG9pbnRlciB0byB0aGUgc3lub3Bz eXMgZWNjIHN0YXR1cyBzdHJ1Y3R1cmUKKyAqIEBtY2k6CUVEQUMgbWVtb3J5IGNvbnRyb2xsZXIg aW5zdGFuY2UKKyAqIEBwOgkJU3lub3BzeXMgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUKICAqCi0gKiBI YW5kbGVzIHRoZSBjb250cm9sbGVyIEVDQyBjb3JyZWN0YWJsZSBhbmQgdW4gY29ycmVjdGFibGUg ZXJyb3IuCisgKiBIYW5kbGVzIHRoZSBjb250cm9sbGVyIEVDQyBjb3JyZWN0YWJsZSBhbmQgdW4t Y29ycmVjdGFibGUgZXJyb3IuCiAgKi8KIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNfaGFuZGxlX2Vy cm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAkJCQkgICAgc3RydWN0IHN5bnBzX2VjY19z dGF0dXMgKnApCkBAIC0yMzYsOSArNDg4LDI1IEBAIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNfaGFu ZGxlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAogCWlmIChwLT5jZV9jbnQpIHsK IAkJcGluZiA9ICZwLT5jZWluZm87Ci0JCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VE QUNfTVNHX1NJWkUsCi0JCQkgIkREUiBFQ0MgZXJyb3IgdHlwZSA6JXMgUm93ICVkIEJhbmsgJWQg Q29sICVkICIsCi0JCQkgIkNFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5mLT5jb2wpOwor CQlpZiAoIXByaXYtPnBfZGF0YS0+cXVpcmtzKSB7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdl LCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJCSAiRERSIEVDQyBlcnJvciB0eXBlOiVzIFJvdyAl ZCBCYW5rICVkIENvbCAlZCAiLAorCQkJCSAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBp bmYtPmNvbCk7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpF LAorCQkJCSAiQml0IFBvc2l0aW9uOiAlZCBEYXRhOiAweCUwOHhcbiIsCisJCQkJIHBpbmYtPmJp dHBvcywgcGluZi0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdl LCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJCSAiRERSIEVDQyBlcnJvciB0eXBlOiVzIFJvdyAl ZCBCYW5rICVkIENvbCAlZCAiLAorCQkJCSAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBp bmYtPmNvbCk7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpF LAorCQkJCSAiQmFua0dyb3VwIE51bWJlciAlZCBCbG9jayBOdW1iZXIgJWQgIiwKKwkJCQkgcGlu Zi0+YmFua2dycG5yLCBwaW5mLT5ibGtucik7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBT WU5QU19FREFDX01TR19TSVpFLAorCQkJCSAiQml0IFBvc2l0aW9uOiAlZCBEYXRhOiAweCUwOHhc biIsCisJCQkJIHBpbmYtPmJpdHBvcywgcGluZi0+ZGF0YSk7CisJCX0KKwogCQllZGFjX21jX2hh bmRsZV9lcnJvcihIV19FVkVOVF9FUlJfQ09SUkVDVEVELCBtY2ksCiAJCQkJICAgICBwLT5jZV9j bnQsIDAsIDAsIDAsIDAsIDAsIC0xLAogCQkJCSAgICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAt MjQ2LDkgKzUxNCwxOSBAQCBzdGF0aWMgdm9pZCBzeW5wc19lZGFjX2hhbmRsZV9lcnJvcihzdHJ1 Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAKIAlpZiAocC0+dWVfY250KSB7CiAJCXBpbmYgPSAmcC0+ dWVpbmZvOwotCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAot CQkJICJERFIgRUNDIGVycm9yIHR5cGUgOiVzIFJvdyAlZCBCYW5rICVkIENvbCAlZCAiLAotCQkJ ICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGluZi0+Y29sKTsKKwkJaWYgKCFwcml2LT5w X2RhdGEtPnF1aXJrcykgeworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19N U0dfU0laRSwKKwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlwZTolcyBSb3cgJWQgQmFuayAlZCBDb2wg JWQgIiwKKwkJCQkgIlVFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5mLT5jb2wpOworCQl9 IGVsc2UgeworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwK KwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlwZTolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQgIiwKKwkJ CQkgIlVFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5mLT5jb2wpOworCQkJc25wcmludGYo cHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCQkgIkJhbmtHcm91cCBOdW1i ZXIgJWQgQmxvY2sgTnVtYmVyICVkICIsCisJCQkJIHBpbmYtPmJhbmtncnBuciwgcGluZi0+Ymxr bnIpOworCQl9CisKIAkJZWRhY19tY19oYW5kbGVfZXJyb3IoSFdfRVZFTlRfRVJSX1VOQ09SUkVD VEVELCBtY2ksCiAJCQkJICAgICBwLT51ZV9jbnQsIDAsIDAsIDAsIDAsIDAsIC0xLAogCQkJCSAg ICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAtMjU4LDEwICs1MzYsNDYgQEAgc3RhdGljIHZvaWQg c3lucHNfZWRhY19oYW5kbGVfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogfQogCiAv KioKKyAqIHN5bnBzX2VkYWNfaW50cl9oYW5kbGVyIC0gSW50ZXJydXB0IEhhbmRsZXIgZm9yIEVD QyBpbnRlcnJ1cHRzCisgKiBAaXJxOiAgICAgICAgaXJxIG51bWJlcgorICogQGRldl9pZDogICAg IGRldmljZSBpZCBwb2ludGVyCisgKgorICogVGhpcyBpcyB0aGUgSVNSIGNhbGxlZCBieSBFREFD IGNvcmUgaW50ZXJydXB0IHRocmVhZC4KKyAqIFRoaXMgaXMgdXNlZCB0byBjaGVjayBhbmQgcG9z dCBFQ0MgZXJyb3JzLgorICoKKyAqIFJldHVybjogSVJRX05PTkUsIGlmIGludGVycnVwdCBub3Qg c2V0IG9yIElSUV9IQU5ETEVEIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IHN5 bnBzX2VkYWNfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qg bWVtX2N0bF9pbmZvICptY2kgPSBkZXZfaWQ7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJp diA9IG1jaS0+cHZ0X2luZm87CisJY29uc3Qgc3RydWN0IHN5bnBzX3BsYXRmb3JtX2RhdGEgKnBf ZGF0YSA9IHByaXYtPnBfZGF0YTsKKwlpbnQgc3RhdHVzLCByZWd2YWw7CisKKwlyZWd2YWwgPSBy ZWFkbChwcml2LT5iYXNlYWRkciArIEREUl9RT1NfSVJRX1NUQVRfT0ZTVCk7CisJcmVndmFsICY9 IChERFJfUU9TQ0VfTUFTSyB8IEREUl9RT1NVRV9NQVNLKTsKKwlpZiAoIShyZWd2YWwgJiBFQ0Nf Q0VfVUVfSU5UUl9NQVNLKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3RhdHVzID0gcF9kYXRh LT5nZXRlcnJvcl9pbmZvKHByaXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsK KworCXByaXYtPmNlX2NudCArPSBwcml2LT5zdGF0LmNlX2NudDsKKwlwcml2LT51ZV9jbnQgKz0g cHJpdi0+c3RhdC51ZV9jbnQ7CisJc3lucHNfZWRhY19oYW5kbGVfZXJyb3IobWNpLCAmcHJpdi0+ c3RhdCk7CisKKwllZGFjX2RiZygzLCAiVG90YWwgZXJyb3IgY291bnQgY2UgJWQgdWUgJWRcbiIs CisJCSBwcml2LT5jZV9jbnQsIHByaXYtPnVlX2NudCk7CisJd3JpdGVsKHJlZ3ZhbCwgcHJpdi0+ YmFzZWFkZHIgKyBERFJfUU9TX0lSUV9TVEFUX09GU1QpOworCXJldHVybiBJUlFfSEFORExFRDsK K30KKworLyoqCiAgKiBzeW5wc19lZGFjX2NoZWNrIC0gQ2hlY2sgY29udHJvbGxlciBmb3IgRUND IGVycm9ycwotICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRhYyBtZW1vcnkgY29udHJvbGxlciBp bnN0YW5jZQorICogQG1jaToJRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQogICoKLSAq IFVzZWQgdG8gY2hlY2sgYW5kIHBvc3QgRUNDIGVycm9ycy4gQ2FsbGVkIGJ5IHRoZSBwb2xsaW5n IHRocmVhZAorICogVXNlZCB0byBjaGVjayBhbmQgcG9zdCBFQ0MgZXJyb3JzLiBUaGlzIGlzIGNh bGxlZCBieSB0aGUgcG9sbGluZyB0aHJlYWQuCiAgKi8KIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNf Y2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewpAQCAtMjY5LDcgKzU4Myw3IEBAIHN0 YXRpYyB2b2lkIHN5bnBzX2VkYWNfY2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogCWNv bnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRhICpwX2RhdGEgPSBwcml2LT5wX2RhdGE7CiAJ aW50IHN0YXR1czsKIAotCXN0YXR1cyA9IHBfZGF0YS0+ZWRhY19nZXRlcnJvcl9pbmZvKHByaXYp OworCXN0YXR1cyA9IHBfZGF0YS0+Z2V0ZXJyb3JfaW5mbyhwcml2KTsKIAlpZiAoc3RhdHVzKQog CQlyZXR1cm47CiAKQEAgLTI4MiwxNSArNTk2LDE1IEBAIHN0YXRpYyB2b2lkIHN5bnBzX2VkYWNf Y2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogfQogCiAvKioKLSAqIHN5bnBzX2VkYWNf Z2V0X2R0eXBlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIG1lbW9yeSB3aWR0aAotICogQGJhc2U6 CVBvaW50ZXIgdG8gdGhlIGRkciBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MKKyAqIHp5 bnFfZ2V0X2R0eXBlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIG1lbW9yeSB3aWR0aAorICogQGJh c2U6CUREUiBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MKICAqCiAgKiBHZXQgdGhlIEVE QUMgZGV2aWNlIHR5cGUgd2lkdGggYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGNvbnRyb2xs ZXIKICAqIGNvbmZpZ3VyYXRpb24uCiAgKgogICogUmV0dXJuOiBhIGRldmljZSB0eXBlIHdpZHRo IGVudW1lcmF0aW9uLgogICovCi1zdGF0aWMgZW51bSBkZXZfdHlwZSBzeW5wc19lZGFjX2dldF9k dHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCitzdGF0aWMgZW51bSBkZXZfdHlwZSB6eW5x X2dldF9kdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7CiAJZW51bSBkZXZfdHlwZSBk dDsKIAl1MzIgd2lkdGg7CkBAIC0zMTMsMzYgKzYyNyw5MyBAQCBzdGF0aWMgZW51bSBkZXZfdHlw ZSBzeW5wc19lZGFjX2dldF9kdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCiB9CiAKIC8q KgotICogc3lucHNfZWRhY19nZXRfZWNjc3RhdGUgLSBSZXR1cm4gdGhlIGNvbnRyb2xsZXIgZWNj IGVuYWJsZS9kaXNhYmxlIHN0YXR1cwotICogQGJhc2U6CVBvaW50ZXIgdG8gdGhlIGRkciBtZW1v cnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MKKyAqIHp5bnFtcF9nZXRfZHR5cGUgLSBSZXR1cm4g dGhlIGNvbnRyb2xsZXIgbWVtb3J5IHdpZHRoCisgKiBAYmFzZToJRERSIG1lbW9yeSBjb250cm9s bGVyIGJhc2UgYWRkcmVzcwogICoKLSAqIEdldCB0aGUgRUNDIGVuYWJsZS9kaXNhYmxlIHN0YXR1 cyBmb3IgdGhlIGNvbnRyb2xsZXIKKyAqIEdldCB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBh cHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29udHJvbGxlcgorICogY29uZmlndXJhdGlvbi4K KyAqCisgKiBSZXR1cm46IGEgZGV2aWNlIHR5cGUgd2lkdGggZW51bWVyYXRpb24uCisgKi8KK3N0 YXRpYyBlbnVtIGRldl90eXBlIHp5bnFtcF9nZXRfZHR5cGUoY29uc3Qgdm9pZCBfX2lvbWVtICpi YXNlKQoreworCWVudW0gZGV2X3R5cGUgZHQ7CisJdTMyIHdpZHRoOworCisJd2lkdGggPSByZWFk bChiYXNlICsgQ1RSTF9PRlNUKTsKKwl3aWR0aCA9ICh3aWR0aCAmIEVDQ19DVFJMX0JVU1dJRFRI X01BU0spID4+IEVDQ19DVFJMX0JVU1dJRFRIX1NISUZUOworCXN3aXRjaCAod2lkdGgpIHsKKwlj YXNlIEREUkNUTF9FV0RUSF8xNjoKKwkJZHQgPSBERVZfWDI7CisJCWJyZWFrOworCWNhc2UgRERS Q1RMX0VXRFRIXzMyOgorCQlkdCA9IERFVl9YNDsKKwkJYnJlYWs7CisJY2FzZSBERFJDVExfRVdE VEhfNjQ6CisJCWR0ID0gREVWX1g4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkdCA9IERFVl9V TktOT1dOOworCX0KKworCXJldHVybiBkdDsKK30KKworLyoqCisgKiB6eW5xX2dldF9lY2NzdGF0 ZSAtIFJldHVybiB0aGUgY29udHJvbGxlciBFQ0MgZW5hYmxlL2Rpc2FibGUgc3RhdHVzCisgKiBA YmFzZToJRERSIG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcworICoKKyAqIEdldCB0aGUg RUNDIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyBmb3IgdGhlIGNvbnRyb2xsZXIuCiAgKgotICogUmV0 dXJuOiBhIGVjYyBzdGF0dXMgYm9vbGVhbiBpLmUgdHJ1ZS9mYWxzZSAtIGVuYWJsZWQvZGlzYWJs ZWQuCisgKiBSZXR1cm46IGEgRUNDIHN0YXR1cyBib29sZWFuIGkuZSB0cnVlL2ZhbHNlIC0gZW5h YmxlZC9kaXNhYmxlZC4KICAqLwotc3RhdGljIGJvb2wgc3lucHNfZWRhY19nZXRfZWNjc3RhdGUo dm9pZCBfX2lvbWVtICpiYXNlKQorc3RhdGljIGJvb2wgenlucV9nZXRfZWNjc3RhdGUodm9pZCBf X2lvbWVtICpiYXNlKQogewogCWVudW0gZGV2X3R5cGUgZHQ7CiAJdTMyIGVjY3R5cGU7Ci0JYm9v bCBzdGF0ZSA9IGZhbHNlOwogCi0JZHQgPSBzeW5wc19lZGFjX2dldF9kdHlwZShiYXNlKTsKKwlk dCA9IHp5bnFfZ2V0X2R0eXBlKGJhc2UpOwogCWlmIChkdCA9PSBERVZfVU5LTk9XTikKLQkJcmV0 dXJuIHN0YXRlOworCQlyZXR1cm4gZmFsc2U7CiAKIAllY2N0eXBlID0gcmVhZGwoYmFzZSArIFND UlVCX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOwogCWlmICgoZWNjdHlwZSA9PSBTQ1JVQl9NT0RF X1NFQ0RFRCkgJiYgKGR0ID09IERFVl9YMikpCi0JCXN0YXRlID0gdHJ1ZTsKKwkJcmV0dXJuIHRy dWU7CiAKLQlyZXR1cm4gc3RhdGU7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKLSAqIHN5bnBz X2VkYWNfZ2V0X21lbXNpemUgLSByZWFkcyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNoZWQgbWVtb3J5 IGRldmljZQorICogenlucW1wX2dldF9lY2NzdGF0ZSAtIFJldHVybiB0aGUgY29udHJvbGxlciBF Q0MgZW5hYmxlL2Rpc2FibGUgc3RhdHVzCisgKiBAYmFzZToJRERSIG1lbW9yeSBjb250cm9sbGVy IGJhc2UgYWRkcmVzcworICoKKyAqIEdldCB0aGUgRUNDIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyBm b3IgdGhlIGNvbnRyb2xsZXIuCisgKgorICogUmV0dXJuOiBhIEVDQyBzdGF0dXMgYm9vbGVhbiBp LmUgdHJ1ZS9mYWxzZSAtIGVuYWJsZWQvZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBib29sIHp5bnFt cF9nZXRfZWNjc3RhdGUodm9pZCBfX2lvbWVtICpiYXNlKQoreworCWVudW0gZGV2X3R5cGUgZHQ7 CisJdTMyIGVjY3R5cGU7CisKKwlkdCA9IHp5bnFtcF9nZXRfZHR5cGUoYmFzZSk7CisJaWYgKGR0 ID09IERFVl9VTktOT1dOKQorCQlyZXR1cm4gZmFsc2U7CisKKwllY2N0eXBlID0gcmVhZGwoYmFz ZSArIEVDQ19DRkcwX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOworCWlmICgoZWNjdHlwZSA9PSBT Q1JVQl9NT0RFX1NFQ0RFRCkgJiYKKwkgICAgKChkdCA9PSBERVZfWDIpIHx8IChkdCA9PSBERVZf WDQpIHx8IChkdCA9PSBERVZfWDgpKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qKgorICogenlucV9nZXRfbWVtc2l6ZSAtIHJlYWRzIHRoZSBzaXplIG9mIHRoZSBh dHRhY2hlZCBtZW1vcnkgZGV2aWNlCiAgKgogICogUmV0dXJuOiB0aGUgbWVtb3J5IHNpemUgaW4g Ynl0ZXMKICAqLwotc3RhdGljIHUzMiBzeW5wc19lZGFjX2dldF9tZW1zaXplKHZvaWQpCitzdGF0 aWMgdTMyIHp5bnFfZ2V0X21lbXNpemUodm9pZCkKIHsKIAlzdHJ1Y3Qgc3lzaW5mbyBpbmY7CiAK QEAgLTM1MiwxNSArNzIzLDE1IEBAIHN0YXRpYyB1MzIgc3lucHNfZWRhY19nZXRfbWVtc2l6ZSh2 b2lkKQogfQogCiAvKioKLSAqIHN5bnBzX2VkYWNfZ2V0X210eXBlIC0gUmV0dXJucyBjb250cm9s bGVyIG1lbW9yeSB0eXBlCi0gKiBAYmFzZToJcG9pbnRlciB0byB0aGUgc3lub3BzeXMgZWNjIHN0 YXR1cyBzdHJ1Y3R1cmUKKyAqIHp5bnFfZ2V0X210eXBlIC0gUmV0dXJucyBjb250cm9sbGVyIG1l bW9yeSB0eXBlCisgKiBAYmFzZToJU3lub3BzeXMgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUKICAqCiAg KiBHZXQgdGhlIEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGNv bnRyb2xsZXIKICAqIGNvbmZpZ3VyYXRpb24uCiAgKgogICogUmV0dXJuOiBhIG1lbW9yeSB0eXBl IGVudW1lcmF0aW9uLgogICovCi1zdGF0aWMgZW51bSBtZW1fdHlwZSBzeW5wc19lZGFjX2dldF9t dHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCitzdGF0aWMgZW51bSBtZW1fdHlwZSB6eW5x X2dldF9tdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7CiAJZW51bSBtZW1fdHlwZSBt dDsKIAl1MzIgbWVtdHlwZTsKQEAgLTM3NiwxMyArNzQ3LDQxIEBAIHN0YXRpYyBlbnVtIG1lbV90 eXBlIHN5bnBzX2VkYWNfZ2V0X210eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKIH0KIAog LyoqCisgKiB6eW5xbXBfZ2V0X210eXBlIC0gUmV0dXJucyBjb250cm9sbGVyIG1lbW9yeSB0eXBl CisgKiBAYmFzZToJU3lub3BzeXMgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUKKyAqCisgKiBHZXQgdGhl IEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIK KyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJuOiBhIG1lbW9yeSB0eXBlIGVudW1lcmF0 aW9uLgorICovCitzdGF0aWMgZW51bSBtZW1fdHlwZSB6eW5xbXBfZ2V0X210eXBlKGNvbnN0IHZv aWQgX19pb21lbSAqYmFzZSkKK3sKKwllbnVtIG1lbV90eXBlIG10OworCXUzMiBtZW10eXBlOwor CisJbWVtdHlwZSA9IHJlYWRsKGJhc2UgKyBDVFJMX09GU1QpOworCisJaWYgKChtZW10eXBlICYg TUVNX1RZUEVfRERSMykgfHwgKG1lbXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpKQorCQltdCA9IE1F TV9ERFIzOworCWVsc2UgaWYgKG1lbXR5cGUgJiBNRU1fVFlQRV9ERFIyKQorCQltdCA9IE1FTV9S RERSMjsKKwllbHNlIGlmICgobWVtdHlwZSAmIE1FTV9UWVBFX0xQRERSNCkgfHwgKG1lbXR5cGUg JiBNRU1fVFlQRV9ERFI0KSkKKwkJbXQgPSBNRU1fRERSNDsKKwllbHNlCisJCW10ID0gTUVNX0VN UFRZOworCisJcmV0dXJuIG10OworfQorCisvKioKICAqIHN5bnBzX2VkYWNfaW5pdF9jc3Jvd3Mg LSBJbml0aWFsaXplIHRoZSBjcyByb3cgZGF0YQotICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRh YyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogQG1jaToJRURBQyBtZW1vcnkgY29udHJv bGxlciBpbnN0YW5jZQogICoKICAqIEluaXRpYWxpemVzIHRoZSBjaGlwIHNlbGVjdCByb3dzIGFz c29jaWF0ZWQgd2l0aCB0aGUgRURBQyBtZW1vcnkKLSAqIGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAq IGNvbnRyb2xsZXIgaW5zdGFuY2UuCiAgKgotICogUmV0dXJuOiBVbmNvbmRpdGlvbmFsbHkgMC4K KyAqIFJldHVybjogQWx3YXlzIHplcm8uCiAgKi8KIHN0YXRpYyBpbnQgc3lucHNfZWRhY19pbml0 X2Nzcm93cyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7CkBAIC0zOTUsMTUgKzc5NCwxNSBA QCBzdGF0aWMgaW50IHN5bnBzX2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAq bWNpKQogCiAJZm9yIChyb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspIHsKIAkJ Y3NpID0gbWNpLT5jc3Jvd3Nbcm93XTsKLQkJc2l6ZSA9IHN5bnBzX2VkYWNfZ2V0X21lbXNpemUo KTsKKwkJc2l6ZSA9IHp5bnFfZ2V0X21lbXNpemUoKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgY3Np LT5ucl9jaGFubmVsczsgaisrKSB7CiAJCQlkaW1tCQk9IGNzaS0+Y2hhbm5lbHNbal0tPmRpbW07 CiAJCQlkaW1tLT5lZGFjX21vZGUJPSBFREFDX0ZMQUdfU0VDREVEOwotCQkJZGltbS0+bXR5cGUJ PSBwX2RhdGEtPmVkYWNfZ2V0X210eXBlKHByaXYtPmJhc2VhZGRyKTsKKwkJCWRpbW0tPm10eXBl CT0gcF9kYXRhLT5nZXRfbXR5cGUocHJpdi0+YmFzZWFkZHIpOwogCQkJZGltbS0+bnJfcGFnZXMJ PSAoc2l6ZSA+PiBQQUdFX1NISUZUKSAvIGNzaS0+bnJfY2hhbm5lbHM7CiAJCQlkaW1tLT5ncmFp bgk9IFNZTlBTX0VEQUNfRVJSX0dSQUlOOwotCQkJZGltbS0+ZHR5cGUJPSBwX2RhdGEtPmVkYWNf Z2V0X2R0eXBlKHByaXYtPmJhc2VhZGRyKTsKKwkJCWRpbW0tPmR0eXBlCT0gcF9kYXRhLT5nZXRf ZHR5cGUocHJpdi0+YmFzZWFkZHIpOwogCQl9CiAJfQogCkBAIC00MTIsOCArODExLDggQEAgc3Rh dGljIGludCBzeW5wc19lZGFjX2luaXRfY3Nyb3dzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkK IAogLyoqCiAgKiBzeW5wc19lZGFjX21jX2luaXQgLSBJbml0aWFsaXplIGRyaXZlciBpbnN0YW5j ZQotICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRhYyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5j ZQotICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3QKKyAqIEBt Y2k6CUVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqIEBwZGV2OglwbGF0Zm9ybV9k ZXZpY2Ugc3RydWN0CiAgKgogICogUGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEVEQUMg bWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYW5kCiAgKiByZWxhdGVkIGRyaXZlci1wcml2YXRl IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGUKQEAgLTQ0Miw4 ICs4NDEsMTMgQEAgc3RhdGljIGludCBzeW5wc19lZGFjX21jX2luaXQoc3RydWN0IG1lbV9jdGxf aW5mbyAqbWNpLAogCW1jaS0+ZGV2X25hbWUgPSBTWU5QU19FREFDX01PRF9TVFJJTkc7CiAJbWNp LT5tb2RfbmFtZSA9IFNZTlBTX0VEQUNfTU9EX1ZFUjsKIAotCWVkYWNfb3Bfc3RhdGUgPSBFREFD X09QU1RBVEVfUE9MTDsKLQltY2ktPmVkYWNfY2hlY2sgPSBzeW5wc19lZGFjX2NoZWNrOworCWlm IChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKSB7CisJCWVkYWNf b3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfSU5UOworCX0gZWxzZSB7CisJCWVkYWNfb3Bfc3RhdGUg PSBFREFDX09QU1RBVEVfUE9MTDsKKwkJbWNpLT5lZGFjX2NoZWNrID0gc3lucHNfZWRhY19jaGVj azsKKwl9CisKIAltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBOVUxMOwogCiAJc3RhdHVzID0gc3lu cHNfZWRhY19pbml0X2Nzcm93cyhtY2kpOwpAQCAtNDUyLDM1ICs4NTYsNDEzIEBAIHN0YXRpYyBp bnQgc3lucHNfZWRhY19tY19pbml0KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIH0KIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRhIHp5bnFfZWRhY19kZWYgPSB7Ci0J LmVkYWNfZ2V0ZXJyb3JfaW5mbwk9IHN5bnBzX2VkYWNfZ2V0ZXJyb3JfaW5mbywKLQkuZWRhY19n ZXRfbXR5cGUJCT0gc3lucHNfZWRhY19nZXRfbXR5cGUsCi0JLmVkYWNfZ2V0X2R0eXBlCQk9IHN5 bnBzX2VkYWNfZ2V0X2R0eXBlLAotCS5lZGFjX2dldF9lY2NzdGF0ZQk9IHN5bnBzX2VkYWNfZ2V0 X2VjY3N0YXRlLAotCS5xdWlya3MJCQk9IDAsCisJLmdldGVycm9yX2luZm8JPSB6eW5xX2dldGVy cm9yX2luZm8sCisJLmdldF9tdHlwZQk9IHp5bnFfZ2V0X210eXBlLAorCS5nZXRfZHR5cGUJPSB6 eW5xX2dldF9kdHlwZSwKKwkuZ2V0X2VjY3N0YXRlCT0genlucV9nZXRfZWNjc3RhdGUsCisJLnF1 aXJrcwkJPSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRh IHp5bnFtcF9lZGFjX2RlZiA9IHsKKwkuZ2V0ZXJyb3JfaW5mbwk9IHp5bnFtcF9nZXRlcnJvcl9p bmZvLAorCS5nZXRfbXR5cGUJPSB6eW5xbXBfZ2V0X210eXBlLAorCS5nZXRfZHR5cGUJPSB6eW5x bXBfZ2V0X2R0eXBlLAorCS5nZXRfZWNjc3RhdGUJPSB6eW5xbXBfZ2V0X2VjY3N0YXRlLAorCS5x dWlya3MJCT0gKEREUl9FQ0NfSU5UUl9TVVBQT1JUIHwKKwkJCSAgIEREUl9FQ0NfREFUQV9QT0lT T05fU1VQUE9SVCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzeW5w c19lZGFjX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJ4bG54LHp5bnEtZGRyYy1hMDUi LCAuZGF0YSA9ICh2b2lkICopJnp5bnFfZWRhY19kZWYgfSwKLQl7IC8qIGVuZCBvZiB0YWJsZSAq LyB9CisJeworCQkuY29tcGF0aWJsZSA9ICJ4bG54LHp5bnEtZGRyYy1hMDUiLAorCQkuZGF0YSA9 ICh2b2lkICopJnp5bnFfZWRhY19kZWYKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAieGxueCx6 eW5xbXAtZGRyYy0yLjQwYSIsCisJCS5kYXRhID0gKHZvaWQgKikmenlucW1wX2VkYWNfZGVmCisJ fSwKKwl7CisJCS8qIGVuZCBvZiB0YWJsZSAqLworCX0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIHN5bnBzX2VkYWNfbWF0Y2gpOwogCisjZGVmaW5lIHRvX21jaShrKSBjb250YWluZXJf b2Yoaywgc3RydWN0IG1lbV9jdGxfaW5mbywgZGV2KQorCiAvKioKLSAqIHN5bnBzX2VkYWNfbWNf cHJvYmUgLSBDaGVjayBjb250cm9sbGVyIGFuZCBiaW5kIGRyaXZlcgotICogQHBkZXY6CVBvaW50 ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3QKKyAqIGRkcl9wb2lzb25fc2V0dXAgLQl1 cGRhdGUgcG9pc29uIHJlZ2lzdGVycworICogQHByaXY6CQlERFIgbWVtb3J5IGNvbnRyb2xsZXIg cHJpdmF0ZSBpbnN0YW5jZSBkYXRhCiAgKgotICogUHJvYmVzIGEgc3BlY2lmaWMgY29udHJvbGxl ciBpbnN0YW5jZSBmb3IgYmluZGluZyB3aXRoIHRoZSBkcml2ZXIuCisgKiBVcGRhdGUgcG9pc29u IHJlZ2lzdGVycyBhcyBwZXIgRERSIG1hcHBpbmcuCisgKiBSZXR1cm46IG5vbmUuCisgKi8KK3N0 YXRpYyB2b2lkIGRkcl9wb2lzb25fc2V0dXAoc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikK K3sKKwlpbnQgY29sID0gMCwgcm93ID0gMCwgYmFuayA9IDAsIGJhbmtncnAgPSAwLCByYW5rID0g MCwgcmVndmFsOworCWludCBpbmRleDsKKwl1bG9uZyBoaWZfYWRkciA9IDA7CisKKwloaWZfYWRk ciA9IHByaXYtPnBvaXNvbl9hZGRyID4+IDM7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBE RFJfTUFYX1JPV19TSElGVDsgaW5kZXgrKykgeworCQlpZiAocHJpdi0+cm93X3NoaWZ0W2luZGV4 XSkKKwkJCXJvdyB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5yb3dfc2hpZnRbaW5kZXhdKSAmCisJ CQkJCQlCSVQoMCkpIDw8IGluZGV4KTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJZm9yIChp bmRleCA9IDA7IGluZGV4IDwgRERSX01BWF9DT0xfU0hJRlQ7IGluZGV4KyspIHsKKwkJaWYgKHBy aXYtPmNvbF9zaGlmdFtpbmRleF0gfHwgaW5kZXggPCAzKQorCQkJY29sIHw9ICgoKGhpZl9hZGRy ID4+IHByaXYtPmNvbF9zaGlmdFtpbmRleF0pICYKKwkJCQkJCUJJVCgwKSkgPDwgaW5kZXgpOwor CQllbHNlCisJCQlicmVhazsKKwl9CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBERFJfTUFY X0JBTktfU0hJRlQ7IGluZGV4KyspIHsKKwkJaWYgKHByaXYtPmJhbmtfc2hpZnRbaW5kZXhdKQor CQkJYmFuayB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5iYW5rX3NoaWZ0W2luZGV4XSkgJgorCQkJ CQkJQklUKDApKSA8PCBpbmRleCk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IEREUl9NQVhfQkFOS0dSUF9TSElGVDsgaW5kZXgrKykgeworCQlpZiAo cHJpdi0+YmFua2dycF9zaGlmdFtpbmRleF0pCisJCQliYW5rZ3JwIHw9ICgoKGhpZl9hZGRyID4+ IHByaXYtPmJhbmtncnBfc2hpZnRbaW5kZXhdKQorCQkJCQkJJiBCSVQoMCkpIDw8IGluZGV4KTsK KwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKHByaXYtPnJhbmtfc2hpZnRbMF0pCisJCXJh bmsgPSAoaGlmX2FkZHIgPj4gcHJpdi0+cmFua19zaGlmdFswXSkgJiBCSVQoMCk7CisKKwlyZWd2 YWwgPSAocmFuayA8PCBFQ0NfUE9JU09OMF9SQU5LX1NISUZUKSAmIEVDQ19QT0lTT04wX1JBTktf TUFTSzsKKwlyZWd2YWwgfD0gKGNvbCA8PCBFQ0NfUE9JU09OMF9DT0xVTU5fU0hJRlQpICYgRUND X1BPSVNPTjBfQ09MVU1OX01BU0s7CisJd3JpdGVsKHJlZ3ZhbCwgcHJpdi0+YmFzZWFkZHIgKyBF Q0NfUE9JU09OMF9PRlNUKTsKKworCXJlZ3ZhbCA9IChiYW5rZ3JwIDw8IEVDQ19QT0lTT04xX0JH X1NISUZUKSAmIEVDQ19QT0lTT04xX0JHX01BU0s7CisJcmVndmFsIHw9IChiYW5rIDw8IEVDQ19Q T0lTT04xX0JBTktOUl9TSElGVCkgJiBFQ0NfUE9JU09OMV9CQU5LTlJfTUFTSzsKKwlyZWd2YWwg fD0gKHJvdyA8PCBFQ0NfUE9JU09OMV9ST1dfU0hJRlQpICYgRUNDX1BPSVNPTjFfUk9XX01BU0s7 CisJd3JpdGVsKHJlZ3ZhbCwgcHJpdi0+YmFzZWFkZHIgKyBFQ0NfUE9JU09OMV9PRlNUKTsKK30K Kworc3RhdGljIHNzaXplX3QgaW5qZWN0X2RhdGFfZXJyb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk ZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJCSAgICAg IGNoYXIgKmRhdGEpCit7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gdG9fbWNpKGRldik7 CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisKKwlyZXR1 cm4gc3ByaW50ZihkYXRhLCAiUG9pc29uMCBBZGRyOiAweCUwOHhcblxyUG9pc29uMSBBZGRyOiAw eCUwOHhcblxyIgorCQkJIkVycm9yIGluamVjdGlvbiBBZGRyZXNzOiAweCVseFxuXHIiLAorCQkJ cmVhZGwocHJpdi0+YmFzZWFkZHIgKyBFQ0NfUE9JU09OMF9PRlNUKSwKKwkJCXJlYWRsKHByaXYt PmJhc2VhZGRyICsgRUNDX1BPSVNPTjFfT0ZTVCksCisJCQlwcml2LT5wb2lzb25fYWRkcik7Cit9 CisKK3N0YXRpYyBzc2l6ZV90IGluamVjdF9kYXRhX2Vycm9yX3N0b3JlKHN0cnVjdCBkZXZpY2Ug KmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJCSAg ICAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG1lbV9jdGxf aW5mbyAqbWNpID0gdG9fbWNpKGRldik7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9 IG1jaS0+cHZ0X2luZm87CisKKwlpZiAoa3N0cnRvdWwoZGF0YSwgMCwgJnByaXYtPnBvaXNvbl9h ZGRyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZHJfcG9pc29uX3NldHVwKHByaXYpOworCisJ cmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpbmplY3RfZGF0YV9wb2lzb25fc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICptYXR0ciwKKwkJCQkgICAgICAgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZv ICptY2kgPSB0b19tY2koZGV2KTsKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2ID0gbWNp LT5wdnRfaW5mbzsKKworCXJldHVybiBzcHJpbnRmKGRhdGEsICJEYXRhIFBvaXNvbmluZzogJXNc blxyIiwKKwkJCSgoKHJlYWRsKHByaXYtPmJhc2VhZGRyICsgRUNDX0NGRzFfT0ZTVCkpICYgMHgz KSA9PSAweDMpCisJCQk/ICgiQ29ycmVjdGFibGUgRXJyb3IiKSA6ICgiVW5Db3JyZWN0YWJsZSBF cnJvciIpKTsKK30KKworc3RhdGljIHNzaXplX3QgaW5qZWN0X2RhdGFfcG9pc29uX3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAor CQkJCQljb25zdCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG1lbV9jdGxf aW5mbyAqbWNpID0gdG9fbWNpKGRldik7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9 IG1jaS0+cHZ0X2luZm87CisKKwl3cml0ZWwoMCwgcHJpdi0+YmFzZWFkZHIgKyBERFJDX1NXQ1RM KTsKKwlpZiAoc3RybmNtcChkYXRhLCAiQ0UiLCAyKSA9PSAwKQorCQl3cml0ZWwoRUNDX0NFUE9J U09OX01BU0ssIHByaXYtPmJhc2VhZGRyICsgRUNDX0NGRzFfT0ZTVCk7CisJZWxzZQorCQl3cml0 ZWwoRUNDX1VFUE9JU09OX01BU0ssIHByaXYtPmJhc2VhZGRyICsgRUNDX0NGRzFfT0ZTVCk7CisJ d3JpdGVsKDEsIHByaXYtPmJhc2VhZGRyICsgRERSQ19TV0NUTCk7CisKKwlyZXR1cm4gY291bnQ7 Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhpbmplY3RfZGF0YV9lcnJvcik7CitzdGF0aWMg REVWSUNFX0FUVFJfUlcoaW5qZWN0X2RhdGFfcG9pc29uKTsKKworc3RhdGljIGludCBzeW5wc19l ZGFjX2NyZWF0ZV9zeXNmc19hdHRyaWJ1dGVzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3sK KwlpbnQgcmM7CisKKwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmbWNpLT5kZXYsICZkZXZfYXR0 cl9pbmplY3RfZGF0YV9lcnJvcik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCXJjID0g ZGV2aWNlX2NyZWF0ZV9maWxlKCZtY2ktPmRldiwgJmRldl9hdHRyX2luamVjdF9kYXRhX3BvaXNv bik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBzeW5wc19lZGFjX3JlbW92ZV9zeXNmc19hdHRyaWJ1dGVzKHN0cnVjdCBtZW1fY3RsX2lu Zm8gKm1jaSkKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1jaS0+ZGV2LCAmZGV2X2F0dHJfaW5q ZWN0X2RhdGFfZXJyb3IpOworCWRldmljZV9yZW1vdmVfZmlsZSgmbWNpLT5kZXYsICZkZXZfYXR0 cl9pbmplY3RfZGF0YV9wb2lzb24pOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yb3dfYWRkcmVz c19tYXAoc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiwgdTMyICphZGRybWFwKQoreworCXUz MiBhZGRybWFwX3Jvd19iMl8xMDsKKwlpbnQgaW5kZXg7CisKKwlwcml2LT5yb3dfc2hpZnRbMF0g PSAoYWRkcm1hcFs1XSAmIFJPV19NQVhfVkFMX01BU0spICsgUk9XX0IwX0JBU0U7CisJcHJpdi0+ cm93X3NoaWZ0WzFdID0gKChhZGRybWFwWzVdID4+IDgpICYKKwkJCVJPV19NQVhfVkFMX01BU0sp ICsgUk9XX0IxX0JBU0U7CisKKwlhZGRybWFwX3Jvd19iMl8xMCA9IChhZGRybWFwWzVdID4+IDE2 KSAmIFJPV19NQVhfVkFMX01BU0s7CisJaWYgKGFkZHJtYXBfcm93X2IyXzEwICE9IFJPV19NQVhf VkFMX01BU0spIHsKKwkJZm9yIChpbmRleCA9IDI7IGluZGV4IDwgMTE7IGluZGV4KyspCisJCQlw cml2LT5yb3dfc2hpZnRbaW5kZXhdID0gYWRkcm1hcF9yb3dfYjJfMTAgKworCQkJCWluZGV4ICsg Uk9XX0IwX0JBU0U7CisKKwl9IGVsc2UgeworCQlwcml2LT5yb3dfc2hpZnRbMl0gPSAoYWRkcm1h cFs5XSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjJfQkFTRTsKKwkJcHJpdi0+cm93 X3NoaWZ0WzNdID0gKChhZGRybWFwWzldID4+IDgpICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSAr IFJPV19CM19CQVNFOworCQlwcml2LT5yb3dfc2hpZnRbNF0gPSAoKGFkZHJtYXBbOV0gPj4gMTYp ICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CNF9CQVNFOworCQlwcml2LT5yb3dfc2hp ZnRbNV0gPSAoKGFkZHJtYXBbOV0gPj4gMjQpICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJP V19CNV9CQVNFOworCQlwcml2LT5yb3dfc2hpZnRbNl0gPSAoYWRkcm1hcFsxMF0gJgorCQkJCVJP V19NQVhfVkFMX01BU0spICsgUk9XX0I2X0JBU0U7CisJCXByaXYtPnJvd19zaGlmdFs3XSA9ICgo YWRkcm1hcFsxMF0gPj4gOCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0I3X0JBU0U7 CisJCXByaXYtPnJvd19zaGlmdFs4XSA9ICgoYWRkcm1hcFsxMF0gPj4gMTYpICYKKwkJCQlST1df TUFYX1ZBTF9NQVNLKSArIFJPV19COF9CQVNFOworCQlwcml2LT5yb3dfc2hpZnRbOV0gPSAoKGFk ZHJtYXBbMTBdID4+IDI0KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjlfQkFTRTsK KwkJcHJpdi0+cm93X3NoaWZ0WzEwXSA9IChhZGRybWFwWzExXSAmCisJCQkJUk9XX01BWF9WQUxf TUFTSykgKyBST1dfQjEwX0JBU0U7CisJfQorCisJcHJpdi0+cm93X3NoaWZ0WzExXSA9ICgoKGFk ZHJtYXBbNV0gPj4gMjQpICYgUk9XX01BWF9WQUxfTUFTSykgPT0KKwkJCQlST1dfTUFYX1ZBTF9N QVNLKSA/IDAgOiAoKChhZGRybWFwWzVdID4+IDI0KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykg KyBST1dfQjExX0JBU0UpOworCXByaXYtPnJvd19zaGlmdFsxMl0gPSAoKGFkZHJtYXBbNl0gJiBS T1dfTUFYX1ZBTF9NQVNLKSA9PQorCQkJCVJPV19NQVhfVkFMX01BU0spID8gMCA6ICgoYWRkcm1h cFs2XSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjEyX0JBU0UpOworCXByaXYtPnJv d19zaGlmdFsxM10gPSAoKChhZGRybWFwWzZdID4+IDgpICYgUk9XX01BWF9WQUxfTUFTSykgPT0K KwkJCQlST1dfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzZdID4+IDgpICYKKwkJCQlS T1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMTNfQkFTRSk7CisJcHJpdi0+cm93X3NoaWZ0WzE0XSA9 ICgoKGFkZHJtYXBbNl0gPj4gMTYpICYgUk9XX01BWF9WQUxfTUFTSykgPT0KKwkJCQlST1dfTUFY X1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzZdID4+IDE2KSAmCisJCQkJUk9XX01BWF9WQUxf TUFTSykgKyBST1dfQjE0X0JBU0UpOworCXByaXYtPnJvd19zaGlmdFsxNV0gPSAoKChhZGRybWFw WzZdID4+IDI0KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFTSykg PyAwIDogKCgoYWRkcm1hcFs2XSA+PiAyNCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9X X0IxNV9CQVNFKTsKKwlwcml2LT5yb3dfc2hpZnRbMTZdID0gKChhZGRybWFwWzddICYgUk9XX01B WF9WQUxfTUFTSykgPT0KKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJtYXBbN10g JgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxNl9CQVNFKTsKKwlwcml2LT5yb3dfc2hp ZnRbMTddID0gKCgoYWRkcm1hcFs3XSA+PiA4KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJ Uk9XX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1hcFs3XSA+PiA4KSAmCisJCQkJUk9XX01B WF9WQUxfTUFTSykgKyBST1dfQjE3X0JBU0UpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9jb2x1 bW5fYWRkcmVzc19tYXAoc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiwgdTMyICphZGRybWFw KQoreworCXUzMiB3aWR0aCwgbWVtdHlwZTsKKwlpbnQgaW5kZXg7CisKKwltZW10eXBlID0gcmVh ZGwocHJpdi0+YmFzZWFkZHIgKyBDVFJMX09GU1QpOworCXdpZHRoID0gKG1lbXR5cGUgJiBFQ0Nf Q1RSTF9CVVNXSURUSF9NQVNLKSA+PiBFQ0NfQ1RSTF9CVVNXSURUSF9TSElGVDsKKworCXByaXYt PmNvbF9zaGlmdFswXSA9IDA7CisJcHJpdi0+Y29sX3NoaWZ0WzFdID0gMTsKKwlwcml2LT5jb2xf c2hpZnRbMl0gPSAoYWRkcm1hcFsyXSAmIENPTF9NQVhfVkFMX01BU0spICsgQ09MX0IyX0JBU0U7 CisJcHJpdi0+Y29sX3NoaWZ0WzNdID0gKChhZGRybWFwWzJdID4+IDgpICYKKwkJCUNPTF9NQVhf VkFMX01BU0spICsgQ09MX0IzX0JBU0U7CisJcHJpdi0+Y29sX3NoaWZ0WzRdID0gKCgoYWRkcm1h cFsyXSA+PiAxNikgJiBDT0xfTUFYX1ZBTF9NQVNLKSA9PQorCQkJQ09MX01BWF9WQUxfTUFTSykg PyAwIDogKCgoYWRkcm1hcFsyXSA+PiAxNikgJgorCQkJCQlDT0xfTUFYX1ZBTF9NQVNLKSArIENP TF9CNF9CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbNV0gPSAoKChhZGRybWFwWzJdID4+IDI0KSAm IENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRy bWFwWzJdID4+IDI0KSAmCisJCQkJCUNPTF9NQVhfVkFMX01BU0spICsgQ09MX0I1X0JBU0UpOwor CXByaXYtPmNvbF9zaGlmdFs2XSA9ICgoYWRkcm1hcFszXSAmIENPTF9NQVhfVkFMX01BU0spID09 CisJCQlDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJtYXBbM10gJgorCQkJCQlDT0xfTUFY X1ZBTF9NQVNLKSArIENPTF9CNl9CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbN10gPSAoKChhZGRy bWFwWzNdID4+IDgpICYgQ09MX01BWF9WQUxfTUFTSykgPT0KKwkJCUNPTF9NQVhfVkFMX01BU0sp ID8gMCA6ICgoKGFkZHJtYXBbM10gPj4gOCkgJgorCQkJCQlDT0xfTUFYX1ZBTF9NQVNLKSArIENP TF9CN19CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbOF0gPSAoKChhZGRybWFwWzNdID4+IDE2KSAm IENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRy bWFwWzNdID4+IDE2KSAmCisJCQkJCUNPTF9NQVhfVkFMX01BU0spICsgQ09MX0I4X0JBU0UpOwor CXByaXYtPmNvbF9zaGlmdFs5XSA9ICgoKGFkZHJtYXBbM10gPj4gMjQpICYgQ09MX01BWF9WQUxf TUFTSykgPT0KKwkJCUNPTF9NQVhfVkFMX01BU0spID8gMCA6ICgoKGFkZHJtYXBbM10gPj4gMjQp ICYKKwkJCQkJQ09MX01BWF9WQUxfTUFTSykgKyBDT0xfQjlfQkFTRSk7CisJaWYgKHdpZHRoID09 IEREUkNUTF9FV0RUSF82NCkgeworCQlpZiAobWVtdHlwZSAmIE1FTV9UWVBFX0xQRERSMykgewor CQkJcHJpdi0+Y29sX3NoaWZ0WzEwXSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09MX01BWF9WQUxf TUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBbNF0gJiBDT0xf TUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9CMTBfQkFTRSk7CisJCQlwcml2LT5jb2xfc2hpZnRb MTFdID0gKCgoYWRkcm1hcFs0XSA+PiA4KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09M X01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzRdID4+IDgpICYgQ09MX01BWF9W QUxfTUFTSykgKworCQkJCSBDT0xfQjExX0JBU0UpOworCQl9IGVsc2UgeworCQkJcHJpdi0+Y29s X3NoaWZ0WzExXSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09M X01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBbNF0gJiBDT0xfTUFYX1ZBTF9NQVNL KSArCisJCQkJIENPTF9CMTBfQkFTRSk7CisJCQlwcml2LT5jb2xfc2hpZnRbMTNdID0gKCgoYWRk cm1hcFs0XSA+PiA4KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFT SykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzRdID4+IDgpICYgQ09MX01BWF9WQUxfTUFTSykgKwor CQkJCSBDT0xfQjExX0JBU0UpOworCQl9CisJfSBlbHNlIGlmICh3aWR0aCA9PSBERFJDVExfRVdE VEhfMzIpIHsKKwkJaWYgKG1lbXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpIHsKKwkJCXByaXYtPmNv bF9zaGlmdFsxMF0gPSAoKChhZGRybWFwWzNdID4+IDI0KSAmCisJCQkJQ09MX01BWF9WQUxfTUFT SykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzNdID4+IDI0KSAm IENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I5X0JBU0UpOworCQkJcHJpdi0+Y29sX3No aWZ0WzExXSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01B WF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBbNF0gJiBDT0xfTUFYX1ZBTF9NQVNLKSAr CisJCQkJIENPTF9CMTBfQkFTRSk7CisJCX0gZWxzZSB7CisJCQlwcml2LT5jb2xfc2hpZnRbMTFd ID0gKCgoYWRkcm1hcFszXSA+PiAyNCkgJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9N QVhfVkFMX01BU0spID8gMCA6CisJCQkJKCgoYWRkcm1hcFszXSA+PiAyNCkgJiBDT0xfTUFYX1ZB TF9NQVNLKSArCisJCQkJIENPTF9COV9CQVNFKTsKKwkJCXByaXYtPmNvbF9zaGlmdFsxM10gPSAo KGFkZHJtYXBbNF0gJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0sp ID8gMCA6CisJCQkJKChhZGRybWFwWzRdICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xf QjEwX0JBU0UpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1lbXR5cGUgJiBNRU1fVFlQRV9MUERE UjMpIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMF0gPSAoKChhZGRybWFwWzNdID4+IDE2KSAmCisJ CQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChh ZGRybWFwWzNdID4+IDE2KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I4X0JBU0Up OworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoKGFkZHJtYXBbM10gPj4gMjQpICYKKwkJCQlD T0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgoKGFkZHJt YXBbM10gPj4gMjQpICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjlfQkFTRSk7CisJ CQlwcml2LT5jb2xfc2hpZnRbMTNdID0gKChhZGRybWFwWzRdICYKKwkJCQlDT0xfTUFYX1ZBTF9N QVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgoYWRkcm1hcFs0XSAmIENPTF9N QVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0IxMF9CQVNFKTsKKwkJfSBlbHNlIHsKKwkJCXByaXYt PmNvbF9zaGlmdFsxMV0gPSAoKChhZGRybWFwWzNdID4+IDE2KSAmCisJCQkJQ09MX01BWF9WQUxf TUFTSykgPT0gQ09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzNdID4+IDE2 KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I4X0JBU0UpOworCQkJcHJpdi0+Y29s X3NoaWZ0WzEzXSA9ICgoKGFkZHJtYXBbM10gPj4gMjQpICYKKwkJCQlDT0xfTUFYX1ZBTF9NQVNL KSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgoKGFkZHJtYXBbM10gPj4gMjQpICYg Q09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjlfQkFTRSk7CisJCX0KKwl9CisKKwlpZiAo d2lkdGgpIHsKKwkJZm9yIChpbmRleCA9IDk7IGluZGV4ID4gd2lkdGg7IGluZGV4LS0pIHsKKwkJ CXByaXYtPmNvbF9zaGlmdFtpbmRleF0gPSBwcml2LT5jb2xfc2hpZnRbaW5kZXggLSB3aWR0aF07 CisJCQlwcml2LT5jb2xfc2hpZnRbaW5kZXggLSB3aWR0aF0gPSAwOworCQl9CisJfQorfQorCitz dGF0aWMgdm9pZCBzZXR1cF9iYW5rX2FkZHJlc3NfbWFwKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYg KnByaXYsIHUzMiAqYWRkcm1hcCkKK3sKKwlwcml2LT5iYW5rX3NoaWZ0WzBdID0gKGFkZHJtYXBb MV0gJiBCQU5LX01BWF9WQUxfTUFTSykgKyBCQU5LX0IwX0JBU0U7CisJcHJpdi0+YmFua19zaGlm dFsxXSA9ICgoYWRkcm1hcFsxXSA+PiA4KSAmCisJCQkJQkFOS19NQVhfVkFMX01BU0spICsgQkFO S19CMV9CQVNFOworCXByaXYtPmJhbmtfc2hpZnRbMl0gPSAoKChhZGRybWFwWzFdID4+IDE2KSAm CisJCQkJQkFOS19NQVhfVkFMX01BU0spID09IEJBTktfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJ CSgoKGFkZHJtYXBbMV0gPj4gMTYpICYgQkFOS19NQVhfVkFMX01BU0spICsKKwkJCQkgQkFOS19C Ml9CQVNFKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfYmdfYWRkcmVzc19tYXAoc3RydWN0IHN5 bnBzX2VkYWNfcHJpdiAqcHJpdiwgdTMyICphZGRybWFwKQoreworCXByaXYtPmJhbmtncnBfc2hp ZnRbMF0gPSAoYWRkcm1hcFs4XSAmCisJCQkJQkFOS0dSUF9NQVhfVkFMX01BU0spICsgQkFOS0dS UF9CMF9CQVNFOworCXByaXYtPmJhbmtncnBfc2hpZnRbMV0gPSAoKChhZGRybWFwWzhdID4+IDgp ICYgQkFOS0dSUF9NQVhfVkFMX01BU0spID09CisJCQkJQkFOS0dSUF9NQVhfVkFMX01BU0spID8g MCA6ICgoKGFkZHJtYXBbOF0gPj4gOCkKKwkJCQkmIEJBTktHUlBfTUFYX1ZBTF9NQVNLKSArIEJB TktHUlBfQjFfQkFTRSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JhbmtfYWRkcmVzc19tYXAo c3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiwgdTMyICphZGRybWFwKQoreworCXByaXYtPnJh bmtfc2hpZnRbMF0gPSAoKGFkZHJtYXBbMF0gJiBSQU5LX01BWF9WQUxfTUFTSykgPT0KKwkJCQlS QU5LX01BWF9WQUxfTUFTSykgPyAwIDogKChhZGRybWFwWzBdICYKKwkJCQlSQU5LX01BWF9WQUxf TUFTSykgKyBSQU5LX0IwX0JBU0UpOworfQorCisvKioKKyAqIHNldHVwX2FkZHJlc3NfbWFwIC0J U2V0IEFkZHJlc3MgTWFwIGJ5IHF1ZXJ5aW5nIEFERFJNQVAgcmVnaXN0ZXJzCisgKiBAcHJpdjoJ CUREUiBtZW1vcnkgY29udHJvbGxlciBwcml2YXRlIGluc3RhbmNlIGRhdGEKKyAqCisgKiBTZXQg QWRkcmVzcyBNYXAgYnkgcXVlcnlpbmcgQUREUk1BUCByZWdpc3RlcnMuCiAgKgotICogUmV0dXJu OiAwIGlmIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIHdhcyBzdWNjZXNzZnVsbHkgYm91bmQgdG8g dGhlCi0gKiBkcml2ZXI7IG90aGVyd2lzZSwgPCAwIG9uIGVycm9yLgorICogUmV0dXJuOiBub25l LgogICovCitzdGF0aWMgdm9pZCBzZXR1cF9hZGRyZXNzX21hcChzdHJ1Y3Qgc3lucHNfZWRhY19w cml2ICpwcml2KQoreworCXUzMiBhZGRybWFwWzEyXTsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKGlu ZGV4ID0gMDsgaW5kZXggPCAxMjsgaW5kZXgrKykgeworCQl1MzIgYWRkcm1hcF9vZmZzZXQ7CisK KwkJYWRkcm1hcF9vZmZzZXQgPSBFQ0NfQUREUk1BUDBfT0ZGU0VUICsgKGluZGV4ICogNCk7CisJ CWFkZHJtYXBbaW5kZXhdID0gcmVhZGwocHJpdi0+YmFzZWFkZHIgKyBhZGRybWFwX29mZnNldCk7 CisJfQorCisJLyogU2V0IFJvdyBBZGRyZXNzIE1hcCAqLworCXNldHVwX3Jvd19hZGRyZXNzX21h cChwcml2LCBhZGRybWFwKTsKKworCS8qIFNldCBDb2x1bW4gQWRkcmVzcyBNYXAgKi8KKwlzZXR1 cF9jb2x1bW5fYWRkcmVzc19tYXAocHJpdiwgYWRkcm1hcCk7CisKKwkvKiBTZXQgQmFuayBBZGRy ZXNzIE1hcCAqLworCXNldHVwX2JhbmtfYWRkcmVzc19tYXAocHJpdiwgYWRkcm1hcCk7CisKKwkv KiBTZXQgQmFuayBHcm91cCBBZGRyZXNzIE1hcCAqLworCXNldHVwX2JnX2FkZHJlc3NfbWFwKHBy aXYsIGFkZHJtYXApOworCisJLyogU2V0IFJhbmsgQWRkcmVzcyBNYXAgKi8KKwlzZXR1cF9yYW5r X2FkZHJlc3NfbWFwKHByaXYsIGFkZHJtYXApOworfQorCiBzdGF0aWMgaW50IHN5bnBzX2VkYWNf bWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbWVtX2N0 bF9pbmZvICptY2k7CiAJc3RydWN0IGVkYWNfbWNfbGF5ZXIgbGF5ZXJzWzJdOwogCXN0cnVjdCBz eW5wc19lZGFjX3ByaXYgKnByaXY7Ci0JaW50IHJjOworCWludCByYywgaXJxLCBzdGF0dXM7CiAJ c3RydWN0IHJlc291cmNlICpyZXM7CiAJdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKIAljb25zdCBz dHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRhOwpAQCAtNDkxLDcgKzEyNzMsNyBAQCBz dGF0aWMgaW50IHN5bnBzX2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAkJcmV0dXJuIFBUUl9FUlIoYmFzZWFkZHIpOwogCiAJcF9kYXRhID0gb2ZfZGV2aWNlX2dl dF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwotCWlmICghKHBfZGF0YS0+ZWRhY19nZXRfZWNjc3Rh dGUoYmFzZWFkZHIpKSkgeworCWlmICghKHBfZGF0YS0+Z2V0X2VjY3N0YXRlKGJhc2VhZGRyKSkp IHsKIAkJZWRhY19wcmludGsoS0VSTl9JTkZPLCBFREFDX01DLCAiRUNDIG5vdCBlbmFibGVkXG4i KTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CkBAIC01MjIsNiArMTMwNCwyNyBAQCBzdGF0aWMgaW50 IHN5bnBzX2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZ290 byBmcmVlX2VkYWNfbWM7CiAJfQogCisJaWYgKHByaXYtPnBfZGF0YS0+cXVpcmtzICYgRERSX0VD Q19JTlRSX1NVUFBPUlQpIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwkJ aWYgKGlycSA8IDApIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01DLAorCQkJCQki Tm8gaXJxICVkIGluIERUXG4iLCBpcnEpOworCQkJZ290byBmcmVlX2VkYWNfbWM7CisJCX0KKwor CQlzdGF0dXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwKKwkJCXN5bnBzX2Vk YWNfaW50cl9oYW5kbGVyLAorCQkJMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIG1jaSk7CisJCWlm IChzdGF0dXMgPCAwKSB7CisJCQllZGFjX3ByaW50ayhLRVJOX0VSUiwgRURBQ19NQywgIkZhaWxl ZCB0byByZXF1ZXN0IElycVxuIik7CisJCQlnb3RvIGZyZWVfZWRhY19tYzsKKwkJfQorCisJCS8q IEVuYWJsZSBVRS9DRSBJbnRlcnJ1cHRzICovCisJCXdyaXRlbCgoRERSX1FPU1VFX01BU0sgfCBE RFJfUU9TQ0VfTUFTSyksCisJCQlwcml2LT5iYXNlYWRkciArIEREUl9RT1NfSVJRX0VOX09GU1Qp OworCX0KKwogCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKIAlpZiAocmMpIHsKIAkJZWRhY19w cmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCkBAIC01MjksMTEgKzEzMzIsMjQgQEAgc3RhdGljIGlu dCBzeW5wc19lZGFjX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdv dG8gZnJlZV9lZGFjX21jOwogCX0KIAorCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9F Q0NfREFUQV9QT0lTT05fU1VQUE9SVCkgeworCQlpZiAoc3lucHNfZWRhY19jcmVhdGVfc3lzZnNf YXR0cmlidXRlcyhtY2kpKSB7CisJCQllZGFjX3ByaW50ayhLRVJOX0VSUiwgRURBQ19NQywKKwkJ CQkJIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZW50cmllc1xuIik7CisJCQlnb3RvIGZyZWVfZWRh Y19tYzsKKwkJfQorCX0KKworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwZGV2LT5kZXYu b2Zfbm9kZSwKKwkJCQkgICAgInhsbngsenlucW1wLWRkcmMtMi40MGEiKSkKKwkJc2V0dXBfYWRk cmVzc19tYXAocHJpdik7CisKIAkvKgogCSAqIFN0YXJ0IGNhcHR1cmluZyB0aGUgY29ycmVjdGFi bGUgYW5kIHVuY29ycmVjdGFibGUgZXJyb3JzLiBBIHdyaXRlIG9mCiAJICogMCBzdGFydHMgdGhl IGNvdW50ZXJzLgogCSAqLwotCXdyaXRlbCgweDAsIGJhc2VhZGRyICsgRUNDX0NUUkxfT0ZTVCk7 CisJaWYgKCEocHJpdi0+cF9kYXRhLT5xdWlya3MgJiBERFJfRUNDX0lOVFJfU1VQUE9SVCkpCisJ CXdyaXRlbCgweDAsIGJhc2VhZGRyICsgRUNDX0NUUkxfT0ZTVCk7CiAJcmV0dXJuIHJjOwogCiBm cmVlX2VkYWNfbWM6CkBAIC01NDIsMTcgKzEzNTgsMTkgQEAgc3RhdGljIGludCBzeW5wc19lZGFj X21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIHJjOwogfQog Ci0vKioKLSAqIHN5bnBzX2VkYWNfbWNfcmVtb3ZlIC0gVW5iaW5kIGRyaXZlciBmcm9tIGNvbnRy b2xsZXIKLSAqIEBwZGV2OglQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0Ci0g KgotICogUmV0dXJuOiBVbmNvbmRpdGlvbmFsbHkgMAotICovCiBzdGF0aWMgaW50IHN5bnBzX2Vk YWNfbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1l bV9jdGxfaW5mbyAqbWNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN5 bnBzX2VkYWNfcHJpdiAqcHJpdjsKIAorCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCWlmIChwcml2 LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKQorCQkvKiBEaXNhYmxlIFVF L0NFIEludGVycnVwdHMgKi8KKwkJd3JpdGVsKChERFJfUU9TVUVfTUFTSyB8IEREUl9RT1NDRV9N QVNLKSwKKwkJCXByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfREJfT0ZTVCk7CiAJZWRhY19t Y19kZWxfbWMoJnBkZXYtPmRldik7CisJaWYgKHByaXYtPnBfZGF0YS0+cXVpcmtzICYgRERSX0VD Q19EQVRBX1BPSVNPTl9TVVBQT1JUKQorCQlzeW5wc19lZGFjX3JlbW92ZV9zeXNmc19hdHRyaWJ1 dGVzKG1jaSk7CiAJZWRhY19tY19mcmVlKG1jaSk7CiAKIAlyZXR1cm4gMDsK