From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: [RFC v2 7/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Wed, 20 Sep 2017 18:37:10 -0600 Message-ID: <1505954230-18892-8-git-send-email-sgoel@codeaurora.org> References: <1505954230-18892-1-git-send-email-sgoel@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dupV0-0000R4-T6 for xen-devel@lists.xenproject.org; Thu, 21 Sep 2017 00:37:51 +0000 In-Reply-To: <1505954230-18892-1-git-send-email-sgoel@codeaurora.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, wei.liu2@citrix.com, george.dunlap@eu.citrix.com, Andrew.Cooper3@citrix.com, jbeulich@suse.com, Sameer Goel , Ian.Jackson@citrix.com, nd@arm.com, robin.murphy@arm.com, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIgZm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBU aGUgaW50ZW50IGhlcmUKaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxl LgotIEdsdWUgY29kZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGJyaWRnZSB0aGUgQVBJIGNhbGxz LgotIENhbGxlZCBMaW51eCBmdW5jdGlvbnMgZnJvbSB0aGUgWGVuIElPTU1VIGZ1bmN0aW9uIGNh bGxzLgotIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjogY29tbWVudCAq LwoKU2lnbmVkLW9mZi1ieTogU2FtZWVyIEdvZWwgPHNnb2VsQGNvZGVhdXJvcmEub3JnPgotLS0K IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZSAgfCAgIDEgKwogeGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyB8IDg1MyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDczOCBpbnNlcnRpb25zKCspLCAxMTYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2Vm aWxlIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCmluZGV4IGY0Y2QyNmUu LjU3YTZkYTYgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmls ZQorKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKQEAgLTEsMiArMSwz IEBACiBvYmoteSArPSBpb21tdS5vCiBvYmoteSArPSBzbW11Lm8KK29iai15ICs9IHNtbXUtdjMu bwpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMKaW5kZXggMzgwOTY5YS4uOGYzYjQz ZCAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYworKysg Yi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCkBAIC0xOCwyOCArMTgsMjY2 IEBACiAgKiBBdXRob3I6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgogICoKICAq IFRoaXMgZHJpdmVyIGlzIHBvd2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQgYm9tYmF5IG1peC4KKyAq CisgKgorICogQmFzZWQgb24gTGludXggZHJpdmVycy9pb21tdS9hcm0tc21tdS12My5jCisgKiA9 PiBjb21taXQgYmRmOTU5MjMwODZmYjM1OWNjYjQ0YzgxNTcyNGMzYWNlMTYxMWM5MAorICoKKyAq IFhlbiBtb2RpZmljYXRpb25zOgorICogU2FtZWVyIEdvZWwgPHNnb2VsQGNvZGVhdXJvcmEub3Jn PgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRl IDxsaW51eC9hY3BpX2lvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUg PGxpbnV4L2RtYS1pb21tdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgv bXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0 Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KLQotI2luY2x1ZGUgImlv LXBndGFibGUuaCIKKyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+CisjaW5jbHVkZSA8eGVuL2RlbGF5 Lmg+CisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CisjaW5jbHVkZSA8eGVuL2Vyci5oPgorI2luY2x1 ZGUgPHhlbi9pcnEuaD4KKyNpbmNsdWRlIDx4ZW4vbGliLmg+CisjaW5jbHVkZSA8eGVuL2xpc3Qu aD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgorI2luY2x1ZGUg PHhlbi9yYnRyZWUuaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vc2l6 ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2RldmljZS5oPgor I2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgorI2luY2x1ZGUg PHhlbi9hY3BpLmg+CisKK3R5cGVkZWYgcGFkZHJfdCBwaHlzX2FkZHJfdDsKK3R5cGVkZWYgcGFk ZHJfdCBkbWFfYWRkcl90OworCisvKiBBbGlhcyB0byBYZW4gZGV2aWNlIHRyZWUgaGVscGVycyAq LworI2RlZmluZSBkZXZpY2Vfbm9kZSBkdF9kZXZpY2Vfbm9kZQorI2RlZmluZSBvZl9waGFuZGxl X2FyZ3MgZHRfcGhhbmRsZV9hcmdzCisjZGVmaW5lIG9mX2RldmljZV9pZCBkdF9kZXZpY2VfbWF0 Y2gKKyNkZWZpbmUgb2ZfbWF0Y2hfbm9kZSBkdF9tYXRjaF9ub2RlCisjZGVmaW5lIG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0KSAoIWR0X3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBw bmFtZSwgb3V0KSkKKyNkZWZpbmUgb2ZfcHJvcGVydHlfcmVhZF9ib29sIGR0X3Byb3BlcnR5X3Jl YWRfYm9vbAorI2RlZmluZSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyBkdF9wYXJzZV9waGFu ZGxlX3dpdGhfYXJncworI2RlZmluZSBtdXRleCBzcGlubG9ja190CisjZGVmaW5lIG11dGV4X2lu aXQgc3Bpbl9sb2NrX2luaXQKKyNkZWZpbmUgbXV0ZXhfbG9jayBzcGluX2xvY2sKKyNkZWZpbmUg bXV0ZXhfdW5sb2NrIHNwaW5fdW5sb2NrCisKKy8qIFhlbjogSGVscGVycyB0byBnZXQgZGV2aWNl IE1NSU8gYW5kIElSUXMgKi8KK3N0cnVjdCByZXNvdXJjZSB7CisJdTY0IGFkZHI7CisJdTY0IHNp emU7CisJdW5zaWduZWQgaW50IHR5cGU7Cit9OworCisjZGVmaW5lIHJlc291cmNlX3NpemUocmVz KSAoKHJlcyktPnNpemUpCisKKyNkZWZpbmUgcGxhdGZvcm1fZGV2aWNlIGRldmljZQorCisjZGVm aW5lIElPUkVTT1VSQ0VfTUVNIDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMQorCitzdGF0aWMg c3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAgICAgIHVu c2lnbmVkIGludCBudW0pCit7CisJLyoKKwkgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJl dHdlZW4gMiBjYWxscyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UuCisJICogSXQncyBxdWl0ZSB1 Z2x5IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBjb2RlIGluIHRoZSBwYXJ0CisJICog aW1wb3J0ZWQgZnJvbSBMaW51eAorCSAqLworCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzOwor CXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOworCXN0cnVjdCBhY3BpX2lvcnRfc21t dV92MyAqbm9kZV9zbW11X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXMudHlwZSA9IHR5cGU7 CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VSQ0VfTUVNOgorCQlpZiAocGRldi0+ dHlwZSA9PSBERVZfQUNQSSkgeworCQkJcmV0ID0gMTsKKwkJCWlvcnRfbm9kZSA9IHBkZXYtPmFj cGlfbm9kZTsKKwkJCW5vZGVfc21tdV9kYXRhID0KKwkJCQkoc3RydWN0IGFjcGlfaW9ydF9zbW11 X3YzICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7CisKKwkJCWlmIChub2RlX3NtbXVfZGF0YSAhPSBO VUxMKSB7CisJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVfZGF0YS0+YmFzZV9hZGRyZXNzOworCQkJ CXJlcy5zaXplID0gU1pfMTI4SzsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJ cmV0ID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAorCQkJCQkJ ICAgICZyZXMuYWRkciwgJnJlcy5zaXplKTsKKwkJfQorCisJCXJldHVybiAoKHJldCkgPyBOVUxM IDogJnJlcyk7CisKKwljYXNlIElPUkVTT1VSQ0VfSVJROgorCQlyZXQgPSBwbGF0Zm9ybV9nZXRf aXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBO VUxMOworCisJCXJlcy5hZGRyID0gcmV0OworCQlyZXMuc2l6ZSA9IDE7CisKKwkJcmV0dXJuICZy ZXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGxh dGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29uc3Qg Y2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKKwlzdHJ1 Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKKwlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMg Km5vZGVfc21tdV9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKHBkZXYtPnR5cGUgPT0gREVW X0FDUEkpIHsKKwkJaW9ydF9ub2RlID0gcGRldi0+YWNwaV9ub2RlOworCQlub2RlX3NtbXVfZGF0 YSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKKwor CQlpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJjbXAobmFtZSwgImV2 ZW50cSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5ldmVudF9nc2l2OworCQkJZWxzZSBp ZiAoIXN0cmNtcChuYW1lLCAicHJpcSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5wcmlf Z3NpdjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3luYyIpKQorCQkJCXJldCA9 IG5vZGVfc21tdV9kYXRhLT5zeW5jX2dzaXY7CisJCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJn ZXJyb3IiKSkKKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2OworCQkJZWxzZQor CQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlkdHByb3AgPSBkdF9maW5kX3By b3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVycnVwdC1uYW1lcyIsIE5VTEwpOworCQlpZiAo IWR0cHJvcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghZHRwcm9wLT52YWx1ZSkKKwkJ CXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIHJlYWR4 X3BvbGxfdGltZW91dChvcCwgYWRkciwgdmFsLCBjb25kLCBzbGVlcF91cywgdGltZW91dF91cykg XAorKHsgXAorCXNfdGltZV90IGRlYWRsaW5lID0gTk9XKCkgKyBNSUNST1NFQ1ModGltZW91dF91 cyk7IFwKKwlmb3IgKDs7KSB7IFwKKwkJKHZhbCkgPSBvcChhZGRyKTsgXAorCQlpZiAoY29uZCkg XAorCQkJYnJlYWs7IFwKKwkJaWYgKE5PVygpID4gZGVhZGxpbmUpIHsgXAorCQkJKHZhbCkgPSBv cChhZGRyKTsgXAorCQkJYnJlYWs7IFwKKwkJfSBcCisJCWNwdV9yZWxheCgpOyBcCisJCXVkZWxh eShzbGVlcF91cyk7IFwKKwl9IFwKKwkoY29uZCkgPyAwIDogLUVUSU1FRE9VVDsgXAorfSkKKwor I2RlZmluZSByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dChhZGRyLCB2YWwsIGNvbmQsIGRlbGF5 X3VzLCB0aW1lb3V0X3VzKSBcCisJcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsX3JlbGF4ZWQsIGFk ZHIsIHZhbCwgY29uZCwgZGVsYXlfdXMsIHRpbWVvdXRfdXMpCisKKy8qIFhlbjogSGVscGVycyBm b3IgSVJRIGZ1bmN0aW9ucyAqLworI2RlZmluZSByZXF1ZXN0X2lycShpcnEsIGZ1bmMsIGZsYWdz LCBuYW1lLCBkZXYpIHJlcXVlc3RfaXJxKGlycSwgZmxhZ3MsIGZ1bmMsIG5hbWUsIGRldikKKyNk ZWZpbmUgZnJlZV9pcnEgcmVsZWFzZV9pcnEKKworZW51bSBpcnFyZXR1cm4geworCUlSUV9OT05F CT0gKDAgPDwgMCksCisJSVJRX0hBTkRMRUQJPSAoMSA8PCAwKSwKK307CisKK3R5cGVkZWYgZW51 bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisKKy8qIERldmljZSBsb2dnZXIgZnVuY3Rpb25zICov CisjZGVmaW5lIGRldl9wcmludChkZXYsIGx2bCwgZm10LCAuLi4pCQkJCQkJXAorCSBwcmludGso bHZsICJzbW11OiAiIGZtdCwgIyMgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZGV2X2RiZyhkZXYs IGZtdCwgLi4uKSBkZXZfcHJpbnQoZGV2LCBYRU5MT0dfREVCVUcsIGZtdCwgIyMgX19WQV9BUkdT X18pCisjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgZGV2X3ByaW50KGRldiwgWEVO TE9HX0lORk8sIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl93YXJuKGRldiwgZm10 LCAuLi4pIGRldl9wcmludChkZXYsIFhFTkxPR19XQVJOSU5HLCBmbXQsICMjIF9fVkFfQVJHU19f KQorI2RlZmluZSBkZXZfZXJyKGRldiwgZm10LCAuLi4pIGRldl9wcmludChkZXYsIFhFTkxPR19F UlIsIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl9pbmZvKGRldiwgZm10LCAuLi4p IGRldl9wcmludChkZXYsIFhFTkxPR19JTkZPLCBmbXQsICMjIF9fVkFfQVJHU19fKQorCisjZGVm aW5lIGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGV2LCBmbXQsIC4uLikJCQkJCVwKKwkgZGV2X3ByaW50 KGRldiwgWEVOTE9HX0VSUiwgZm10LCAjIyBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBkZXZfbmFt ZShkZXYpIGR0X25vZGVfZnVsbF9uYW1lKGRldl90b19kdChkZXYpKQorCisvKiBBbGlhcyB0byBY ZW4gYWxsb2NhdGlvbiBoZWxwZXJzICovCisjZGVmaW5lIGtmcmVlIHhmcmVlCisjZGVmaW5lIGtt YWxsb2Moc2l6ZSwgZmxhZ3MpCQlfeG1hbGxvYyhzaXplLCBzaXplb2Yodm9pZCAqKSkKKyNkZWZp bmUga3phbGxvYyhzaXplLCBmbGFncykJCV94emFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKQor I2RlZmluZSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplLCBmbGFncykJX3h6YWxsb2Moc2l6ZSwgc2l6 ZW9mKHZvaWQgKikpCisjZGVmaW5lIGttYWxsb2NfYXJyYXkoc2l6ZSwgbiwgZmxhZ3MpCV94bWFs bG9jX2FycmF5KHNpemUsIHNpemVvZih2b2lkICopLCBuKQorCisvKiBDb21wYXRpYmlsaXR5IGRl ZmluZXMgKi8KKyN1bmRlZiBXQVJOX09OCisjZGVmaW5lIFdBUk5fT04oY29uZCkgKCEhY29uZCkK KyNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmQpIFdBUk5fT04oY29uZCkKKworc3RhdGljIHZvaWQg X19pb21lbSAqZGV2bV9pb3JlbWFwX3Jlc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJ ICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlpZiAo IXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9NRU0pIHsKKwkJZGV2X2VycihkZXYsICJJ bnZhbGlkIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJ cHRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+YWRkciwgcmVzLT5zaXplKTsKKwlpZiAoIXB0cikg eworCQlkZXZfZXJyKGRldiwKKwkJCSJpb3JlbWFwIGZhaWxlZCAoYWRkciAweCUiUFJJeDY0IiBz aXplIDB4JSJQUkl4NjQiKVxuIiwKKwkJCXJlcy0+YWRkciwgcmVzLT5zaXplKTsKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworLyogWGVuOiBEdW1t eSBpb21tdV9kb21haW4gKi8KK3N0cnVjdCBpb21tdV9kb21haW4geworCS8qIFJ1bnRpbWUgU01N VSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGlvbW11X2RvbWFpbiAqLworCXN0cnVjdCBhcm1fc21t dV9kb21haW4JCSpwcml2OworCXVuc2lnbmVkIGludAkJCXR5cGU7CisKKwlhdG9taWNfdCByZWY7 CisJLyogVXNlZCB0byBsaW5rIGlvbW11X2RvbWFpbiBjb250ZXh0cyBmb3IgYSBzYW1lIGRvbWFp bi4KKwkgKiBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVyLVNNTVUgdG8gdXNlZCBieSB0aGUgZG9t YWluLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7Cit9OworLyogWGVuOiBEb21haW4g dHlwZSBkZWZpbml0aW9ucy4gTm90IHJlYWxseSBuZWVkZWQgZm9yIFhlbiwgZGVmaW5pbmcgdG8g cG9ydAorICogTGludXggY29kZSBhcy1pcworICovCisjZGVmaW5lIElPTU1VX0RPTUFJTl9VTk1B TkFHRUQgMAorI2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKKyNkZWZpbmUgSU9NTVVfRE9NQUlO X0lERU5USVRZIDIKKworLyogWGVuOiBEZXNjcmliZXMgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9y IGEgWGVuIGRvbWFpbiAqLworc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4geworCXNwaW5sb2Nr X3QJCQlsb2NrOworCS8qIExpc3Qgb2YgaW9tbXUgZG9tYWlucyBhc3NvY2lhdGVkIHRvIHRoaXMg ZG9tYWluICovCisJc3RydWN0IGxpc3RfaGVhZAkJaW9tbXVfZG9tYWluczsKK307CisKKy8qCisg KiBYZW46IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0b3JlZCBpbiBkZXYtPmFyY2hk YXRhLmlvbW11CisgKgorICogVGhlIGRldi0+YXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpb21t dV9kb21haW4gKHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvZgorICogdGhlIFNNTVUpLgorICovCitz dHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWlu OworfTsKIAogLyogTU1JTyByZWdpc3RlcnMgKi8KICNkZWZpbmUgQVJNX1NNTVVfSURSMAkJCTB4 MApAQCAtNDEyLDEwICs2NTAsMTIgQEAKICNkZWZpbmUgTVNJX0lPVkFfQkFTRQkJCTB4ODAwMDAw MAogI2RlZmluZSBNU0lfSU9WQV9MRU5HVEgJCQkweDEwMDAwMAogCisjaWYgMCAvKiBOb3QgYXBw bGljYWJsZSBmb3IgWGVuICovCiBzdGF0aWMgYm9vbCBkaXNhYmxlX2J5cGFzczsKIG1vZHVsZV9w YXJhbV9uYW1lZChkaXNhYmxlX2J5cGFzcywgZGlzYWJsZV9ieXBhc3MsIGJvb2wsIFNfSVJVR08p OwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2J5cGFzcywKIAkiRGlzYWJsZSBieXBhc3Mgc3Ry ZWFtcyBzdWNoIHRoYXQgaW5jb21pbmcgdHJhbnNhY3Rpb25zIGZyb20gZGV2aWNlcyB0aGF0IGFy ZSBub3QgYXR0YWNoZWQgdG8gYW4gaW9tbXUgZG9tYWluIHdpbGwgcmVwb3J0IGFuIGFib3J0IGJh Y2sgdG8gdGhlIGRldmljZSBhbmQgd2lsbCBub3QgYmUgYWxsb3dlZCB0byBwYXNzIHRocm91Z2gg dGhlIFNNTVUuIik7CisjZW5kaWYKIAogZW51bSBwcmlfcmVzcCB7CiAJUFJJX1JFU1BfREVOWSwK QEAgLTQyMyw2ICs2NjMsNyBAQCBlbnVtIHByaV9yZXNwIHsKIAlQUklfUkVTUF9TVUNDLAogfTsK IAorI2lmIDAgLyogWGVuOiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAqLwogZW51 bSBhcm1fc21tdV9tc2lfaW5kZXggewogCUVWVFFfTVNJX0lOREVYLAogCUdFUlJPUl9NU0lfSU5E RVgsCkBAIC00NDcsNiArNjg4LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IGFybV9zbW11X21zaV9j ZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNdID0gewogCQlBUk1fU01NVV9QUklRX0lSUV9DRkcyLAog CX0sCiB9OworI2VuZGlmCiAKIHN0cnVjdCBhcm1fc21tdV9jbWRxX2VudCB7CiAJLyogQ29tbW9u IGZpZWxkcyAqLwpAQCAtNTUxLDYgKzc5Myw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewog CXUxNgkJCQl2bWlkOwogCXU2NAkJCQl2dHRicjsKIAl1NjQJCQkJdnRjcjsKKwkvKiBYZW46IERv bWFpbiBhc3NvY2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBkb21haW4J CQkqZG9tYWluOwogfTsKIAogc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewpAQCAtNjIzLDkg Kzg2NywyMCBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKIAlzdHJ1Y3QgYXJtX3NtbXVfc3Ry dGFiX2NmZwlzdHJ0YWJfY2ZnOwogCiAJLyogSU9NTVUgY29yZSBjb2RlIGhhbmRsZSAqLwotCXN0 cnVjdCBpb21tdV9kZXZpY2UJCWlvbW11OworCS8vc3RydWN0IGlvbW11X2RldmljZQkJaW9tbXU7 CisKKwkvKiBYZW46IE5lZWQgdG8ga2VlcCBhIGxpc3Qgb2YgU01NVSBkZXZpY2VzICovCisJc3Ry dWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBkZXZpY2VzOwogfTsKIAorLyogWGVuOiBLZWVw IGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGlj IERFRklORV9TUElOTE9DSyhhcm1fc21tdV9kZXZpY2VzX2xvY2spOworc3RhdGljIExJU1RfSEVB RChhcm1fc21tdV9kZXZpY2VzKTsKKy8qIFhlbjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2aWNl IHVzaW5nIGZ3bm9kZSAqLworc3RhdGljCitzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21t dV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOworCisKIC8qIFNN TVUgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIG1hc3RlciAqLwogc3RydWN0IGFybV9zbW11X21hc3Rl cl9kYXRhIHsKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlCQkqc21tdTsKQEAgLTY0Miw3ICs4OTcs NyBAQCBlbnVtIGFybV9zbW11X2RvbWFpbl9zdGFnZSB7CiAKIHN0cnVjdCBhcm1fc21tdV9kb21h aW4gewogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UJCSpzbW11OwotCXN0cnVjdCBtdXRleAkJCWlu aXRfbXV0ZXg7IC8qIFByb3RlY3RzIHNtbXUgcG9pbnRlciAqLworCW11dGV4CQkJaW5pdF9tdXRl eDsgLyogUHJvdGVjdHMgc21tdSBwb2ludGVyICovCiAKIAlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMJ CSpwZ3RibF9vcHM7CiAJc3BpbmxvY2tfdAkJCXBndGJsX2xvY2s7CkBAIC03MzcsMTUgKzk5Miwx NiBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9pbmNfcHJvZChzdHJ1Y3QgYXJtX3NtbXVfcXVldWUgKnEp CiAgKi8KIHN0YXRpYyBpbnQgcXVldWVfcG9sbF9jb25zKHN0cnVjdCBhcm1fc21tdV9xdWV1ZSAq cSwgYm9vbCBkcmFpbiwgYm9vbCB3ZmUpCiB7Ci0Ja3RpbWVfdCB0aW1lb3V0ID0ga3RpbWVfYWRk X3VzKGt0aW1lX2dldCgpLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRfVVMpOworCXNfdGltZV90IGRl YWRsaW5lID0gTk9XKCkgKyBNSUNST1NFQ1MoQVJNX1NNTVVfUE9MTF9USU1FT1VUX1VTKTsKIAog CXdoaWxlIChxdWV1ZV9zeW5jX2NvbnMocSksIChkcmFpbiA/ICFxdWV1ZV9lbXB0eShxKSA6IHF1 ZXVlX2Z1bGwocSkpKSB7Ci0JCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0 KSA+IDApCisKKwkJaWYgKE5PVygpID4gZGVhZGxpbmUpCiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsK IAotCQlpZiAod2ZlKSB7CisJCWlmICh3ZmUpCiAJCQl3ZmUoKTsKLQkJfSBlbHNlIHsKKwkJZWxz ZSB7CiAJCQljcHVfcmVsYXgoKTsKIAkJCXVkZWxheSgxKTsKIAkJfQpAQCAtOTMxLDcgKzExODcs NyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9jbWRxX2lzc3VlX2NtZChzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11LAogCQlkZXZfZXJyX3JhdGVsaW1pdGVkKHNtbXUtPmRldiwgIkNNRF9TWU5D IHRpbWVvdXRcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtbXUtPmNtZHEubG9jaywg ZmxhZ3MpOwogfQotCisjaWYgMAogLyogQ29udGV4dCBkZXNjcmlwdG9yIG1hbmlwdWxhdGlvbiBm dW5jdGlvbnMgKi8KIHN0YXRpYyB1NjQgYXJtX3NtbXVfY3B1X3Rjcl90b19jZCh1NjQgdGNyKQog ewpAQCAtOTc0LDcgKzEyMzAsNyBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV93cml0ZV9jdHhfZGVz YyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LAogCiAJY2ZnLT5jZHB0clszXSA9IGNwdV90 b19sZTY0KGNmZy0+Y2QubWFpciA8PCBDVFhERVNDX0NEXzNfTUFJUl9TSElGVCk7CiB9Ci0KKyNl bmRpZgogLyogU3RyZWFtIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2 b2lkCiBhcm1fc21tdV93cml0ZV9zdHJ0YWJfbDFfZGVzYyhfX2xlNjQgKmRzdCwgc3RydWN0IGFy bV9zbW11X3N0cnRhYl9sMV9kZXNjICpkZXNjKQpAQCAtMTA0NCw3ICsxMzAwLDcgQEAgc3RhdGlj IHZvaWQgYXJtX3NtbXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpz bW11LCB1MzIgc2lkLAogCQkJc3RlX2xpdmUgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RS VEFCX1NURV8wX0NGR19BQk9SVDoKLQkJCWlmIChkaXNhYmxlX2J5cGFzcykKKwkJCS8vTm8gYnlw YXNzIG92ZXJyaWRlIGZvciBYZW4KIAkJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOyAv KiBTVEUgY29ycnVwdGlvbiAqLwpAQCAtMTA1Niw3ICsxMzEyLDcgQEAgc3RhdGljIHZvaWQgYXJt X3NtbXVfd3JpdGVfc3RydGFiX2VudChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1MzIg c2lkLAogCiAJLyogQnlwYXNzL2ZhdWx0ICovCiAJaWYgKCFzdGUtPmFzc2lnbmVkIHx8ICEoc3Rl LT5zMV9jZmcgfHwgc3RlLT5zMl9jZmcpKSB7Ci0JCWlmICghc3RlLT5hc3NpZ25lZCAmJiBkaXNh YmxlX2J5cGFzcykKKwkJaWYgKCFzdGUtPmFzc2lnbmVkKQogCQkJdmFsIHw9IFNUUlRBQl9TVEVf MF9DRkdfQUJPUlQ7CiAJCWVsc2UKIAkJCXZhbCB8PSBTVFJUQUJfU1RFXzBfQ0ZHX0JZUEFTUzsK QEAgLTExMzUsMTYgKzEzOTEsMjAgQEAgc3RhdGljIGludCBhcm1fc21tdV9pbml0X2wyX3N0cnRh YihzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1MzIgc2lkKQogCXZvaWQgKnN0cnRhYjsK IAlzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2NmZyAqY2ZnID0gJnNtbXUtPnN0cnRhYl9jZmc7CiAJ c3RydWN0IGFybV9zbW11X3N0cnRhYl9sMV9kZXNjICpkZXNjID0gJmNmZy0+bDFfZGVzY1tzaWQg Pj4gU1RSVEFCX1NQTElUXTsKKwl1MzIgYWxpZ25tZW50ID0gMDsKIAogCWlmIChkZXNjLT5sMnB0 cikKIAkJcmV0dXJuIDA7CiAKLQlzaXplID0gMSA8PCAoU1RSVEFCX1NQTElUICsgaWxvZzIoU1RS VEFCX1NURV9EV09SRFMpICsgMyk7CisJc2l6ZSA9IDEgPDwgKFNUUlRBQl9TUExJVCArIExPR18y KFNUUlRBQl9TVEVfRFdPUkRTKSArIDMpOwogCXN0cnRhYiA9ICZjZmctPnN0cnRhYlsoc2lkID4+ IFNUUlRBQl9TUExJVCkgKiBTVFJUQUJfTDFfREVTQ19EV09SRFNdOwogCiAJZGVzYy0+c3BhbiA9 IFNUUlRBQl9TUExJVCArIDE7Ci0JZGVzYy0+bDJwdHIgPSBkbWFtX2FsbG9jX2NvaGVyZW50KHNt bXUtPmRldiwgc2l6ZSwgJmRlc2MtPmwycHRyX2RtYSwKLQkJCQkJICBHRlBfS0VSTkVMIHwgX19H RlBfWkVSTyk7CisKKwlhbGlnbm1lbnQgPSAxIDw8ICgoNSArIChkZXNjLT5zcGFuIC0gMSkpKTsK KwlkZXNjLT5sMnB0ciA9IF94emFsbG9jKHNpemUsIGFsaWdubWVudCk7CisJZGVzYy0+bDJwdHJf ZG1hID0gdmlydF90b19tYWRkcihkZXNjLT5sMnB0cik7CisKIAlpZiAoIWRlc2MtPmwycHRyKSB7 CiAJCWRldl9lcnIoc21tdS0+ZGV2LAogCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBsMiBzdHJlYW0g dGFibGUgZm9yIFNJRCAldVxuIiwKQEAgLTExNTgsNyArMTQxOCw3IEBAIHN0YXRpYyBpbnQgYXJt X3NtbXVfaW5pdF9sMl9zdHJ0YWIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNp ZCkKIH0KIAogLyogSVJRIGFuZCBldmVudCBoYW5kbGVycyAqLwotc3RhdGljIGlycXJldHVybl90 IGFybV9zbW11X2V2dHFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldikKK3N0YXRpYyB2b2lkIGFy bV9zbW11X2V2dHFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldiwgc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IGRl djsKQEAgLTExODYsNyArMTQ0Niw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9ldnRx X3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYpCiAKIAkvKiBTeW5jIG91ciBvdmVyZmxvdyBmbGFn LCBhcyB3ZSBiZWxpZXZlIHdlJ3JlIHVwIHRvIHNwZWVkICovCiAJcS0+Y29ucyA9IFFfT1ZGKHEs IHEtPnByb2QpIHwgUV9XUlAocSwgcS0+Y29ucykgfCBRX0lEWChxLCBxLT5jb25zKTsKLQlyZXR1 cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGFybV9zbW11X2hhbmRsZV9wcHIoc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTY0ICpldnQpCkBAIC0xMjAzLDcgKzE0NjIsNyBA QCBzdGF0aWMgdm9pZCBhcm1fc21tdV9oYW5kbGVfcHByKHN0cnVjdCBhcm1fc21tdV9kZXZpY2Ug KnNtbXUsIHU2NCAqZXZ0KQogCiAJZGV2X2luZm8oc21tdS0+ZGV2LCAidW5leHBlY3RlZCBQUkkg cmVxdWVzdCByZWNlaXZlZDpcbiIpOwogCWRldl9pbmZvKHNtbXUtPmRldiwKLQkJICJcdHNpZCAw eCUwOHguMHglMDV4OiBbJXUlc10gJXNwcml2aWxlZ2VkICVzJXMlcyBhY2Nlc3MgYXQgaW92YSAw eCUwMTZsbHhcbiIsCisJCSAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdl ZCAlcyVzJXMgYWNjZXNzIGF0IGlvdmEgMHglMDE2bHhcbiIsCiAJCSBzaWQsIHNzaWQsIGdycGlk LCBsYXN0ID8gIkwiIDogIiIsCiAJCSBldnRbMF0gJiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAi dW4iLAogCQkgZXZ0WzBdICYgUFJJUV8wX1BFUk1fUkVBRCA/ICJSIiA6ICIiLApAQCAtMTIyNyw3 ICsxNDg2LDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfaGFuZGxlX3BwcihzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICpzbW11LCB1NjQgKmV2dCkKIAl9CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBh cm1fc21tdV9wcmlxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYpCitzdGF0aWMgdm9pZCBhcm1f c21tdV9wcmlxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYsIHN0cnVjdCBjcHVfdXNlcl9yZWdz ICpyZWdzKQogewogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBkZXY7CiAJc3RydWN0 IGFybV9zbW11X3F1ZXVlICpxID0gJnNtbXUtPnByaXEucTsKQEAgLTEyNDMsMTggKzE1MDIsMTYg QEAgc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X3ByaXFfdGhyZWFkKGludCBpcnEsIHZvaWQg KmRldikKIAogCS8qIFN5bmMgb3VyIG92ZXJmbG93IGZsYWcsIGFzIHdlIGJlbGlldmUgd2UncmUg dXAgdG8gc3BlZWQgKi8KIAlxLT5jb25zID0gUV9PVkYocSwgcS0+cHJvZCkgfCBRX1dSUChxLCBx LT5jb25zKSB8IFFfSURYKHEsIHEtPmNvbnMpOwotCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAot c3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldikKK3N0YXRpYyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGludCBpcnEs IHZvaWQgKmRldiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiB7CiAJLyogV2UgZG9uJ3Qg YWN0dWFsbHkgdXNlIENNRF9TWU5DIGludGVycnVwdHMgZm9yIGFueXRoaW5nICovCi0JcmV0dXJu IElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kaXNhYmxlKHN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpOwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3Nt bXVfZ2Vycm9yX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQorc3RhdGljIHZvaWQgYXJtX3Nt bXVfZ2Vycm9yX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKIHsKIAl1MzIgZ2Vycm9yLCBnZXJyb3JuLCBhY3RpdmU7CiAJc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSA9IGRldjsKQEAgLTEyNjQsNyArMTUyMSw3IEBAIHN0YXRpYyBpcnFy ZXR1cm5fdCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCiAKIAlh Y3RpdmUgPSBnZXJyb3IgXiBnZXJyb3JuOwogCWlmICghKGFjdGl2ZSAmIEdFUlJPUl9FUlJfTUFT SykpCi0JCXJldHVybiBJUlFfTk9ORTsgLyogTm8gZXJyb3JzIHBlbmRpbmcgKi8KKwkJcmV0dXJu OyAvKiBObyBlcnJvcnMgcGVuZGluZyAqLwogCiAJZGV2X3dhcm4oc21tdS0+ZGV2LAogCQkgInVu ZXhwZWN0ZWQgZ2xvYmFsIGVycm9yIHJlcG9ydGVkICgweCUwOHgpLCB0aGlzIGNvdWxkIGJlIHNl cmlvdXNcbiIsCkBAIC0xMjg2LDcgKzE1NDMsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3Nt bXVfZ2Vycm9yX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQogCiAJaWYgKGFjdGl2ZSAmIEdF UlJPUl9NU0lfQ01EUV9BQlRfRVJSKSB7CiAJCWRldl93YXJuKHNtbXUtPmRldiwgIkNNRFEgTVNJ IHdyaXRlIGFib3J0ZWRcbiIpOwotCQlhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcihpcnEsIHNt bXUtPmRldik7CisJCWFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGlycSwgc21tdS0+ZGV2LCBO VUxMKTsKIAl9CiAKIAlpZiAoYWN0aXZlICYgR0VSUk9SX1BSSVFfQUJUX0VSUikKQEAgLTEyOTks NyArMTU1Niw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkZXYpCiAJCWFybV9zbW11X2NtZHFfc2tpcF9lcnIoc21tdSk7CiAKIAl3 cml0ZWwoZ2Vycm9yLCBzbW11LT5iYXNlICsgQVJNX1NNTVVfR0VSUk9STik7Ci0JcmV0dXJuIElS UV9IQU5ETEVEOwogfQogCiAvKiBJT19QR1RBQkxFIEFQSSAqLwpAQCAtMTMxMSwxMSArMTU2Nywx MyBAQCBzdGF0aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpCiAJYXJtX3NtbXVfY21kcV9pc3N1ZV9jbWQoc21tdSwgJmNtZCk7CiB9CiAKKyNp ZiAwIC8qWGVuOiBVbnVzZWQgZnVuY3Rpb24gKi8KIHN0YXRpYyB2b2lkIGFybV9zbW11X3RsYl9z eW5jKHZvaWQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFp biA9IGNvb2tpZTsKIAlfX2FybV9zbW11X3RsYl9zeW5jKHNtbXVfZG9tYWluLT5zbW11KTsKIH0K KyNlbmRpZgogCiBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJfaW52X2NvbnRleHQodm9pZCAqY29v a2llKQogewpAQCAtMTMzNiw2ICsxNTk0LDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX2lu dl9jb250ZXh0KHZvaWQgKmNvb2tpZSkKIAlfX2FybV9zbW11X3RsYl9zeW5jKHNtbXUpOwogfQog CisjaWYgMCAvKlhlbjogVW51c2VkIGZ1bmN0aW9uYWxpdHkgKi8KIHN0YXRpYyB2b2lkIGFybV9z bW11X3RsYl9pbnZfcmFuZ2Vfbm9zeW5jKHVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUs CiAJCQkJCSAgc2l6ZV90IGdyYW51bGUsIGJvb2wgbGVhZiwgdm9pZCAqY29va2llKQogewpAQCAt MTM2Miw3ICsxNjIxLDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX2ludl9yYW5nZV9ub3N5 bmModW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwKIAl9IHdoaWxlIChzaXplIC09IGdy YW51bGUpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X2dhdGhlcl9vcHMgYXJtX3Nt bXVfZ2F0aGVyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcyBhcm1fc21t dV9nYXRoZXJfb3BzID0gewogCS50bGJfZmx1c2hfYWxsCT0gYXJtX3NtbXVfdGxiX2ludl9jb250 ZXh0LAogCS50bGJfYWRkX2ZsdXNoCT0gYXJtX3NtbXVfdGxiX2ludl9yYW5nZV9ub3N5bmMsCiAJ LnRsYl9zeW5jCT0gYXJtX3NtbXVfdGxiX3N5bmMsCkBAIC0xMzgwLDYgKzE2MzksMTEgQEAgc3Rh dGljIGJvb2wgYXJtX3NtbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCiAJCXJldHVybiBm YWxzZTsKIAl9CiB9CisjZW5kaWYKKy8qIFhlbjogU3R1YiBvdXQgRE1BIGRvbWFpbiByZWxhdGVk IGZ1bmN0aW9ucyAqLworI2RlZmluZSBpb21tdV9nZXRfZG1hX2Nvb2tpZShkb20pIDAKKyNkZWZp bmUgaW9tbXVfcHV0X2RtYV9jb29raWUoZG9tKSAwCisKIAogc3RhdGljIHN0cnVjdCBpb21tdV9k b21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBlKQogewpAQCAtMTQxMCw2 ICsxNjc0LDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9h bGxvYyh1bnNpZ25lZCB0eXBlKQogCXJldHVybiAmc21tdV9kb21haW4tPmRvbWFpbjsKIH0KIAor I2lmIDAKIHN0YXRpYyBpbnQgYXJtX3NtbXVfYml0bWFwX2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1h cCwgaW50IHNwYW4pCiB7CiAJaW50IGlkeCwgc2l6ZSA9IDEgPDwgc3BhbjsKQEAgLTE0MjcsMzYg KzE2OTIsMjAgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfYml0bWFwX2ZyZWUodW5zaWduZWQgbG9u ZyAqbWFwLCBpbnQgaWR4KQogewogCWNsZWFyX2JpdChpZHgsIG1hcCk7CiB9CisjZW5kaWYKIAog c3RhdGljIHZvaWQgYXJtX3NtbXVfZG9tYWluX2ZyZWUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluKQogewogCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9fc21tdV9k b21haW4oZG9tYWluKTsKLQlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gc21tdV9kb21h aW4tPnNtbXU7Ci0KLQlpb21tdV9wdXRfZG1hX2Nvb2tpZShkb21haW4pOwotCWZyZWVfaW9fcGd0 YWJsZV9vcHMoc21tdV9kb21haW4tPnBndGJsX29wcyk7Ci0KLQkvKiBGcmVlIHRoZSBDRCBhbmQg QVNJRCwgaWYgd2UgYWxsb2NhdGVkIHRoZW0gKi8KLQlpZiAoc21tdV9kb21haW4tPnN0YWdlID09 IEFSTV9TTU1VX0RPTUFJTl9TMSkgewotCQlzdHJ1Y3QgYXJtX3NtbXVfczFfY2ZnICpjZmcgPSAm c21tdV9kb21haW4tPnMxX2NmZzsKLQotCQlpZiAoY2ZnLT5jZHB0cikgewotCQkJZG1hbV9mcmVl X2NvaGVyZW50KHNtbXVfZG9tYWluLT5zbW11LT5kZXYsCi0JCQkJCSAgIENUWERFU0NfQ0RfRFdP UkRTIDw8IDMsCi0JCQkJCSAgIGNmZy0+Y2RwdHIsCi0JCQkJCSAgIGNmZy0+Y2RwdHJfZG1hKTsK LQotCQkJYXJtX3NtbXVfYml0bWFwX2ZyZWUoc21tdS0+YXNpZF9tYXAsIGNmZy0+Y2QuYXNpZCk7 Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnICpjZmcgPSAmc21tdV9k b21haW4tPnMyX2NmZzsKLQkJaWYgKGNmZy0+dm1pZCkKLQkJCWFybV9zbW11X2JpdG1hcF9mcmVl KHNtbXUtPnZtaWRfbWFwLCBjZmctPnZtaWQpOwotCX0KKwkvKgorCSAqIFhlbjogUmVtb3ZlIHRo ZSBmcmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgdXNlZCBhbmQgY29kZSByZWxhdGVkCisJICog dG8gUzEgdHJhbnNsYXRpb24uIFdlIGp1c3QgbmVlZCB0byBmcmVlIHRoZSBkb21haW4gaGVyZS4K KwkgKi8KIAogCWtmcmVlKHNtbXVfZG9tYWluKTsKIH0KIAorI2lmIDAKIHN0YXRpYyBpbnQgYXJt X3NtbXVfZG9tYWluX2ZpbmFsaXNlX3MxKHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9t YWluLAogCQkJCSAgICAgICBzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgKnBndGJsX2NmZykKIHsKQEAg LTE0ODgsMzMgKzE3MzcsMzAgQEAgb3V0X2ZyZWVfYXNpZDoKIAlhcm1fc21tdV9iaXRtYXBfZnJl ZShzbW11LT5hc2lkX21hcCwgYXNpZCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCi1zdGF0 aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu ICpzbW11X2RvbWFpbiwKLQkJCQkgICAgICAgc3RydWN0IGlvX3BndGFibGVfY2ZnICpwZ3RibF9j ZmcpCitzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3Nt bXVfZG9tYWluICpzbW11X2RvbWFpbikKIHsKLQlpbnQgdm1pZDsKLQlzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11ID0gc21tdV9kb21haW4tPnNtbXU7CiAJc3RydWN0IGFybV9zbW11X3MyX2Nm ZyAqY2ZnID0gJnNtbXVfZG9tYWluLT5zMl9jZmc7CiAKLQl2bWlkID0gYXJtX3NtbXVfYml0bWFw X2FsbG9jKHNtbXUtPnZtaWRfbWFwLCBzbW11LT52bWlkX2JpdHMpOwotCWlmICh2bWlkIDwgMCkK LQkJcmV0dXJuIHZtaWQ7CisJLyogWGVuOiBTZXQgdGhlIHZhbHVlcyBhcyBuZWVkZWQgKi8KIAot CWNmZy0+dm1pZAk9ICh1MTYpdm1pZDsKLQljZmctPnZ0dGJyCT0gcGd0YmxfY2ZnLT5hcm1fbHBh ZV9zMl9jZmcudnR0YnI7Ci0JY2ZnLT52dGNyCT0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcu dnRjcjsKKwljZmctPnZtaWQJPSBjZmctPmRvbWFpbi0+YXJjaC5wMm0udm1pZDsKKwljZmctPnZ0 dGJyCT0gcGFnZV90b19tYWRkcihjZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7CisJY2ZnLT52 dGNyCT0gUkVBRF9TWVNSRUczMihWVENSX0VMMik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBp bnQgYXJtX3NtbXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikK IHsKIAlpbnQgcmV0OworI2lmIDAJLyogWGVuOiBwZ3RibF9jZmcgbm90IG5lZWRlZC4gU28gbW9k aWZ5IHRoZSBmdW5jdGlvbiBhcyBuZWVkZWQgKi8KIAl1bnNpZ25lZCBsb25nIGlhcywgb2FzOwog CWVudW0gaW9fcGd0YWJsZV9mbXQgZm10OwogCXN0cnVjdCBpb19wZ3RhYmxlX2NmZyBwZ3RibF9j Zmc7CiAJc3RydWN0IGlvX3BndGFibGVfb3BzICpwZ3RibF9vcHM7Ci0JaW50ICgqZmluYWxpc2Vf c3RhZ2VfZm4pKHN0cnVjdCBhcm1fc21tdV9kb21haW4gKiwKLQkJCQkgc3RydWN0IGlvX3BndGFi bGVfY2ZnICopOworCWludCAoKmZpbmFsaXNlX3N0YWdlX2ZuKShzdHJ1Y3QgYXJtX3NtbXVfZG9t YWluICopOworI2VuZGlmCiAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4gPSB0 b19zbW11X2RvbWFpbihkb21haW4pOwogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBz bW11X2RvbWFpbi0+c21tdTsKIApAQCAtMTUyOSw2ICsxNzc1LDcgQEAgc3RhdGljIGludCBhcm1f c21tdV9kb21haW5fZmluYWxpc2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogCWlmICgh KHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVBVF9UUkFOU19TMikpCiAJCXNtbXVfZG9tYWlu LT5zdGFnZSA9IEFSTV9TTU1VX0RPTUFJTl9TMTsKIAorI2lmIDAKIAlzd2l0Y2ggKHNtbXVfZG9t YWluLT5zdGFnZSkgewogCWNhc2UgQVJNX1NNTVVfRE9NQUlOX1MxOgogCQlpYXMgPSBWQV9CSVRT OwpAQCAtMTU2MywxMCArMTgxMCwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5h bGlzZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiAJZG9tYWluLT5nZW9tZXRyeS5hcGVy dHVyZV9lbmQgPSAoMVVMIDw8IGlhcykgLSAxOwogCWRvbWFpbi0+Z2VvbWV0cnkuZm9yY2VfYXBl cnR1cmUgPSB0cnVlOwogCXNtbXVfZG9tYWluLT5wZ3RibF9vcHMgPSBwZ3RibF9vcHM7Ci0KIAly ZXQgPSBmaW5hbGlzZV9zdGFnZV9mbihzbW11X2RvbWFpbiwgJnBndGJsX2NmZyk7CiAJaWYgKHJl dCA8IDApCiAJCWZyZWVfaW9fcGd0YWJsZV9vcHMocGd0Ymxfb3BzKTsKKyNlbmRpZgorCXJldCA9 IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzbW11X2RvbWFpbik7CiAKIAlyZXR1cm4gcmV0 OwogfQpAQCAtMTY2MCw3ICsxOTA4LDggQEAgc3RhdGljIGludCBhcm1fc21tdV9hdHRhY2hfZGV2 KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2KQogCX0gZWxz ZSBpZiAoc21tdV9kb21haW4tPnN0YWdlID09IEFSTV9TTU1VX0RPTUFJTl9TMSkgewogCQlzdGUt PnMxX2NmZyA9ICZzbW11X2RvbWFpbi0+czFfY2ZnOwogCQlzdGUtPnMyX2NmZyA9IE5VTEw7Ci0J CWFybV9zbW11X3dyaXRlX2N0eF9kZXNjKHNtbXUsIHN0ZS0+czFfY2ZnKTsKKwkJLypYZW46IFMx IGNvbmZpZ3VyYXRpbyBub3QgbmVlZGVkICovCisJCS8vYXJtX3NtbXVfd3JpdGVfY3R4X2Rlc2Mo c21tdSwgc3RlLT5zMV9jZmcpOwogCX0gZWxzZSB7CiAJCXN0ZS0+czFfY2ZnID0gTlVMTDsKIAkJ c3RlLT5zMl9jZmcgPSAmc21tdV9kb21haW4tPnMyX2NmZzsKQEAgLTE2NzIsNiArMTkyMSw3IEBA IG91dF91bmxvY2s6CiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIDAKIHN0YXRpYyBpbnQgYXJtX3Nt bXVfbWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAog CQkJcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKIHsKQEAgLTE3Mzcs MTEgKzE5ODcsMTMgQEAgc3RhdGljIGludCBhcm1fc21tdV9tYXRjaF9ub2RlKHN0cnVjdCBkZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSkKIHN0YXRpYwogc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJt X3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogeworCS8q IFhlbjsgRnVuY3Rpb24gbW9kaWZpZWQgYXMgbmVlZGVkIGZvciBYZW4uKi8KIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkcml2ZXJfZmluZF9kZXZpY2UoJmFybV9zbW11X2RyaXZlci5kcml2ZXIsIE5V TEwsCiAJCQkJCQlmd25vZGUsIGFybV9zbW11X21hdGNoX25vZGUpOwogCXB1dF9kZXZpY2UoZGV2 KTsKIAlyZXR1cm4gZGV2ID8gZGV2X2dldF9kcnZkYXRhKGRldikgOiBOVUxMOwogfQorI2VuZGlm CiAKIHN0YXRpYyBib29sIGFybV9zbW11X3NpZF9pbl9yYW5nZShzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11LCB1MzIgc2lkKQogewpAQCAtMTc1Miw4ICsyMDA0LDkgQEAgc3RhdGljIGJvb2wg YXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBz aWQpCiAKIAlyZXR1cm4gc2lkIDwgbGltaXQ7CiB9Ci0KKyNpZiAwCiBzdGF0aWMgc3RydWN0IGlv bW11X29wcyBhcm1fc21tdV9vcHM7CisjZW5kaWYKIAogc3RhdGljIGludCBhcm1fc21tdV9hZGRf ZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE3NjEsOSArMjAxNCw5IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdTsKIAlzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3Rl cjsKIAlzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKLQlz dHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwOwogCi0JaWYgKCFmd3NwZWMgfHwgZndzcGVjLT5vcHMg IT0gJmFybV9zbW11X29wcykKKwkvKiBYZW46IGZ3c3BlYy0+b3BzIGFyZSBub3QgbmVlZGVkICov CisJaWYgKCFmd3NwZWMpCiAJCXJldHVybiAtRU5PREVWOwogCS8qCiAJICogV2UgX2Nhbl8gYWN0 dWFsbHkgd2l0aHN0YW5kIGRvZGd5IGJ1cyBjb2RlIHJlLWNhbGxpbmcgYWRkX2RldmljZSgpCkBA IC0xODAwLDYgKzIwNTMsMTIgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVj dCBkZXZpY2UgKmRldikKIAkJfQogCX0KIAorI2lmIDAKKy8qCisgKiBYZW46IERvIG5vdCBuZWVk IGFuIGlvbW11IGdyb3VwIGFzIHRoZSBzdHJlYW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1V CisgKiBtYXN0ZXIgZGV2aWNlIG9iamVjdAorICovCisKIAlncm91cCA9IGlvbW11X2dyb3VwX2dl dF9mb3JfZGV2KGRldik7CiAJaWYgKCFJU19FUlIoZ3JvdXApKSB7CiAJCWlvbW11X2dyb3VwX3B1 dChncm91cCk7CkBAIC0xODA3LDggKzIwNjYsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRf ZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAl9CiAKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJP KGdyb3VwKTsKKyNlbmRpZgorCXJldHVybiAwOwogfQogCisvKgorICogWGVuOiBXZSBjYW4gcG90 ZW50aWFsbHkgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uIGFuZCBkZXN0cm95IGEgZGV2aWNlLiBUaGlz CisgKiB3aWxsIGJlIHJlbGV2YW50IGZvciBQQ0kgaG90cGx1Zy4gU28sIHdpbGwgYmUgaW1wbGVt ZW50ZWQgYXMgbmVlZGVkIGFmdGVyCisgKiBwYXNzdGhyb3VnaCBzdXBwb3J0IGlzIGF2YWlsYWJs ZS4KKyAqLworI2lmIDAKIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uoc3RydWN0 IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldi0+aW9t bXVfZndzcGVjOwpAQCAtMTk0NCw3ICsyMjExLDcgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9vcHMg YXJtX3NtbXVfb3BzID0gewogCS5wdXRfcmVzdl9yZWdpb25zCT0gYXJtX3NtbXVfcHV0X3Jlc3Zf cmVnaW9ucywKIAkucGdzaXplX2JpdG1hcAkJPSAtMVVMLCAvKiBSZXN0cmljdGVkIGR1cmluZyBk ZXZpY2UgYXR0YWNoICovCiB9OwotCisjZW5kaWYKIC8qIFByb2JpbmcgYW5kIGluaXRpYWxpc2F0 aW9uIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBhcm1fc21tdV9pbml0X29uZV9xdWV1ZShzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LAogCQkJCSAgIHN0cnVjdCBhcm1fc21tdV9xdWV1ZSAq cSwKQEAgLTE5NTQsNyArMjIyMSwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfb25lX3F1 ZXVlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsCiB7CiAJc2l6ZV90IHFzeiA9ICgoMSA8 PCBxLT5tYXhfbl9zaGlmdCkgKiBkd29yZHMpIDw8IDM7CiAKLQlxLT5iYXNlID0gZG1hbV9hbGxv Y19jb2hlcmVudChzbW11LT5kZXYsIHFzeiwgJnEtPmJhc2VfZG1hLCBHRlBfS0VSTkVMKTsKKwkv KiBUaGUgU01NVSBjYWNoZSBjb2hlcmVuY3kgcHJvcGVydHkgaXMgYWx3YXlzIHNldC4gU2luY2Ug d2UgYXJlIHNoYXJpbmcgdGhlIENQVSB0cmFuc2xhdGlvbiB0YWJsZXMKKwkgKiBqdXN0IG1ha2Ug YSByZWd1bGFyIGFsbG9jYXRpb24uCisJICovCisJcS0+YmFzZSA9IF94emFsbG9jKHFzeiwgc2l6 ZW9mKHZvaWQgKikpOworCXEtPmJhc2VfZG1hID0gdmlydF90b19tYWRkcihxLT5iYXNlKTsKKwog CWlmICghcS0+YmFzZSkgewogCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0 ZSBxdWV1ZSAoMHglenggYnl0ZXMpXG4iLAogCQkJcXN6KTsKQEAgLTIwMjUsMTAgKzIyOTcsMTEg QEAgc3RhdGljIGludCBhcm1fc21tdV9pbml0X3N0cnRhYl8ybHZsKHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXUpCiAJdm9pZCAqc3RydGFiOwogCXU2NCByZWc7CiAJdTMyIHNpemUsIGwxc2l6 ZTsKKwl1MzIgYWxpZ25tZW50OwogCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnICpjZmcgPSAm c21tdS0+c3RydGFiX2NmZzsKIAogCS8qIENhbGN1bGF0ZSB0aGUgTDEgc2l6ZSwgY2FwcGVkIHRv IHRoZSBTSURTSVpFLiAqLwotCXNpemUgPSBTVFJUQUJfTDFfU1pfU0hJRlQgLSAoaWxvZzIoU1RS VEFCX0wxX0RFU0NfRFdPUkRTKSArIDMpOworCXNpemUgPSBTVFJUQUJfTDFfU1pfU0hJRlQgLSAo TE9HXzIoU1RSVEFCX0wxX0RFU0NfRFdPUkRTKSArIDMpOwogCXNpemUgPSBtaW4oc2l6ZSwgc21t dS0+c2lkX2JpdHMgLSBTVFJUQUJfU1BMSVQpOwogCWNmZy0+bnVtX2wxX2VudHMgPSAxIDw8IHNp emU7CiAKQEAgLTIwMzksOCArMjMxMiwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfc3Ry dGFiXzJsdmwoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIAkJCSBzaXplLCBzbW11LT5z aWRfYml0cyk7CiAKIAlsMXNpemUgPSBjZmctPm51bV9sMV9lbnRzICogKFNUUlRBQl9MMV9ERVND X0RXT1JEUyA8PCAzKTsKLQlzdHJ0YWIgPSBkbWFtX2FsbG9jX2NvaGVyZW50KHNtbXUtPmRldiwg bDFzaXplLCAmY2ZnLT5zdHJ0YWJfZG1hLAotCQkJCSAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pF Uk8pOworCisJYWxpZ25tZW50ID0gbWF4X3QodTMyLCBjZmctPm51bV9sMV9lbnRzLCA2NCk7CisJ Ly9zdHJ0YWIgPSBfeHphbGxvYyhsMXNpemUsIHNpemVvZih2b2lkICopKTsKKwlzdHJ0YWIgPSBf eHphbGxvYyhsMXNpemUsIGwxc2l6ZSk7CisJY2ZnLT5zdHJ0YWJfZG1hID0gdmlydF90b19tYWRk cihzdHJ0YWIpOworCisJLy9kc2Ioc3kpOwogCWlmICghc3RydGFiKSB7CiAJCWRldl9lcnIoc21t dS0+ZGV2LAogCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBsMSBzdHJlYW0gdGFibGUgKCV1IGJ5dGVz KVxuIiwKQEAgLTIwNjgsOCArMjM0Niw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9zdHJ0 YWJfbGluZWFyKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJc3RydWN0IGFybV9zbW11 X3N0cnRhYl9jZmcgKmNmZyA9ICZzbW11LT5zdHJ0YWJfY2ZnOwogCiAJc2l6ZSA9ICgxIDw8IHNt bXUtPnNpZF9iaXRzKSAqIChTVFJUQUJfU1RFX0RXT1JEUyA8PCAzKTsKLQlzdHJ0YWIgPSBkbWFt X2FsbG9jX2NvaGVyZW50KHNtbXUtPmRldiwgc2l6ZSwgJmNmZy0+c3RydGFiX2RtYSwKLQkJCQkg ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwlzdHJ0YWIgPSBfeHphbGxvYyhzaXplLCBz aXplKTsKKwljZmctPnN0cnRhYl9kbWEgPSB2aXJ0X3RvX21hZGRyKHN0cnRhYik7CisKIAlpZiAo IXN0cnRhYikgewogCQlkZXZfZXJyKHNtbXUtPmRldiwKIAkJCSJmYWlsZWQgdG8gYWxsb2NhdGUg bGluZWFyIHN0cmVhbSB0YWJsZSAoJXUgYnl0ZXMpXG4iLApAQCAtMjE1Miw2ICsyNDMxLDggQEAg c3RhdGljIGludCBhcm1fc21tdV91cGRhdGVfZ2JwYShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpz bW11LCB1MzIgc2V0LCB1MzIgY2xyKQogCQkJCQkgIDEsIEFSTV9TTU1VX1BPTExfVElNRU9VVF9V Uyk7CiB9CiAKKy8qIFhlbjogVGhlcmUgaXMgbm8gTVNJIHN1cHBvcnQgYXMgeWV0ICovCisjaWYg MAogc3RhdGljIHZvaWQgYXJtX3NtbXVfZnJlZV9tc2lzKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0 IGRldmljZSAqZGV2ID0gZGF0YTsKQEAgLTIyMTcsNyArMjQ5OCw3IEBAIHN0YXRpYyB2b2lkIGFy bV9zbW11X3NldHVwX21zaXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIAkvKiBBZGQg Y2FsbGJhY2sgdG8gZnJlZSBNU0lzIG9uIHRlYXJkb3duICovCiAJZGV2bV9hZGRfYWN0aW9uKGRl diwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwogfQotCisjZW5kaWYKIHN0YXRpYyBpbnQgYXJt X3NtbXVfc2V0dXBfaXJxcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogewogCWludCBy ZXQsIGlycTsKQEAgLTIyMzEsMzEgKzI1MTIsMzEgQEAgc3RhdGljIGludCBhcm1fc21tdV9zZXR1 cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJCXJldHVybiByZXQ7CiAJfQog Ci0JYXJtX3NtbXVfc2V0dXBfbXNpcyhzbW11KTsKKwkvL2FybV9zbW11X3NldHVwX21zaXMoc21t dSk7CiAKIAkvKiBSZXF1ZXN0IGludGVycnVwdCBsaW5lcyAqLwogCWlycSA9IHNtbXUtPmV2dHEu cS5pcnE7CiAJaWYgKGlycSkgewotCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKHNt bXUtPmRldiwgaXJxLCBOVUxMLAotCQkJCQkJYXJtX3NtbXVfZXZ0cV90aHJlYWQsCi0JCQkJCQlJ UlFGX09ORVNIT1QsCi0JCQkJCQkiYXJtLXNtbXUtdjMtZXZ0cSIsIHNtbXUpOworCQlpcnFfc2V0 X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCQlyZXQgPSByZXF1ZXN0X2lycShpcnEs IGFybV9zbW11X2V2dHFfdGhyZWFkLAorCQkJCQkJMCwgImFybS1zbW11LXYzLWV2dHEiLCBzbW11 KTsKIAkJaWYgKHJldCA8IDApCiAJCQlkZXZfd2FybihzbW11LT5kZXYsICJmYWlsZWQgdG8gZW5h YmxlIGV2dHEgaXJxXG4iKTsKIAl9CiAKIAlpcnEgPSBzbW11LT5jbWRxLnEuaXJxOwogCWlmIChp cnEpIHsKLQkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKLQkJCQkgICAg ICAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIsIDAsCi0JCQkJICAgICAgICJhcm0tc21tdS12 My1jbWRxLXN5bmMiLCBzbW11KTsKKwkJaXJxX3NldF90eXBlKGlycSwgSVJRX1RZUEVfRURHRV9C T1RIKTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxl ciwKKwkJCQkwLCAiYXJtLXNtbXUtdjMtY21kcS1zeW5jIiwgc21tdSk7CiAJCWlmIChyZXQgPCAw KQogCQkJZGV2X3dhcm4oc21tdS0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbWRxLXN5bmMgaXJx XG4iKTsKIAl9CiAKIAlpcnEgPSBzbW11LT5nZXJyX2lycTsKIAlpZiAoaXJxKSB7Ci0JCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsIGFybV9zbW11X2dlcnJvcl9oYW5kbGVy LAorCQlpcnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCQlyZXQgPSByZXF1 ZXN0X2lycShpcnEsIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyLAogCQkJCSAgICAgICAwLCAiYXJt LXNtbXUtdjMtZ2Vycm9yIiwgc21tdSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZGV2X3dhcm4oc21t dS0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBnZXJyb3IgaXJxXG4iKTsKQEAgLTIyNjMsMTIgKzI1 NDQsMTMgQEAgc3RhdGljIGludCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVjdCBhcm1fc21tdV9k ZXZpY2UgKnNtbXUpCiAKIAlpZiAoc21tdS0+ZmVhdHVyZXMgJiBBUk1fU01NVV9GRUFUX1BSSSkg ewogCQlpcnEgPSBzbW11LT5wcmlxLnEuaXJxOworCQlpcnFfc2V0X3R5cGUoaXJxLCBJUlFfVFlQ RV9FREdFX0JPVEgpOwogCQlpZiAoaXJxKSB7Ci0JCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFk ZWRfaXJxKHNtbXUtPmRldiwgaXJxLCBOVUxMLAotCQkJCQkJCWFybV9zbW11X3ByaXFfdGhyZWFk LAotCQkJCQkJCUlSUUZfT05FU0hPVCwKLQkJCQkJCQkiYXJtLXNtbXUtdjMtcHJpcSIsCi0JCQkJ CQkJc21tdSk7CisJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsCisJCQkJCSAgYXJtX3NtbXVfcHJp cV90aHJlYWQsCisJCQkJCSAgMCwKKwkJCQkJICAiYXJtLXNtbXUtdjMtcHJpcSIsCisJCQkJCSAg c21tdSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlkZXZfd2FybihzbW11LT5kZXYsCiAJCQkJCSAi ZmFpbGVkIHRvIGVuYWJsZSBwcmlxIGlycVxuIik7CkBAIC0yNDAwLDcgKzI2ODIsNyBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2RldmljZV9yZXNldChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11 LCBib29sIGJ5cGFzcykKIAogCiAJLyogRW5hYmxlIHRoZSBTTU1VIGludGVyZmFjZSwgb3IgZW5z dXJlIGJ5cGFzcyAqLwotCWlmICghYnlwYXNzIHx8IGRpc2FibGVfYnlwYXNzKSB7CisJaWYgKCFi eXBhc3MpIHsKIAkJZW5hYmxlcyB8PSBDUjBfU01NVUVOOwogCX0gZWxzZSB7CiAJCXJldCA9IGFy bV9zbW11X3VwZGF0ZV9nYnBhKHNtbXUsIDAsIEdCUEFfQUJPUlQpOwpAQCAtMjQ4OCw4ICsyNzcw LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUpCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfU1RBTExT OwogCX0KIAorI2lmIDAvKiBYZW46IERvIG5vdCBlbmFibGUgU3RhZ2UgMSB0cmFuc2xhdGlvbnMg Ki8KKwogCWlmIChyZWcgJiBJRFIwX1MxUCkKIAkJc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVf RkVBVF9UUkFOU19TMTsKKyNlbmRpZgogCiAJaWYgKHJlZyAmIElEUjBfUzJQKQogCQlzbW11LT5m ZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MyOwpAQCAtMjU2MiwxMCArMjg0NywxMiBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11KQogCWlmIChyZWcgJiBJRFI1X0dSQU40SykKIAkJc21tdS0+cGdzaXplX2JpdG1h cCB8PSBTWl80SyB8IFNaXzJNIHwgU1pfMUc7CiAKKyNpZiAwIC8qIFhlbjogU01NVSBvcHMgZG8g bm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICovCiAJaWYgKGFybV9zbW11 X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCiAJCWFybV9zbW11X29wcy5wZ3NpemVfYml0bWFw ID0gc21tdS0+cGdzaXplX2JpdG1hcDsKIAllbHNlCiAJCWFybV9zbW11X29wcy5wZ3NpemVfYml0 bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7CisjZW5kaWYKIAogCS8qIE91dHB1dCBhZGRyZXNz IHNpemUgKi8KIAlzd2l0Y2ggKHJlZyAmIElEUjVfT0FTX01BU0sgPDwgSURSNV9PQVNfU0hJRlQp IHsKQEAgLTI1OTIsMTAgKzI4NzksMTIgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfaHdf cHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIAkJc21tdS0+b2FzID0gNDg7CiAJ fQogCisjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIERNQSBtYXNrICovCiAJ LyogU2V0IHRoZSBETUEgbWFzayBmb3Igb3VyIHRhYmxlIHdhbGtlciAqLwogCWlmIChkbWFfc2V0 X21hc2tfYW5kX2NvaGVyZW50KHNtbXUtPmRldiwgRE1BX0JJVF9NQVNLKHNtbXUtPm9hcykpKQog CQlkZXZfd2FybihzbW11LT5kZXYsCiAJCQkgImZhaWxlZCB0byBzZXQgRE1BIG1hc2sgZm9yIHRh YmxlIHdhbGtlclxuIik7CisjZW5kaWYKIAogCXNtbXUtPmlhcyA9IG1heChzbW11LT5pYXMsIHNt bXUtPm9hcyk7CiAKQEAgLTI2MTIsNyArMjkwMSw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2 aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBzbW11LT5kZXY7CiAJc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlOwogCi0J bm9kZSA9ICooc3RydWN0IGFjcGlfaW9ydF9ub2RlICoqKWRldl9nZXRfcGxhdGRhdGEoZGV2KTsK KwkvKiBYZW46IE1vZGlmaWNhdGlvbiB0byBnZXQgaW9ydF9ub2RlICovCisJbm9kZSA9IChzdHJ1 Y3QgYWNwaV9pb3J0X25vZGUgKilkZXYtPmFjcGlfbm9kZTsKIAogCS8qIFJldHJpZXZlIFNNTVV2 MyBzcGVjaWZpYyBkYXRhICovCiAJaW9ydF9zbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92 MyAqKW5vZGUtPm5vZGVfZGF0YTsKQEAgLTI2MzMsNyArMjkyMyw3IEBAIHN0YXRpYyBpbmxpbmUg aW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsCiBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2LAogCQkJCSAgICBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogewot CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0g cGRldjsKIAl1MzIgY2VsbHM7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTI2NDYsOCArMjkz Niw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCiAKIAlwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsKIAotCWlmIChv Zl9kbWFfaXNfY29oZXJlbnQoZGV2LT5vZl9ub2RlKSkKLQkJc21tdS0+ZmVhdHVyZXMgfD0gQVJN X1NNTVVfRkVBVF9DT0hFUkVOQ1k7CisJLyogWGVuOiBTZXQgdGhlIENPSEVSTkVDWSBmZWF0dXJl ICovCisJc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9DT0hFUkVOQ1k7CiAKIAlyZXR1 cm4gcmV0OwogfQpAQCAtMjY1Niw5ICsyOTQ2LDEwIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2 aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGlycSwgcmV0 OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXJlc291cmNlX3NpemVfdCBpb2FkZHI7CisJLypY ZW46IERvIG5vdCBuZWVkIHRvIHNldHVwIHN5c2ZzICovCisJLyogcmVzb3VyY2Vfc2l6ZV90IGlv YWRkcjsqLwogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7Ci0Jc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGV2Oy8qIFhlbjogZGV2 IGlzIGlnbm9yZWQgKi8KIAlib29sIGJ5cGFzczsKIAogCXNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKQEAgLTI2NzQsNyArMjk2NSw3IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJCWRldl9lcnIoZGV2LCAiTU1JTyByZWdpb24gdG9vIHNtYWxsICglcHIpXG4iLCByZXMpOwog CQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaW9hZGRyID0gcmVzLT5zdGFydDsKKwkvKmlvYWRkciA9 IHJlcy0+c3RhcnQ7Ki8KIAogCXNtbXUtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2 LCByZXMpOwogCWlmIChJU19FUlIoc21tdS0+YmFzZSkpCkBAIC0yNzE5LDEzICszMDEwLDE1IEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWNvcmQgb3VyIHByaXZhdGUgZGV2aWNlIHN0 cnVjdHVyZSAqLwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNtbXUpOworCS8qIHBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHNtbXUpOyAqLwogCiAJLyogUmVzZXQgdGhlIGRldmljZSAq LwogCXJldCA9IGFybV9zbW11X2RldmljZV9yZXNldChzbW11LCBieXBhc3MpOwogCWlmIChyZXQp CiAJCXJldHVybiByZXQ7CiAKKy8qIFhlbjogTm90IGNyZWF0aW5nIGFuIElPTU1VIGRldmljZSBs aXN0IGZvciBYZW4gKi8KKyNpZiAwCiAJLyogQW5kIHdlJ3JlIHVwLiBHbyBnbyBnbyEgKi8KIAly ZXQgPSBpb21tdV9kZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5pb21tdSwgZGV2LCBOVUxMLAogCQkJ CSAgICAgInNtbXUzLiVwYSIsICZpb2FkZHIpOwpAQCAtMjc1Nyw5ICszMDUwLDE4IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KKyNlbmRpZgorCS8qCisJICogWGVuOiBL ZWVwIGEgbGlzdCBvZiBhbGwgcHJvYmVkIGRldmljZXMuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHF1 ZXJ5CisJICogdGhlIHNtbXUgZGV2aWNlcyBiYXNlZCBvbiB0aGUgZndub2RlLgorCSAqLworCUlO SVRfTElTVF9IRUFEKCZzbW11LT5kZXZpY2VzKTsKKwlzcGluX2xvY2soJmFybV9zbW11X2Rldmlj ZXNfbG9jayk7CisJbGlzdF9hZGQoJnNtbXUtPmRldmljZXMsICZhcm1fc21tdV9kZXZpY2VzKTsK KwlzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KLQor I2lmIDAKIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI3NjcsNiArMzA2OSw5IEBAIHN0YXRpYyBpbnQgYXJt X3NtbXVfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWFybV9z bW11X2RldmljZV9kaXNhYmxlKHNtbXUpOwogCXJldHVybiAwOwogfQorI2VuZGlmCisjZGVmaW5l IE1PRFVMRV9ERVZJQ0VfVEFCTEUodHlwZSwgbmFtZSkKKyNkZWZpbmUgb2ZfZGV2aWNlX2lkIGR0 X2RldmljZV9tYXRjaAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhcm1fc21tdV9vZl9t YXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYXJtLHNtbXUtdjMiLCB9LApAQCAtMjc3NCw2 ICszMDc5LDcgQEAgc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hb XSA9IHsKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhcm1fc21tdV9vZl9tYXRjaCk7CiAK KyNpZiAwCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcm1fc21tdV9kcml2ZXIgPSB7 CiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJCT0gImFybS1zbW11LXYzIiwKQEAgLTI3ODksMyArMzA5 NSwzMTggQEAgSU9NTVVfT0ZfREVDTEFSRShhcm1fc21tdXYzLCAiYXJtLHNtbXUtdjMiLCBOVUxM KTsKIE1PRFVMRV9ERVNDUklQVElPTigiSU9NTVUgQVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01N VXYzIGltcGxlbWVudGF0aW9ucyIpOwogTU9EVUxFX0FVVEhPUigiV2lsbCBEZWFjb24gPHdpbGwu ZGVhY29uQGFybS5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKKyNlbmRpZgor LyoqKioqIFN0YXJ0IG9mIFhlbiBzcGVjaWZpYyBjb2RlICoqKioqLworCitzdGF0aWMgaW50IF9f bXVzdF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwoc3RydWN0IGRvbWFpbiAqZCkKK3sK KwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqc21tdV9kb21haW4gPSBkb21faW9tbXUoZCkt PmFyY2gucHJpdjsKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpjZmc7CisKKwlzcGluX2xvY2soJnNt bXVfZG9tYWluLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNmZywgJnNtbXVfZG9tYWlu LT5pb21tdV9kb21haW5zLCBsaXN0KSB7CisJCS8qCisJCSAqIE9ubHkgaW52YWxpZGF0ZSB0aGUg Y29udGV4dCB3aGVuIFNNTVUgaXMgcHJlc2VudC4KKwkJICogVGhpcyBpcyBiZWNhdXNlIHRoZSBj b250ZXh0IGluaXRpYWxpemF0aW9uIGlzIGRlbGF5ZWQKKwkJICogdW50aWwgYSBtYXN0ZXIgaGFz IGJlZW4gYWRkZWQuCisJCSAqLworCQlpZiAodW5saWtlbHkoIUFDQ0VTU19PTkNFKGNmZy0+cHJp di0+c21tdSkpKQorCQkJY29udGludWU7CisJCWFybV9zbW11X3RsYl9pbnZfY29udGV4dChjZmct PnByaXYpOworCX0KKwlzcGluX3VubG9jaygmc21tdV9kb21haW4tPmxvY2spOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVzaChzdHJ1 Y3QgZG9tYWluICpkLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZ2ZuLAorCQkJCQkgICAgIHVu c2lnbmVkIGludCBwYWdlX2NvdW50KQoreworCXJldHVybiBhcm1fc21tdV9pb3RsYl9mbHVzaF9h bGwoZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9nZXRfZG9t YWluKHN0cnVjdCBkb21haW4gKmQsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4 ZW5fZG9tYWluOworCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7CisJc3RydWN0IGFybV9z bW11X2RvbWFpbiAqc21tdV9kb21haW47CisKKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5h cmNoLnByaXY7CisKKwlzbW11ID0gYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShkZXYtPmlvbW11X2Z3 c3BlYy0+aW9tbXVfZndub2RlKTsKKwlpZiAoIXNtbXUpCisJCXJldHVybiBOVUxMOworCisJLyoK KwkgKiBMb29wIHRocm91Z2ggdGhlICZ4ZW5fZG9tYWluLT5jb250ZXh0cyB0byBsb2NhdGUgYSBj b250ZXh0CisJICogYXNzaWduZWQgdG8gdGhpcyBTTU1VCisJICovCisJbGlzdF9mb3JfZWFjaF9l bnRyeShkb21haW4sICZ4ZW5fZG9tYWluLT5pb21tdV9kb21haW5zLCBsaXN0KSB7CisJCXNtbXVf ZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKKwkJaWYgKHNtbXVfZG9tYWluLT5zbW11 ID09IHNtbXUpCisJCQlyZXR1cm4gZG9tYWluOworCX0KKworCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgdm9pZCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9t YWluICpkb21haW4pCit7CisJbGlzdF9kZWwoJmRvbWFpbi0+bGlzdCk7CisJeGZyZWUoZG9tYWlu KTsKK30KKworc3RhdGljIGludCBhcm1fc21tdV9hc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKmQs IHU4IGRldmZuLAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGZsYWcpCit7CisJ aW50IHJldCA9IDA7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBhcm1f c21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOworCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKmFy bV9zbW11OworCisJeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2OworCisJaWYg KCFkZXYtPmFyY2hkYXRhLmlvbW11KSB7CisJCWRldi0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9j KHN0cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlKTsKKwkJaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11 KQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gYXJtX3NtbXVfYWRkX2RldmljZShk ZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzcGluX2xvY2soJnhlbl9kb21haW4t PmxvY2spOworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgYW4gaW9tbXVfZG9tYWluIGFscmVh ZHkgZXhpc3RzIGZvciB0aGlzIHhlbiBkb21haW4KKwkgKiB1bmRlciB0aGUgc2FtZSBTTU1VCisJ ICovCisJZG9tYWluID0gYXJtX3NtbXVfZ2V0X2RvbWFpbihkLCBkZXYpOworCWlmICghZG9tYWlu KSB7CisKKwkJZG9tYWluID0gYXJtX3NtbXVfZG9tYWluX2FsbG9jKElPTU1VX0RPTUFJTl9ETUEp OworCQlpZiAoIWRvbWFpbikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9 CisKKwkJYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOworCQlhcm1fc21tdS0+czJf Y2ZnLmRvbWFpbiA9IGQ7CisKKwkJLyogQ2hhaW4gdGhlIG5ldyBjb250ZXh0IHRvIHRoZSBkb21h aW4gKi8KKwkJbGlzdF9hZGQoJmRvbWFpbi0+bGlzdCwgJnhlbl9kb21haW4tPmlvbW11X2RvbWFp bnMpOworCisJfQorCisJcmV0ID0gYXJtX3NtbXVfYXR0YWNoX2Rldihkb21haW4sIGRldik7CisJ aWYgKHJldCkgeworCQlpZiAoZG9tYWluLT5yZWYuY291bnRlciA9PSAwKQorCQkJYXJtX3NtbXVf ZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWluKTsKKwl9IGVsc2UgeworCQlhdG9taWNfaW5jKCZk b21haW4tPnJlZik7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2sp OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0 cnVjdCBkb21haW4gKmQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW9tbXVfZG9t YWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7CisJc3RydWN0IGFybV9z bW11X3hlbl9kb21haW4gKnhlbl9kb21haW47CisJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJt X3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOworCisJeGVuX2RvbWFpbiA9IGRvbV9pb21t dShkKS0+YXJjaC5wcml2OworCisJaWYgKCFhcm1fc21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRv bWFpbiAhPSBkKSB7CisJCWRldl9lcnIoZGV2LCAiIG5vdCBhdHRhY2hlZCB0byBkb21haW4gJWRc biIsIGQtPmRvbWFpbl9pZCk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCisJc3Bpbl9sb2NrKCZ4 ZW5fZG9tYWluLT5sb2NrKTsKKworCWFybV9zbW11X2RldGFjaF9kZXYoZGV2KTsKKwlhdG9taWNf ZGVjKCZkb21haW4tPnJlZik7CisKKwlpZiAoZG9tYWluLT5yZWYuY291bnRlciA9PSAwKQorCQlh cm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihkb21haW4pOworCisJc3Bpbl91bmxvY2soJnhl bl9kb21haW4tPmxvY2spOworCisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFybV9z bW11X3JlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1Y3QgZG9tYWluICp0LAorCQkJ CSB1OCBkZXZmbiwgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8q IERvbid0IGFsbG93IHJlbWFwcGluZyBvbiBvdGhlciBkb21haW4gdGhhbiBod2RvbSAqLworCWlm ICh0ICYmIHQgIT0gaGFyZHdhcmVfZG9tYWluKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHQg PT0gcykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBhcm1fc21tdV9kZWFzc2lnbl9kZXYocywgZGV2 KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHQpIHsKKwkJLyogTm8gZmxhZ3Mg YXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KKwkJcmV0ID0gYXJtX3NtbXVfYXNzaWduX2Rldih0LCBk ZXZmbiwgZGV2LCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfaW9tbXVfZG9tYWluX2luaXQoc3RydWN0IGRv bWFpbiAqZCkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKwor CXhlbl9kb21haW4gPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluKTsKKwlpZiAo IXhlbl9kb21haW4pCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJnhlbl9k b21haW4tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ4ZW5fZG9tYWluLT5pb21tdV9kb21haW5z KTsKKworCWRvbV9pb21tdShkKS0+YXJjaC5wcml2ID0geGVuX2RvbWFpbjsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBfX2h3ZG9tX2luaXQgYXJtX3NtbXVfaW9tbXVfaHdkb21faW5p dChzdHJ1Y3QgZG9tYWluICpkKQoreworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9pb21tdV9k b21haW5fdGVhcmRvd24oc3RydWN0IGRvbWFpbiAqZCkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVu X2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2OworCisJQVNTRVJU KGxpc3RfZW1wdHkoJnhlbl9kb21haW4tPmlvbW11X2RvbWFpbnMpKTsKKwl4ZnJlZSh4ZW5fZG9t YWluKTsKK30KKworc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfbWFwX3BhZ2Uoc3Ry dWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sCisJCQl1bnNpZ25lZCBsb25nIG1mbiwg dW5zaWduZWQgaW50IGZsYWdzKQoreworCXAybV90eXBlX3QgdDsKKworCS8qCisJICogR3JhbnQg bWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIERNQSByZXF1ZXN0cy4gVGhlIGRldl9idXNfYWRkcgor CSAqIHJldHVybmVkIGJ5IHRoZSBoeXBlcmNhbGwgaXMgdGhlIE1GTiAobm90IHRoZSBJUEEpLiBG b3IgZGV2aWNlCisJICogcHJvdGVjdGVkIGJ5IGFuIElPTU1VLCBYZW4gbmVlZHMgdG8gYWRkIGEg MToxIG1hcHBpbmcgaW4gdGhlIGRvbWFpbgorCSAqIHAybSB0byBhbGxvdyBETUEgcmVxdWVzdCB0 byB3b3JrLgorCSAqIFRoaXMgaXMgb25seSB2YWxpZCB3aGVuIHRoZSBkb21haW4gaXMgZGlyZWN0 ZWQgbWFwcGVkLiBIZW5jZSB0aGlzCisJICogZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBi eSBnbnR0YWIgY29kZSB3aXRoIGdmbiA9PSBtZm4uCisJICovCisJQlVHX09OKCFpc19kb21haW5f ZGlyZWN0X21hcHBlZChkKSk7CisJQlVHX09OKG1mbiAhPSBnZm4pOworCisJLyogV2Ugb25seSBz dXBwb3J0IHJlYWRhYmxlIGFuZCB3cml0YWJsZSBmbGFncyAqLworCWlmICghKGZsYWdzICYgKElP TU1VRl9yZWFkYWJsZSB8IElPTU1VRl93cml0YWJsZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXQgPSAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpID8gcDJtX2lvbW11X21hcF9ydyA6IHAybV9p b21tdV9tYXBfcm87CisKKwkvKgorCSAqIFRoZSBmdW5jdGlvbiBndWVzdF9waHlzbWFwX2FkZF9l bnRyeSByZXBsYWNlcyB0aGUgY3VycmVudCBtYXBwaW5nCisJICogaWYgdGhlcmUgaXMgYWxyZWFk eSBvbmUuLi4KKwkgKi8KKwlyZXR1cm4gZ3Vlc3RfcGh5c21hcF9hZGRfZW50cnkoZCwgX2dmbihn Zm4pLCBfbWZuKG1mbiksIDAsIHQpOworfQorCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1f c21tdV91bm1hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuKQorewor CS8qCisJICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGdudHRhYiBjb2Rl IHdoZW4gdGhlIGRvbWFpbgorCSAqIGlzIGRpcmVjdCBtYXBwZWQKKwkgKi8KKwlpZiAoIWlzX2Rv bWFpbl9kaXJlY3RfbWFwcGVkKGQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBndWVz dF9waHlzbWFwX3JlbW92ZV9wYWdlKGQsIF9nZm4oZ2ZuKSwgX21mbihnZm4pLCAwKTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgYXJtX3NtbXVfaW9tbXVfb3BzID0geworCS5p bml0ID0gYXJtX3NtbXVfaW9tbXVfZG9tYWluX2luaXQsCisJLmh3ZG9tX2luaXQgPSBhcm1fc21t dV9pb21tdV9od2RvbV9pbml0LAorCS50ZWFyZG93biA9IGFybV9zbW11X2lvbW11X2RvbWFpbl90 ZWFyZG93biwKKwkuaW90bGJfZmx1c2ggPSBhcm1fc21tdV9pb3RsYl9mbHVzaCwKKwkuaW90bGJf Zmx1c2hfYWxsID0gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsLAorCS5hc3NpZ25fZGV2aWNlID0g YXJtX3NtbXVfYXNzaWduX2RldiwKKwkucmVhc3NpZ25fZGV2aWNlID0gYXJtX3NtbXVfcmVhc3Np Z25fZGV2LAorCS5tYXBfcGFnZSA9IGFybV9zbW11X21hcF9wYWdlLAorCS51bm1hcF9wYWdlID0g YXJtX3NtbXVfdW5tYXBfcGFnZSwKK307CisKK3N0YXRpYworc3RydWN0IGFybV9zbW11X2Rldmlj ZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQor eworCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZh cm1fc21tdV9kZXZpY2VzX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc21tdSwgJmFybV9z bW11X2RldmljZXMsIGRldmljZXMpIHsKKwkJaWYgKHNtbXUtPmRldi0+Zndub2RlID09IGZ3bm9k ZSkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsK KworCXJldHVybiBzbW11OworfQorCitzdGF0aWMgX19pbml0IGludCBhcm1fc21tdV9kdF9pbml0 KHN0cnVjdCBkdF9kZXZpY2Vfbm9kZSAqZGV2LAorCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEpCit7 CisJaW50IHJjOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBkZXZpY2UgY2FuJ3QgYmUgaW5pdGlh bGl6ZWQsIHdlIGRvbid0IHdhbnQgdG8KKwkgKiBnaXZlIHRoZSBTTU1VIGRldmljZSB0byBkb20w LgorCSAqLworCWR0X2RldmljZV9zZXRfdXNlZF9ieShkZXYsIERPTUlEX1hFTik7CisKKwlyYyA9 IGFybV9zbW11X2RldmljZV9wcm9iZShkdF90b19kZXYoZGV2KSk7CisJaWYgKHJjKQorCQlyZXR1 cm4gcmM7CisKKwlpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOworCisJcmV0dXJu IDA7Cit9CisKK0RUX0RFVklDRV9TVEFSVChzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9J T01NVSkKKwkuZHRfbWF0Y2ggPSBhcm1fc21tdV9vZl9tYXRjaCwKKwkuaW5pdCA9IGFybV9zbW11 X2R0X2luaXQsCitEVF9ERVZJQ0VfRU5ECisKKyNpZmRlZiBDT05GSUdfQUNQSQorLyogU2V0IHVw IHRoZSBJT01NVSAqLworc3RhdGljIGludCBfX2luaXQgYXJtX3NtbXVfYWNwaV9pbml0KGNvbnN0 IHZvaWQgKmRhdGEpCit7CisJaW50IHJjOworCXJjID0gYXJtX3NtbXVfZGV2aWNlX3Byb2JlKChz dHJ1Y3QgZGV2aWNlICopZGF0YSk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlvbW11 X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7CisJcmV0dXJuIDA7Cit9CisKK0FDUElfREVW SUNFX1NUQVJUKGFzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01NVSkKKwkuY2xhc3Nf dHlwZSA9IEFDUElfSU9SVF9OT0RFX1NNTVVfVjMsCisJLmluaXQgPSBhcm1fc21tdV9hY3BpX2lu aXQsCitBQ1BJX0RFVklDRV9FTkQKKworI2VuZGlmCi0tIApRdWFsY29tbSBEYXRhY2VudGVyIFRl Y2hub2xvZ2llcyBhcyBhbiBhZmZpbGlhdGUgb2YgUXVhbGNvbW0gVGVjaG5vbG9naWVzLCBJbmMu IFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJv cmEgRm9ydW0sIGEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QuCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg==