From mboxrd@z Thu Jan 1 00:00:00 1970 From: manish.jaggi@linaro.org Subject: [RFC 09/11] Xen IORT Changes Date: Tue, 2 Jan 2018 14:58:07 +0530 Message-ID: <20180102092809.1841-10-manish.jaggi@linaro.org> References: <20180102092809.1841-1-manish.jaggi@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eWIsf-0002j5-RB for xen-devel@lists.xenproject.org; Tue, 02 Jan 2018 09:29:09 +0000 Received: by mail-pf0-x242.google.com with SMTP id c204so25456274pfc.13 for ; Tue, 02 Jan 2018 01:29:07 -0800 (PST) In-Reply-To: <20180102092809.1841-1-manish.jaggi@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@linaro.org, sameer.goel@linaro.org, andre.przywara@linaro.org Cc: Manish Jaggi , manish.jaggi@cavium.com List-Id: xen-devel@lists.xenproject.org RnJvbTogTWFuaXNoIEphZ2dpIDxtYW5pc2guamFnZ2lAbGluYXJvLm9yZz4KClRoaXMgcGF0Y2gg YWRkcyB4ZW4gc3BlY2lmaWMgY2hhbmdlcyB0byBpb3J0LmMKClNpZ25lZC1vZmYtYnk6IE1hbmlz aCBKYWdnaSA8bWFuaXNoLmphZ2dpQGxpbmFyby5vcmc+Ci0tLQogeGVuL2FyY2gvYXJtL3NldHVw LmMgICAgICAgICAgfCAgICAyICsKIHhlbi9kcml2ZXJzL2FjcGkvYXJtL01ha2VmaWxlIHwgICAg MSArCiB4ZW4vZHJpdmVycy9hY3BpL2FybS9pb3J0LmMgICB8IDEwNDAgKysrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL2FjcGkvYWNwaV9pb3J0Lmgg IHwgICAgNiArLQogNCBmaWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspLCA5NzggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3NldHVwLmMgYi94ZW4vYXJjaC9hcm0v c2V0dXAuYwppbmRleCAxNmEzYjFiZThlLi43YWRhNDg5MjBmIDEwMDY0NAotLS0gYS94ZW4vYXJj aC9hcm0vc2V0dXAuYworKysgYi94ZW4vYXJjaC9hcm0vc2V0dXAuYwpAQCAtMzcsNiArMzcsNyBA QAogI2luY2x1ZGUgPHhlbi92bWFwLmg+CiAjaW5jbHVkZSA8eGVuL2xpYmZkdC9saWJmZHQuaD4K ICNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9pb3J0Lmg+CiAjaW5j bHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRl IDxhc20vY3VycmVudC5oPgpAQCAtODAwLDYgKzgwMSw3IEBAIHZvaWQgX19pbml0IHN0YXJ0X3hl bih1bnNpZ25lZCBsb25nIGJvb3RfcGh5c19vZmZzZXQsCiAKICAgICB0YXNrbGV0X3N1YnN5c19p bml0KCk7CiAKKyAgICBhY3BpX2lvcnRfaW5pdCgpOwogCiAgICAgeHNtX2R0X2luaXQoKTsKIApk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvYWNwaS9hcm0vTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9h Y3BpL2FybS9NYWtlZmlsZQppbmRleCAxM2YxYTkxNTlmLi41ZDE2MTYxMDE2IDEwMDY0NAotLS0g YS94ZW4vZHJpdmVycy9hY3BpL2FybS9NYWtlZmlsZQorKysgYi94ZW4vZHJpdmVycy9hY3BpL2Fy bS9NYWtlZmlsZQpAQCAtMSwyICsxLDMgQEAKIG9iai15ID0gcmlkbWFwLm8KIG9iai15ICs9IGdl bi1pb3J0Lm8KK29iai15ICs9IGlvcnQubwpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvYWNwaS9h cm0vaW9ydC5jIGIveGVuL2RyaXZlcnMvYWNwaS9hcm0vaW9ydC5jCmluZGV4IGRlNTYzOTRkZDEu LmE0N2VlMmRmNGMgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL2FjcGkvYXJtL2lvcnQuYworKysg Yi94ZW4vZHJpdmVycy9hY3BpL2FybS9pb3J0LmMKQEAgLTE0LDE3ICsxNCwyMCBAQAogICogVGhp cyBmaWxlIGltcGxlbWVudHMgZWFybHkgZGV0ZWN0aW9uL3BhcnNpbmcgb2YgSS9PIG1hcHBpbmcK ICAqIHJlcG9ydGVkIHRvIE9TIHRocm91Z2ggZmlybXdhcmUgdmlhIEkvTyBSZW1hcHBpbmcgVGFi bGUgKElPUlQpCiAgKiBJT1JUIGRvY3VtZW50IG51bWJlcjogQVJNIERFTiAwMDQ5QQorICoKKyAq IEltcG9ydGVkIGZyb20gTGludXggNC4xNC4wCisgKiBYZW4gTW9kaWZpY2F0aW9ucyA6IE1hbmlz aCBKYWdnaSA8bWFuaXNoLmphZ2dpQGxpbmFyby5vcmc+CiAgKi8KIAogI2RlZmluZSBwcl9mbXQo Zm10KQkiQUNQSTogSU9SVDogIiBmbXQKIAotI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW9ydC5oPgot I2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5j bHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRl IDxhY3BpL2FjcGlfaW9ydC5oPgorI2luY2x1ZGUgPGFjcGkvcmlkbWFwLmg+CisjaW5jbHVkZSA8 eGVuL2lvbW11Lmg+CisjaW5jbHVkZSA8eGVuL2tlcm5lbC5oPgorI2luY2x1ZGUgPHhlbi9saXN0 Lmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9wY2kuaD4KIAogI2RlZmlu ZSBJT1JUX1RZUEVfTUFTSyh0eXBlKQkoMSA8PCAodHlwZSkpCiAjZGVmaW5lIElPUlRfTVNJX1RZ UEUJCSgxIDw8IEFDUElfSU9SVF9OT0RFX0lUU19HUk9VUCkKQEAgLTM2LDYgKzM5LDIyIEBACiAj ZGVmaW5lIEFDUElfSU9SVF9TTU1VX1YzX0NBVklVTV9DTjk5WFgJCTB4MgogI2VuZGlmCiAKKy8q IFJlZGVmaW5lIFdBUk4gbWFjcm9zICovCisjdW5kZWYgV0FSTgorI3VuZGVmIFdBUk5fT04KKyNk ZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHsJCQkJCVwKKwlpbnQgX19yZXRfd2Fy bl9vbiA9ICEhKGNvbmRpdGlvbik7CQkJCVwKKwlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikp CQkJCQlcCisJCXByaW50ayhmb3JtYXQpOwkJCQkJCVwKKwl1bmxpa2VseShfX3JldF93YXJuX29u KTsJCQkJCVwKK30pCisjZGVmaW5lIFdBUk5fVEFJTlQoY29uZCwgdGFpbnQsIGZvcm1hdC4uLikg V0FSTihjb25kLCBmb3JtYXQpCisjZGVmaW5lIFdBUk5fT04oY29uZCkgICAgICAgICAgICAgICAg ICAgICAgKCEhY29uZCkKKworCisjZGVmaW5lIE1BWF9FUlJOTwk0MDk1CisjZGVmaW5lIElTX0VS Ul9WQUxVRSh4KSB1bmxpa2VseSgodW5zaWduZWQgbG9uZykodm9pZCAqKSh4KSA+PSAodW5zaWdu ZWQgbG9uZyktTUFYX0VSUk5PKQorCiBzdHJ1Y3QgaW9ydF9pdHNfbXNpX2NoaXAgewogCXN0cnVj dCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgZndub2RlX2hhbmRsZQkqZndfbm9kZTsKQEAgLTQ5 LDcgKzY4LDcgQEAgc3RydWN0IGlvcnRfZndub2RlIHsKIH07CiBzdGF0aWMgTElTVF9IRUFEKGlv cnRfZndub2RlX2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpb3J0X2Z3bm9kZV9sb2Nr KTsKLQorY29uc3Qgc3RydWN0IGZ3bm9kZV9vcGVyYXRpb25zIGFjcGlfc3RhdGljX2Z3bm9kZV9v cHM7CiAvKioKICAqIGlvcnRfc2V0X2Z3bm9kZSgpIC0gQ3JlYXRlIGlvcnRfZndub2RlIGFuZCB1 c2UgaXQgdG8gcmVnaXN0ZXIKICAqCQkgICAgICAgaW9tbXUgZGF0YSBpbiB0aGUgaW9ydF9md25v ZGVfbGlzdApAQCAtNzMsNyArOTIsNiBAQCBzdGF0aWMgaW5saW5lIGludCBpb3J0X3NldF9md25v ZGUoc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGUsCiAJSU5JVF9MSVNUX0hFQUQoJm5w LT5saXN0KTsKIAlucC0+aW9ydF9ub2RlID0gaW9ydF9ub2RlOwogCW5wLT5md25vZGUgPSBmd25v ZGU7Ci0KIAlzcGluX2xvY2soJmlvcnRfZndub2RlX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJm5w LT5saXN0LCAmaW9ydF9md25vZGVfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmlvcnRfZndub2RlX2xv Y2spOwpAQCAtOTMsNyArMTExLDYgQEAgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlvcnRfZ2V0X2Z3 bm9kZShzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUpCiB7CiAJc3RydWN0IGlvcnRfZndub2Rl ICpjdXJyOwogCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUgPSBOVUxMOwotCiAJc3Bpbl9s b2NrKCZpb3J0X2Z3bm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnIsICZpb3J0 X2Z3bm9kZV9saXN0LCBsaXN0KSB7CiAJCWlmIChjdXJyLT5pb3J0X25vZGUgPT0gbm9kZSkgewpA QCAtMTMyLDc5ICsxNDksNiBAQCB0eXBlZGVmIGFjcGlfc3RhdHVzICgqaW9ydF9maW5kX25vZGVf Y2FsbGJhY2spCiAvKiBSb290IHBvaW50ZXIgdG8gdGhlIG1hcHBlZCBJT1JUIHRhYmxlICovCiBz dGF0aWMgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICppb3J0X3RhYmxlOwogCi1zdGF0aWMgTElT VF9IRUFEKGlvcnRfbXNpX2NoaXBfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvcnRf bXNpX2NoaXBfbG9jayk7Ci0KLS8qKgotICogaW9ydF9yZWdpc3Rlcl9kb21haW5fdG9rZW4oKSAt IHJlZ2lzdGVyIGRvbWFpbiB0b2tlbiBhbmQgcmVsYXRlZCBJVFMgSUQKLSAqIHRvIHRoZSBsaXN0 IGZyb20gd2hlcmUgd2UgY2FuIGdldCBpdCBiYWNrIGxhdGVyIG9uLgotICogQHRyYW5zX2lkOiBJ VFMgSUQuCi0gKiBAZndfbm9kZTogRG9tYWluIHRva2VuLgotICoKLSAqIFJldHVybnM6IDAgb24g c3VjY2VzcywgLUVOT01FTSBpZiBubyBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGxpc3QgZWxlbWVu dAotICovCi1pbnQgaW9ydF9yZWdpc3Rlcl9kb21haW5fdG9rZW4oaW50IHRyYW5zX2lkLCBzdHJ1 Y3QgZndub2RlX2hhbmRsZSAqZndfbm9kZSkKLXsKLQlzdHJ1Y3QgaW9ydF9pdHNfbXNpX2NoaXAg Kml0c19tc2lfY2hpcDsKLQotCWl0c19tc2lfY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCppdHNfbXNp X2NoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0c19tc2lfY2hpcCkKLQkJcmV0dXJuIC1FTk9N RU07Ci0KLQlpdHNfbXNpX2NoaXAtPmZ3X25vZGUgPSBmd19ub2RlOwotCWl0c19tc2lfY2hpcC0+ dHJhbnNsYXRpb25faWQgPSB0cmFuc19pZDsKLQotCXNwaW5fbG9jaygmaW9ydF9tc2lfY2hpcF9s b2NrKTsKLQlsaXN0X2FkZCgmaXRzX21zaV9jaGlwLT5saXN0LCAmaW9ydF9tc2lfY2hpcF9saXN0 KTsKLQlzcGluX3VubG9jaygmaW9ydF9tc2lfY2hpcF9sb2NrKTsKLQotCXJldHVybiAwOwotfQot Ci0vKioKLSAqIGlvcnRfZGVyZWdpc3Rlcl9kb21haW5fdG9rZW4oKSAtIERlcmVnaXN0ZXIgZG9t YWluIHRva2VuIGJhc2VkIG9uIElUUyBJRAotICogQHRyYW5zX2lkOiBJVFMgSUQuCi0gKgotICog UmV0dXJuczogbm9uZS4KLSAqLwotdm9pZCBpb3J0X2RlcmVnaXN0ZXJfZG9tYWluX3Rva2VuKGlu dCB0cmFuc19pZCkKLXsKLQlzdHJ1Y3QgaW9ydF9pdHNfbXNpX2NoaXAgKml0c19tc2lfY2hpcCwg KnQ7Ci0KLQlzcGluX2xvY2soJmlvcnRfbXNpX2NoaXBfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGl0c19tc2lfY2hpcCwgdCwgJmlvcnRfbXNpX2NoaXBfbGlzdCwgbGlzdCkgewot CQlpZiAoaXRzX21zaV9jaGlwLT50cmFuc2xhdGlvbl9pZCA9PSB0cmFuc19pZCkgewotCQkJbGlz dF9kZWwoJml0c19tc2lfY2hpcC0+bGlzdCk7Ci0JCQlrZnJlZShpdHNfbXNpX2NoaXApOwotCQkJ YnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmlvcnRfbXNpX2NoaXBfbG9jayk7Ci19Ci0K LS8qKgotICogaW9ydF9maW5kX2RvbWFpbl90b2tlbigpIC0gRmluZCBkb21haW4gdG9rZW4gYmFz ZWQgb24gZ2l2ZW4gSVRTIElECi0gKiBAdHJhbnNfaWQ6IElUUyBJRC4KLSAqCi0gKiBSZXR1cm5z OiBkb21haW4gdG9rZW4gd2hlbiBmaW5kIG9uIHRoZSBsaXN0LCBOVUxMIG90aGVyd2lzZQotICov Ci1zdHJ1Y3QgZndub2RlX2hhbmRsZSAqaW9ydF9maW5kX2RvbWFpbl90b2tlbihpbnQgdHJhbnNf aWQpCi17Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3X25vZGUgPSBOVUxMOwotCXN0cnVjdCBp b3J0X2l0c19tc2lfY2hpcCAqaXRzX21zaV9jaGlwOwotCi0Jc3Bpbl9sb2NrKCZpb3J0X21zaV9j aGlwX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRzX21zaV9jaGlwLCAmaW9ydF9tc2lf Y2hpcF9saXN0LCBsaXN0KSB7Ci0JCWlmIChpdHNfbXNpX2NoaXAtPnRyYW5zbGF0aW9uX2lkID09 IHRyYW5zX2lkKSB7Ci0JCQlmd19ub2RlID0gaXRzX21zaV9jaGlwLT5md19ub2RlOwotCQkJYnJl YWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmlvcnRfbXNpX2NoaXBfbG9jayk7Ci0KLQlyZXR1 cm4gZndfbm9kZTsKLX0KLQogc3RhdGljIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9zY2Fu X25vZGUoZW51bSBhY3BpX2lvcnRfbm9kZV90eXBlIHR5cGUsCiAJCQkJCSAgICAgaW9ydF9maW5k X25vZGVfY2FsbGJhY2sgY2FsbGJhY2ssCiAJCQkJCSAgICAgdm9pZCAqY29udGV4dCkKQEAgLTIx NSw3ICsxNTksNiBAQCBzdGF0aWMgc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X3NjYW5fbm9k ZShlbnVtIGFjcGlfaW9ydF9ub2RlX3R5cGUgdHlwZSwKIAogCWlmICghaW9ydF90YWJsZSkKIAkJ cmV0dXJuIE5VTEw7Ci0KIAkvKiBHZXQgdGhlIGZpcnN0IElPUlQgbm9kZSAqLwogCWlvcnQgPSAo c3RydWN0IGFjcGlfdGFibGVfaW9ydCAqKWlvcnRfdGFibGU7CiAJaW9ydF9ub2RlID0gQUNQSV9B RERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSwgaW9ydCwKQEAgLTI0NSwyOSArMTg4LDExIEBA IHN0YXRpYyBhY3BpX3N0YXR1cyBpb3J0X21hdGNoX25vZGVfY2FsbGJhY2soc3RydWN0IGFjcGlf aW9ydF9ub2RlICpub2RlLAogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQ7CiAJYWNwaV9z dGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOwogCi0JaWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9J T1JUX05PREVfTkFNRURfQ09NUE9ORU5UKSB7Ci0JCXN0cnVjdCBhY3BpX2J1ZmZlciBidWYgPSB7 IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07Ci0JCXN0cnVjdCBhY3BpX2RldmljZSAqYWRl diA9IHRvX2FjcGlfZGV2aWNlX25vZGUoZGV2LT5md25vZGUpOwotCQlzdHJ1Y3QgYWNwaV9pb3J0 X25hbWVkX2NvbXBvbmVudCAqbmNvbXA7Ci0KLQkJaWYgKCFhZGV2KQotCQkJZ290byBvdXQ7Ci0K LQkJc3RhdHVzID0gYWNwaV9nZXRfbmFtZShhZGV2LT5oYW5kbGUsIEFDUElfRlVMTF9QQVRITkFN RSwgJmJ1Zik7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZGV2X3dhcm4oZGV2 LCAiQ2FuJ3QgZ2V0IGRldmljZSBmdWxsIHBhdGggbmFtZVxuIik7Ci0JCQlnb3RvIG91dDsKLQkJ fQotCi0JCW5jb21wID0gKHN0cnVjdCBhY3BpX2lvcnRfbmFtZWRfY29tcG9uZW50ICopbm9kZS0+ bm9kZV9kYXRhOwotCQlzdGF0dXMgPSAhc3RyY21wKG5jb21wLT5kZXZpY2VfbmFtZSwgYnVmLnBv aW50ZXIpID8KLQkJCQkJCQlBRV9PSyA6IEFFX05PVF9GT1VORDsKLQkJYWNwaV9vc19mcmVlKGJ1 Zi5wb2ludGVyKTsKLQl9IGVsc2UgaWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVfUENJ X1JPT1RfQ09NUExFWCkgeworCWlmIChub2RlLT50eXBlID09IEFDUElfSU9SVF9OT0RFX1BDSV9S T09UX0NPTVBMRVgpIHsKIAkJc3RydWN0IGFjcGlfaW9ydF9yb290X2NvbXBsZXggKnBjaV9yYzsK LQkJc3RydWN0IHBjaV9idXMgKmJ1czsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLQkJYnVz ID0gdG9fcGNpX2J1cyhkZXYpOworCQlwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCQlwY2lfcmMg PSAoc3RydWN0IGFjcGlfaW9ydF9yb290X2NvbXBsZXggKilub2RlLT5ub2RlX2RhdGE7CiAKIAkJ LyoKQEAgLTI3NSwzMzMgKzIwMCwxOSBAQCBzdGF0aWMgYWNwaV9zdGF0dXMgaW9ydF9tYXRjaF9u b2RlX2NhbGxiYWNrKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSwKIAkJICogd2l0aCByb290 IGNvbXBsZXhlcy4gRWFjaCBzZWdtZW50IG51bWJlciBjYW4gcmVwcmVzZW50IG9ubHkKIAkJICog b25lIHJvb3QgY29tcGxleC4KIAkJICovCi0JCXN0YXR1cyA9IHBjaV9yYy0+cGNpX3NlZ21lbnRf bnVtYmVyID09IHBjaV9kb21haW5fbnIoYnVzKSA/CisJCXN0YXR1cyA9IHBjaV9yYy0+cGNpX3Nl Z21lbnRfbnVtYmVyID09IHBjaV9kb21haW5fbnIocGRldikgPwogCQkJCQkJCUFFX09LIDogQUVf Tk9UX0ZPVU5EOwogCX0KLW91dDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGlv cnRfaWRfbWFwKHN0cnVjdCBhY3BpX2lvcnRfaWRfbWFwcGluZyAqbWFwLCB1OCB0eXBlLCB1MzIg cmlkX2luLAotCQkgICAgICAgdTMyICpyaWRfb3V0KQotewotCS8qIFNpbmdsZSBtYXBwaW5nIGRv ZXMgbm90IGNhcmUgZm9yIGlucHV0IGlkICovCi0JaWYgKG1hcC0+ZmxhZ3MgJiBBQ1BJX0lPUlRf SURfU0lOR0xFX01BUFBJTkcpIHsKLQkJaWYgKHR5cGUgPT0gQUNQSV9JT1JUX05PREVfTkFNRURf Q09NUE9ORU5UIHx8Ci0JCSAgICB0eXBlID09IEFDUElfSU9SVF9OT0RFX1BDSV9ST09UX0NPTVBM RVgpIHsKLQkJCSpyaWRfb3V0ID0gbWFwLT5vdXRwdXRfYmFzZTsKLQkJCXJldHVybiAwOwotCQl9 Ci0KLQkJcHJfd2FybihGV19CVUcgIlttYXAgJXBdIFNJTkdMRSBNQVBQSU5HIGZsYWcgbm90IGFs bG93ZWQgZm9yIG5vZGUgdHlwZSAlZCwgc2tpcHBpbmcgSUQgbWFwXG4iLAotCQkJbWFwLCB0eXBl KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpZiAocmlkX2luIDwgbWFwLT5pbnB1dF9iYXNl IHx8Ci0JICAgIChyaWRfaW4gPj0gbWFwLT5pbnB1dF9iYXNlICsgbWFwLT5pZF9jb3VudCkpCi0J CXJldHVybiAtRU5YSU87Ci0KLQkqcmlkX291dCA9IG1hcC0+b3V0cHV0X2Jhc2UgKyAocmlkX2lu IC0gbWFwLT5pbnB1dF9iYXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljCi1zdHJ1Y3QgYWNw aV9pb3J0X25vZGUgKmlvcnRfbm9kZV9nZXRfaWQoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2Rl LAotCQkJCQl1MzIgKmlkX291dCwgaW50IGluZGV4KQotewotCXN0cnVjdCBhY3BpX2lvcnRfbm9k ZSAqcGFyZW50OwotCXN0cnVjdCBhY3BpX2lvcnRfaWRfbWFwcGluZyAqbWFwOwotCi0JaWYgKCFu b2RlLT5tYXBwaW5nX29mZnNldCB8fCAhbm9kZS0+bWFwcGluZ19jb3VudCB8fAotCQkJCSAgICAg aW5kZXggPj0gbm9kZS0+bWFwcGluZ19jb3VudCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltYXAgPSBB Q1BJX0FERF9QVFIoc3RydWN0IGFjcGlfaW9ydF9pZF9tYXBwaW5nLCBub2RlLAotCQkJICAgbm9k ZS0+bWFwcGluZ19vZmZzZXQgKyBpbmRleCAqIHNpemVvZigqbWFwKSk7Ci0KLQkvKiBGaXJtd2Fy ZSBidWchICovCi0JaWYgKCFtYXAtPm91dHB1dF9yZWZlcmVuY2UpIHsKLQkJcHJfZXJyKEZXX0JV RyAiW25vZGUgJXAgdHlwZSAlZF0gSUQgbWFwIGhhcyBOVUxMIHBhcmVudCByZWZlcmVuY2VcbiIs Ci0JCSAgICAgICBub2RlLCBub2RlLT50eXBlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcGFy ZW50ID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSwgaW9ydF90YWJsZSwKLQkJ CSAgICAgICBtYXAtPm91dHB1dF9yZWZlcmVuY2UpOwotCi0JaWYgKG1hcC0+ZmxhZ3MgJiBBQ1BJ X0lPUlRfSURfU0lOR0xFX01BUFBJTkcpIHsKLQkJaWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9JT1JU X05PREVfTkFNRURfQ09NUE9ORU5UIHx8Ci0JCSAgICBub2RlLT50eXBlID09IEFDUElfSU9SVF9O T0RFX1BDSV9ST09UX0NPTVBMRVgpIHsKLQkJCSppZF9vdXQgPSBtYXAtPm91dHB1dF9iYXNlOwot CQkJcmV0dXJuIHBhcmVudDsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMg c3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGVfbWFwX2lkKHN0cnVjdCBhY3BpX2lvcnRf bm9kZSAqbm9kZSwKLQkJCQkJICAgICAgIHUzMiBpZF9pbiwgdTMyICppZF9vdXQsCi0JCQkJCSAg ICAgICB1OCB0eXBlX21hc2spCi17Ci0JdTMyIGlkID0gaWRfaW47Ci0KLQkvKiBQYXJzZSB0aGUg SUQgbWFwcGluZyB0cmVlIHRvIGZpbmQgc3BlY2lmaWVkIG5vZGUgdHlwZSAqLwotCXdoaWxlIChu b2RlKSB7Ci0JCXN0cnVjdCBhY3BpX2lvcnRfaWRfbWFwcGluZyAqbWFwOwotCQlpbnQgaTsKLQot CQlpZiAoSU9SVF9UWVBFX01BU0sobm9kZS0+dHlwZSkgJiB0eXBlX21hc2spIHsKLQkJCWlmIChp ZF9vdXQpCi0JCQkJKmlkX291dCA9IGlkOwotCQkJcmV0dXJuIG5vZGU7Ci0JCX0KLQotCQlpZiAo IW5vZGUtPm1hcHBpbmdfb2Zmc2V0IHx8ICFub2RlLT5tYXBwaW5nX2NvdW50KQotCQkJZ290byBm YWlsX21hcDsKLQotCQltYXAgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfaW9ydF9pZF9tYXBw aW5nLCBub2RlLAotCQkJCSAgIG5vZGUtPm1hcHBpbmdfb2Zmc2V0KTsKLQotCQkvKiBGaXJtd2Fy ZSBidWchICovCi0JCWlmICghbWFwLT5vdXRwdXRfcmVmZXJlbmNlKSB7Ci0JCQlwcl9lcnIoRldf QlVHICJbbm9kZSAlcCB0eXBlICVkXSBJRCBtYXAgaGFzIE5VTEwgcGFyZW50IHJlZmVyZW5jZVxu IiwKLQkJCSAgICAgICBub2RlLCBub2RlLT50eXBlKTsKLQkJCWdvdG8gZmFpbF9tYXA7Ci0JCX0K LQotCQkvKiBEbyB0aGUgSUQgdHJhbnNsYXRpb24gKi8KLQkJZm9yIChpID0gMDsgaSA8IG5vZGUt Pm1hcHBpbmdfY291bnQ7IGkrKywgbWFwKyspIHsKLQkJCWlmICghaW9ydF9pZF9tYXAobWFwLCBu b2RlLT50eXBlLCBpZCwgJmlkKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpID09IG5vZGUt Pm1hcHBpbmdfY291bnQpCi0JCQlnb3RvIGZhaWxfbWFwOwotCi0JCW5vZGUgPSBBQ1BJX0FERF9Q VFIoc3RydWN0IGFjcGlfaW9ydF9ub2RlLCBpb3J0X3RhYmxlLAotCQkJCSAgICBtYXAtPm91dHB1 dF9yZWZlcmVuY2UpOwotCX0KLQotZmFpbF9tYXA6Ci0JLyogTWFwIGlucHV0IElEIHRvIG91dHB1 dCBJRCB1bmNoYW5nZWQgb24gbWFwcGluZyBmYWlsdXJlICovCi0JaWYgKGlkX291dCkKLQkJKmlk X291dCA9IGlkX2luOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotc3RydWN0IGFjcGlf aW9ydF9ub2RlICppb3J0X25vZGVfbWFwX3BsYXRmb3JtX2lkKHN0cnVjdCBhY3BpX2lvcnRfbm9k ZSAqbm9kZSwKLQkJCQkJCSB1MzIgKmlkX291dCwgdTggdHlwZV9tYXNrLAotCQkJCQkJIGludCBp bmRleCkKLXsKLQlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKnBhcmVudDsKLQl1MzIgaWQ7Ci0KLQkv KiBzdGVwIDE6IHJldHJpZXZlIHRoZSBpbml0aWFsIGRldiBpZCAqLwotCXBhcmVudCA9IGlvcnRf bm9kZV9nZXRfaWQobm9kZSwgJmlkLCBpbmRleCk7Ci0JaWYgKCFwYXJlbnQpCi0JCXJldHVybiBO VUxMOwotCi0JLyoKLQkgKiBvcHRpb25hbCBzdGVwIDI6IG1hcCB0aGUgaW5pdGlhbCBkZXYgaWQg aWYgaXRzIHBhcmVudCBpcyBub3QKLQkgKiB0aGUgdGFyZ2V0IHR5cGUgd2Ugd2FudCwgbWFwIGl0 IGFnYWluIGZvciB0aGUgdXNlIGNhc2VzIHN1Y2gKLQkgKiBhcyBOQyAobmFtZWQgY29tcG9uZW50 KSAtPiBTTU1VIC0+IElUUy4gSWYgdGhlIHR5cGUgaXMgbWF0Y2hlZCwKLQkgKiByZXR1cm4gdGhl IGluaXRpYWwgZGV2IGlkIGFuZCBpdHMgcGFyZW50IHBvaW50ZXIgZGlyZWN0bHkuCi0JICovCi0J aWYgKCEoSU9SVF9UWVBFX01BU0socGFyZW50LT50eXBlKSAmIHR5cGVfbWFzaykpCi0JCXBhcmVu dCA9IGlvcnRfbm9kZV9tYXBfaWQocGFyZW50LCBpZCwgaWRfb3V0LCB0eXBlX21hc2spOwotCWVs c2UKLQkJaWYgKGlkX291dCkKLQkJCSppZF9vdXQgPSBpZDsKLQotCXJldHVybiBwYXJlbnQ7Ci19 CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfZmluZF9kZXZfbm9kZShzdHJ1 Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBjaV9idXMgKnBidXM7Ci0KLQlpZiAoIWRldl9p c19wY2koZGV2KSkKLQkJcmV0dXJuIGlvcnRfc2Nhbl9ub2RlKEFDUElfSU9SVF9OT0RFX05BTUVE X0NPTVBPTkVOVCwKLQkJCQkgICAgICBpb3J0X21hdGNoX25vZGVfY2FsbGJhY2ssIGRldik7Ci0K LQkvKiBGaW5kIGEgUENJIHJvb3QgYnVzICovCi0JcGJ1cyA9IHRvX3BjaV9kZXYoZGV2KS0+YnVz OwotCXdoaWxlICghcGNpX2lzX3Jvb3RfYnVzKHBidXMpKQotCQlwYnVzID0gcGJ1cy0+cGFyZW50 OwotCi0JcmV0dXJuIGlvcnRfc2Nhbl9ub2RlKEFDUElfSU9SVF9OT0RFX1BDSV9ST09UX0NPTVBM RVgsCi0JCQkgICAgICBpb3J0X21hdGNoX25vZGVfY2FsbGJhY2ssICZwYnVzLT5kZXYpOwotfQot Ci0vKioKLSAqIGlvcnRfbXNpX21hcF9yaWQoKSAtIE1hcCBhIE1TSSByZXF1ZXN0ZXIgSUQgZm9y IGEgZGV2aWNlCi0gKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgbWFwcGluZyBpcyB0 byBiZSBkb25lLgotICogQHJlcV9pZDogVGhlIGRldmljZSByZXF1ZXN0ZXIgSUQuCi0gKgotICog UmV0dXJuczogbWFwcGVkIE1TSSBSSUQgb24gc3VjY2VzcywgaW5wdXQgcmVxdWVzdGVyIElEIG90 aGVyd2lzZQotICovCi11MzIgaW9ydF9tc2lfbWFwX3JpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUz MiByZXFfaWQpCi17Ci0Jc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlOwotCXUzMiBkZXZfaWQ7 Ci0KLQlub2RlID0gaW9ydF9maW5kX2Rldl9ub2RlKGRldik7Ci0JaWYgKCFub2RlKQotCQlyZXR1 cm4gcmVxX2lkOwotCi0JaW9ydF9ub2RlX21hcF9pZChub2RlLCByZXFfaWQsICZkZXZfaWQsIElP UlRfTVNJX1RZUEUpOwotCXJldHVybiBkZXZfaWQ7Ci19Ci0KLS8qKgotICogaW9ydF9wbXNpX2dl dF9kZXZfaWQoKSAtIEdldCB0aGUgZGV2aWNlIGlkIGZvciBhIGRldmljZQotICogQGRldjogVGhl IGRldmljZSBmb3Igd2hpY2ggdGhlIG1hcHBpbmcgaXMgdG8gYmUgZG9uZS4KLSAqIEBkZXZfaWQ6 IFRoZSBkZXZpY2UgSUQgZm91bmQuCi0gKgotICogUmV0dXJuczogMCBmb3Igc3VjY2Vzc2Z1bCBm aW5kIGEgZGV2IGlkLCAtRU5PREVWIG9uIGVycm9yCi0gKi8KLWludCBpb3J0X3Btc2lfZ2V0X2Rl dl9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGV2X2lkKQotewotCWludCBpOwotCXN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKLQotCW5vZGUgPSBpb3J0X2ZpbmRfZGV2X25vZGUoZGV2 KTsKLQlpZiAoIW5vZGUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZm9yIChpID0gMDsgaSA8IG5v ZGUtPm1hcHBpbmdfY291bnQ7IGkrKykgewotCQlpZiAoaW9ydF9ub2RlX21hcF9wbGF0Zm9ybV9p ZChub2RlLCBkZXZfaWQsIElPUlRfTVNJX1RZUEUsIGkpKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0J cmV0dXJuIC1FTk9ERVY7Ci19Ci0KLS8qKgotICogaW9ydF9kZXZfZmluZF9pdHNfaWQoKSAtIEZp bmQgdGhlIElUUyBpZGVudGlmaWVyIGZvciBhIGRldmljZQotICogQGRldjogVGhlIGRldmljZS4K LSAqIEByZXFfaWQ6IERldmljZSdzIHJlcXVlc3RlciBJRAotICogQGlkeDogSW5kZXggb2YgdGhl IElUUyBpZGVudGlmaWVyIGxpc3QuCi0gKiBAaXRzX2lkOiBJVFMgaWRlbnRpZmllci4KLSAqCi0g KiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFwcHJvcHJpYXRlIGVycm9yIHZhbHVlIG90aGVyd2lz ZQotICovCi1zdGF0aWMgaW50IGlvcnRfZGV2X2ZpbmRfaXRzX2lkKHN0cnVjdCBkZXZpY2UgKmRl diwgdTMyIHJlcV9pZCwKLQkJCQl1bnNpZ25lZCBpbnQgaWR4LCBpbnQgKml0c19pZCkKLXsKLQlz dHJ1Y3QgYWNwaV9pb3J0X2l0c19ncm91cCAqaXRzOwotCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAq bm9kZTsKLQotCW5vZGUgPSBpb3J0X2ZpbmRfZGV2X25vZGUoZGV2KTsKLQlpZiAoIW5vZGUpCi0J CXJldHVybiAtRU5YSU87Ci0KLQlub2RlID0gaW9ydF9ub2RlX21hcF9pZChub2RlLCByZXFfaWQs IE5VTEwsIElPUlRfTVNJX1RZUEUpOwotCWlmICghbm9kZSkKLQkJcmV0dXJuIC1FTlhJTzsKLQot CS8qIE1vdmUgdG8gSVRTIHNwZWNpZmljIGRhdGEgKi8KLQlpdHMgPSAoc3RydWN0IGFjcGlfaW9y dF9pdHNfZ3JvdXAgKilub2RlLT5ub2RlX2RhdGE7Ci0JaWYgKGlkeCA+IGl0cy0+aXRzX2NvdW50 KSB7Ci0JCWRldl9lcnIoZGV2LCAicmVxdWVzdGVkIElUUyBJRCBpbmRleCBbJWRdIGlzIGdyZWF0 ZXIgdGhhbiBhdmFpbGFibGUgWyVkXVxuIiwKLQkJCWlkeCwgaXRzLT5pdHNfY291bnQpOwotCQly ZXR1cm4gLUVOWElPOwotCX0KLQotCSppdHNfaWQgPSBpdHMtPmlkZW50aWZpZXJzW2lkeF07Ci0J cmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaW9ydF9nZXRfZGV2aWNlX2RvbWFpbigpIC0gRmluZCBN U0kgZG9tYWluIHJlbGF0ZWQgdG8gYSBkZXZpY2UKLSAqIEBkZXY6IFRoZSBkZXZpY2UuCi0gKiBA cmVxX2lkOiBSZXF1ZXN0ZXIgSUQgZm9yIHRoZSBkZXZpY2UuCi0gKgotICogUmV0dXJuczogdGhl IE1TSSBkb21haW4gZm9yIHRoaXMgZGV2aWNlLCBOVUxMIG90aGVyd2lzZQotICovCi1zdHJ1Y3Qg aXJxX2RvbWFpbiAqaW9ydF9nZXRfZGV2aWNlX2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHUz MiByZXFfaWQpCi17Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmhhbmRsZTsKLQlpbnQgaXRzX2lk OwotCi0JaWYgKGlvcnRfZGV2X2ZpbmRfaXRzX2lkKGRldiwgcmVxX2lkLCAwLCAmaXRzX2lkKSkK LQkJcmV0dXJuIE5VTEw7Ci0KLQloYW5kbGUgPSBpb3J0X2ZpbmRfZG9tYWluX3Rva2VuKGl0c19p ZCk7Ci0JaWYgKCFoYW5kbGUpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGlycV9maW5kX21h dGNoaW5nX2Z3bm9kZShoYW5kbGUsIERPTUFJTl9CVVNfUENJX01TSSk7Ci19Ci0KLS8qKgotICog aW9ydF9nZXRfcGxhdGZvcm1fZGV2aWNlX2RvbWFpbigpIC0gRmluZCBNU0kgZG9tYWluIHJlbGF0 ZWQgdG8gYQotICogcGxhdGZvcm0gZGV2aWNlCi0gKiBAZGV2OiB0aGUgZGV2IHBvaW50ZXIgYXNz b2NpYXRlZCB3aXRoIHRoZSBwbGF0Zm9ybSBkZXZpY2UKLSAqCi0gKiBSZXR1cm5zOiB0aGUgTVNJ IGRvbWFpbiBmb3IgdGhpcyBkZXZpY2UsIE5VTEwgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBzdHJ1 Y3QgaXJxX2RvbWFpbiAqaW9ydF9nZXRfcGxhdGZvcm1fZGV2aWNlX2RvbWFpbihzdHJ1Y3QgZGV2 aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlLCAqbXNpX3BhcmVudDsK LQlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaW9ydF9md25vZGU7Ci0Jc3RydWN0IGFjcGlfaW9ydF9p dHNfZ3JvdXAgKml0czsKLQlpbnQgaTsKLQotCS8qIGZpbmQgaXRzIGFzc29jaWF0ZWQgaW9ydCBu b2RlICovCi0Jbm9kZSA9IGlvcnRfc2Nhbl9ub2RlKEFDUElfSU9SVF9OT0RFX05BTUVEX0NPTVBP TkVOVCwKLQkJCSAgICAgIGlvcnRfbWF0Y2hfbm9kZV9jYWxsYmFjaywgZGV2KTsKLQlpZiAoIW5v ZGUpCi0JCXJldHVybiBOVUxMOwotCi0JLyogdGhlbiBmaW5kIGl0cyBtc2kgcGFyZW50IG5vZGUg Ki8KLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bWFwcGluZ19jb3VudDsgaSsrKSB7Ci0JCW1zaV9w YXJlbnQgPSBpb3J0X25vZGVfbWFwX3BsYXRmb3JtX2lkKG5vZGUsIE5VTEwsCi0JCQkJCQkgICAg ICAgSU9SVF9NU0lfVFlQRSwgaSk7Ci0JCWlmIChtc2lfcGFyZW50KQotCQkJYnJlYWs7Ci0JfQot Ci0JaWYgKCFtc2lfcGFyZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIE1vdmUgdG8gSVRTIHNw ZWNpZmljIGRhdGEgKi8KLQlpdHMgPSAoc3RydWN0IGFjcGlfaW9ydF9pdHNfZ3JvdXAgKiltc2lf cGFyZW50LT5ub2RlX2RhdGE7Ci0KLQlpb3J0X2Z3bm9kZSA9IGlvcnRfZmluZF9kb21haW5fdG9r ZW4oaXRzLT5pZGVudGlmaWVyc1swXSk7Ci0JaWYgKCFpb3J0X2Z3bm9kZSkKLQkJcmV0dXJuIE5V TEw7Ci0KLQlyZXR1cm4gaXJxX2ZpbmRfbWF0Y2hpbmdfZndub2RlKGlvcnRfZndub2RlLCBET01B SU5fQlVTX1BMQVRGT1JNX01TSSk7Ci19Ci0KLXZvaWQgYWNwaV9jb25maWd1cmVfcG1zaV9kb21h aW4oc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpcnFfZG9tYWluICptc2lfZG9tYWlu OwotCi0JbXNpX2RvbWFpbiA9IGlvcnRfZ2V0X3BsYXRmb3JtX2RldmljZV9kb21haW4oZGV2KTsK LQlpZiAobXNpX2RvbWFpbikKLQkJZGV2X3NldF9tc2lfZG9tYWluKGRldiwgbXNpX2RvbWFpbik7 Ci19Ci0KLXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgX19nZXRfcGNpX3JpZChzdHJ1Y3QgcGNp X2RldiAqcGRldiwgdTE2IGFsaWFzLAotCQkJCQl2b2lkICpkYXRhKQotewotCXUzMiAqcmlkID0g ZGF0YTsKLQotCSpyaWQgPSBhbGlhczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhdHVzOwogfQog CiBzdGF0aWMgaW50IGFybV9zbW11X2lvcnRfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIg c3RyZWFtaWQsCiAJCQkgICAgICAgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKIAkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzICpvcHMpCiB7Ci0JaW50IHJldCA9IGlvbW11X2Z3 c3BlY19pbml0KGRldiwgZndub2RlLCBvcHMpOworCWludCByZXQ7CisJcmV0ICA9IGlvbW11X2Z3 c3BlY19pbml0KGRldiwgZndub2RlLCBvcHMpOwogCiAJaWYgKCFyZXQpCiAJCXJldCA9IGlvbW11 X2Z3c3BlY19hZGRfaWRzKGRldiwgJnN0cmVhbWlkLCAxKTsKQEAgLTYwOSw0NSArMjIwLDEyIEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfaW9ydF94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBz dHJlYW1pZCwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaW9ydF9pb21t dV9kcml2ZXJfZW5hYmxlZCh1OCB0eXBlKQotewotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQ SV9JT1JUX05PREVfU01NVV9WMzoKLQkJcmV0dXJuIElTX0JVSUxUSU4oQ09ORklHX0FSTV9TTU1V X1YzKTsKLQljYXNlIEFDUElfSU9SVF9OT0RFX1NNTVU6Ci0JCXJldHVybiBJU19CVUlMVElOKENP TkZJR19BUk1fU01NVSk7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigiSU9SVCBub2RlIHR5cGUgJXUg ZG9lcyBub3QgZGVzY3JpYmUgYW4gU01NVVxuIiwgdHlwZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9 Ci19Ci0KLSNpZmRlZiBDT05GSUdfSU9NTVVfQVBJCiBzdGF0aWMgaW5saW5lCiBjb25zdCBzdHJ1 Y3QgaW9tbXVfb3BzICppb3J0X2Z3c3BlY19pb21tdV9vcHMoc3RydWN0IGlvbW11X2Z3c3BlYyAq ZndzcGVjKQogewogCXJldHVybiAoZndzcGVjICYmIGZ3c3BlYy0+b3BzKSA/IGZ3c3BlYy0+b3Bz IDogTlVMTDsKIH0KIAotc3RhdGljIGlubGluZQotaW50IGlvcnRfYWRkX2RldmljZV9yZXBsYXko Y29uc3Qgc3RydWN0IGlvbW11X29wcyAqb3BzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50 IGVyciA9IDA7Ci0KLQlpZiAob3BzLT5hZGRfZGV2aWNlICYmIGRldi0+YnVzICYmICFkZXYtPmlv bW11X2dyb3VwKQotCQllcnIgPSBvcHMtPmFkZF9kZXZpY2UoZGV2KTsKLQotCXJldHVybiBlcnI7 Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZQotY29uc3Qgc3RydWN0IGlvbW11X29wcyAqaW9ydF9m d3NwZWNfaW9tbXVfb3BzKHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYykKLXsgcmV0dXJuIE5V TEw7IH0KLXN0YXRpYyBpbmxpbmUKLWludCBpb3J0X2FkZF9kZXZpY2VfcmVwbGF5KGNvbnN0IHN0 cnVjdCBpb21tdV9vcHMgKm9wcywgc3RydWN0IGRldmljZSAqZGV2KQoteyByZXR1cm4gMDsgfQot I2VuZGlmCi0KIHN0YXRpYyBpbnQgaW9ydF9pb21tdV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSwKIAkJCSAgICB1MzIgc3RyZWFtaWQpCiB7CkBA IC02NzAsOSArMjQ4LDkgQEAgc3RhdGljIGludCBpb3J0X2lvbW11X3hsYXRlKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlLAogCSAqIG9yIGp1c3QgYWJvcnQg aXQuCiAJICovCiAJb3BzID0gaW9tbXVfb3BzX2Zyb21fZndub2RlKGlvcnRfZndub2RlKTsKLQlp ZiAoIW9wcykKLQkJcmV0dXJuIGlvcnRfaW9tbXVfZHJpdmVyX2VuYWJsZWQobm9kZS0+dHlwZSkg PwotCQkgICAgICAgLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CisJaWYgKCFvcHMpIHsKKwkJcmV0 dXJuIC0xOworICAgICAgICB9CiAKIAlyZXR1cm4gYXJtX3NtbXVfaW9ydF94bGF0ZShkZXYsIHN0 cmVhbWlkLCBpb3J0X2Z3bm9kZSwgb3BzKTsKIH0KQEAgLTY4NSw4OSArMjYzLDE5IEBAIHN0cnVj dCBpb3J0X3BjaV9hbGlhc19pbmZvIHsKIHN0YXRpYyBpbnQgaW9ydF9wY2lfaW9tbXVfaW5pdChz dHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IGFsaWFzLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBp b3J0X3BjaV9hbGlhc19pbmZvICppbmZvID0gZGF0YTsKLQlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUg KnBhcmVudDsKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKnNtbXVfbm9kZTsKIAl1MzIgc3RyZWFt aWQ7CiAKLQlwYXJlbnQgPSBpb3J0X25vZGVfbWFwX2lkKGluZm8tPm5vZGUsIGFsaWFzLCAmc3Ry ZWFtaWQsCi0JCQkJICBJT1JUX0lPTU1VX1RZUEUpOwotCXJldHVybiBpb3J0X2lvbW11X3hsYXRl KGluZm8tPmRldiwgcGFyZW50LCBzdHJlYW1pZCk7CisJcXVlcnlfc3RyZWFtaWQoaW5mby0+bm9k ZSwgYWxpYXMsICZzdHJlYW1pZCwgJnNtbXVfbm9kZSk7CisJcmV0dXJuIGlvcnRfaW9tbXVfeGxh dGUoaW5mby0+ZGV2LCBzbW11X25vZGUsIHN0cmVhbWlkKTsKIH0KIAotc3RhdGljIGludCBuY19k bWFfZ2V0X3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0ICpzaXplKQoraW50IHBjaV9mb3Jf ZWFjaF9kbWFfYWxpYXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICBpbnQgKCpmbikoc3Ry dWN0IHBjaV9kZXYgKnBkZXYsCisJCSAgICAgICAgICAgdTE2IGFsaWFzLCB2b2lkICpkYXRhKSwg dm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGFj cGlfaW9ydF9uYW1lZF9jb21wb25lbnQgKm5jb21wOwotCi0Jbm9kZSA9IGlvcnRfc2Nhbl9ub2Rl KEFDUElfSU9SVF9OT0RFX05BTUVEX0NPTVBPTkVOVCwKLQkJCSAgICAgIGlvcnRfbWF0Y2hfbm9k ZV9jYWxsYmFjaywgZGV2KTsKLQlpZiAoIW5vZGUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbmNv bXAgPSAoc3RydWN0IGFjcGlfaW9ydF9uYW1lZF9jb21wb25lbnQgKilub2RlLT5ub2RlX2RhdGE7 Ci0KLQkqc2l6ZSA9IG5jb21wLT5tZW1vcnlfYWRkcmVzc19saW1pdCA+PSA2NCA/IFU2NF9NQVgg OgotCQkJMVVMTDw8bmNvbXAtPm1lbW9yeV9hZGRyZXNzX2xpbWl0OwotCi0JcmV0dXJuIDA7Ci19 Ci0KLS8qKgotICogaW9ydF9kbWFfc2V0dXAoKSAtIFNldC11cCBkZXZpY2UgRE1BIHBhcmFtZXRl cnMuCi0gKgotICogQGRldjogZGV2aWNlIHRvIGNvbmZpZ3VyZQotICogQGRtYV9hZGRyOiBkZXZp Y2UgRE1BIGFkZHJlc3MgcmVzdWx0IHBvaW50ZXIKLSAqIEBzaXplOiBETUEgcmFuZ2Ugc2l6ZSBy ZXN1bHQgcG9pbnRlcgotICovCi12b2lkIGlvcnRfZG1hX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRl diwgdTY0ICpkbWFfYWRkciwgdTY0ICpkbWFfc2l6ZSkKLXsKLQl1NjQgbWFzaywgZG1hYWRkciA9 IDAsIHNpemUgPSAwLCBvZmZzZXQgPSAwOwotCWludCByZXQsIG1zYjsKLQotCS8qCi0JICogU2V0 IGRlZmF1bHQgY29oZXJlbnRfZG1hX21hc2sgdG8gMzIgYml0LiAgRHJpdmVycyBhcmUgZXhwZWN0 ZWQgdG8KLQkgKiBzZXR1cCB0aGUgY29ycmVjdCBzdXBwb3J0ZWQgbWFzay4KLQkgKi8KLQlpZiAo IWRldi0+Y29oZXJlbnRfZG1hX21hc2spCi0JCWRldi0+Y29oZXJlbnRfZG1hX21hc2sgPSBETUFf QklUX01BU0soMzIpOwotCi0JLyoKLQkgKiBTZXQgaXQgdG8gY29oZXJlbnRfZG1hX21hc2sgYnkg ZGVmYXVsdCBpZiB0aGUgYXJjaGl0ZWN0dXJlCi0JICogY29kZSBoYXMgbm90IHNldCBpdC4KLQkg Ki8KLQlpZiAoIWRldi0+ZG1hX21hc2spCi0JCWRldi0+ZG1hX21hc2sgPSAmZGV2LT5jb2hlcmVu dF9kbWFfbWFzazsKLQotCXNpemUgPSBtYXgoZGV2LT5jb2hlcmVudF9kbWFfbWFzaywgZGV2LT5j b2hlcmVudF9kbWFfbWFzayArIDEpOwotCi0JaWYgKGRldl9pc19wY2koZGV2KSkKLQkJcmV0ID0g YWNwaV9kbWFfZ2V0X3JhbmdlKGRldiwgJmRtYWFkZHIsICZvZmZzZXQsICZzaXplKTsKLQllbHNl Ci0JCXJldCA9IG5jX2RtYV9nZXRfcmFuZ2UoZGV2LCAmc2l6ZSk7Ci0KLQlpZiAoIXJldCkgewot CQltc2IgPSBmbHM2NChkbWFhZGRyICsgc2l6ZSAtIDEpOwotCQkvKgotCQkgKiBSb3VuZC11cCB0 byB0aGUgcG93ZXItb2YtdHdvIG1hc2sgb3Igc2V0Ci0JCSAqIHRoZSBtYXNrIHRvIHRoZSB3aG9s ZSA2NC1iaXQgYWRkcmVzcyBzcGFjZQotCQkgKiBpbiBjYXNlIHRoZSBETUEgcmVnaW9uIGNvdmVy cyB0aGUgZnVsbAotCQkgKiBtZW1vcnkgd2luZG93LgotCQkgKi8KLQkJbWFzayA9IG1zYiA9PSA2 NCA/IFU2NF9NQVggOiAoMVVMTCA8PCBtc2IpIC0gMTsKLQkJLyoKLQkJICogTGltaXQgY29oZXJl bnQgYW5kIGRtYSBtYXNrIGJhc2VkIG9uIHNpemUKLQkJICogcmV0cmlldmVkIGZyb20gZmlybXdh cmUuCi0JCSAqLwotCQlkZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gbWFzazsKLQkJKmRldi0+ZG1h X21hc2sgPSBtYXNrOwotCX0KLQotCSpkbWFfYWRkciA9IGRtYWFkZHI7Ci0JKmRtYV9zaXplID0g c2l6ZTsKLQotCWRldi0+ZG1hX3Bmbl9vZmZzZXQgPSBQRk5fRE9XTihvZmZzZXQpOwotCWRldl9k YmcoZGV2LCAiZG1hX3Bmbl9vZmZzZXQoJSMwOGxseClcbiIsIG9mZnNldCk7CisJcmV0dXJuIGZu KHBkZXYsIFBDSV9CREYyKHBkZXYtPmJ1cywgcGRldi0+ZGV2Zm4pLCBkYXRhKTsKIH0KLQogLyoq CiAgKiBpb3J0X2lvbW11X2NvbmZpZ3VyZSAtIFNldC11cCBJT01NVSBjb25maWd1cmF0aW9uIGZv ciBhIGRldmljZS4KICAqCkBAIC03NzgsOSArMjg2LDggQEAgdm9pZCBpb3J0X2RtYV9zZXR1cChz dHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCAqZG1hX2FkZHIsIHU2NCAqZG1hX3NpemUpCiAgKi8KIGNv bnN0IHN0cnVjdCBpb21tdV9vcHMgKmlvcnRfaW9tbXVfY29uZmlndXJlKHN0cnVjdCBkZXZpY2Ug KmRldikKIHsKLQlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUsICpwYXJlbnQ7CisJc3RydWN0 IGFjcGlfaW9ydF9ub2RlICpub2RlOwogCWNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wczsKLQl1 MzIgc3RyZWFtaWQgPSAwOwogCWludCBlcnIgPSAtRU5PREVWOwogCiAJLyoKQEAgLTc5Miw0NzIg KzI5OSw1OCBAQCBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzICppb3J0X2lvbW11X2NvbmZpZ3VyZShz dHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXJldHVybiBvcHM7CiAKIAlpZiAoZGV2X2lzX3BjaShkZXYp KSB7Ci0JCXN0cnVjdCBwY2lfYnVzICpidXMgPSB0b19wY2lfZGV2KGRldiktPmJ1czsKIAkJc3Ry dWN0IGlvcnRfcGNpX2FsaWFzX2luZm8gaW5mbyA9IHsgLmRldiA9IGRldiB9OwotCiAJCW5vZGUg PSBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9QQ0lfUk9PVF9DT01QTEVYLAotCQkJCSAg ICAgIGlvcnRfbWF0Y2hfbm9kZV9jYWxsYmFjaywgJmJ1cy0+ZGV2KTsKKwkJCQkgICAgICBpb3J0 X21hdGNoX25vZGVfY2FsbGJhY2ssIGRldik7CiAJCWlmICghbm9kZSkKIAkJCXJldHVybiBOVUxM OwotCiAJCWluZm8ubm9kZSA9IG5vZGU7CiAJCWVyciA9IHBjaV9mb3JfZWFjaF9kbWFfYWxpYXMo dG9fcGNpX2RldihkZXYpLAogCQkJCQkgICAgIGlvcnRfcGNpX2lvbW11X2luaXQsICZpbmZvKTsK LQl9IGVsc2UgewotCQlpbnQgaSA9IDA7Ci0KLQkJbm9kZSA9IGlvcnRfc2Nhbl9ub2RlKEFDUElf SU9SVF9OT0RFX05BTUVEX0NPTVBPTkVOVCwKLQkJCQkgICAgICBpb3J0X21hdGNoX25vZGVfY2Fs bGJhY2ssIGRldik7Ci0JCWlmICghbm9kZSkKLQkJCXJldHVybiBOVUxMOwotCi0JCWRvIHsKLQkJ CXBhcmVudCA9IGlvcnRfbm9kZV9tYXBfcGxhdGZvcm1faWQobm9kZSwgJnN0cmVhbWlkLAotCQkJ CQkJCSAgIElPUlRfSU9NTVVfVFlQRSwKLQkJCQkJCQkgICBpKyspOwotCi0JCQlpZiAocGFyZW50 KQotCQkJCWVyciA9IGlvcnRfaW9tbXVfeGxhdGUoZGV2LCBwYXJlbnQsIHN0cmVhbWlkKTsKLQkJ fSB3aGlsZSAocGFyZW50ICYmICFlcnIpOwotCX0KLQotCS8qCi0JICogSWYgd2UgaGF2ZSByZWFz b24gdG8gYmVsaWV2ZSB0aGUgSU9NTVUgZHJpdmVyIG1pc3NlZCB0aGUgaW5pdGlhbAotCSAqIGFk ZF9kZXZpY2UgY2FsbGJhY2sgZm9yIGRldiwgcmVwbGF5IGl0IHRvIGdldCB0aGluZ3MgaW4gb3Jk ZXIuCi0JICovCi0JaWYgKCFlcnIpIHsKLQkJb3BzID0gaW9ydF9md3NwZWNfaW9tbXVfb3BzKGRl di0+aW9tbXVfZndzcGVjKTsKLQkJZXJyID0gaW9ydF9hZGRfZGV2aWNlX3JlcGxheShvcHMsIGRl dik7CiAJfQotCi0JLyogSWdub3JlIGFsbCBvdGhlciBlcnJvcnMgYXBhcnQgZnJvbSBFUFJPQkVf REVGRVIgKi8KLQlpZiAoZXJyID09IC1FUFJPQkVfREVGRVIpIHsKLQkJb3BzID0gRVJSX1BUUihl cnIpOwotCX0gZWxzZSBpZiAoZXJyKSB7Ci0JCWRldl9kYmcoZGV2LCAiQWRkaW5nIHRvIElPTU1V IGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCW9wcyA9IE5VTEw7Ci0JfQotCiAJcmV0dXJuIG9wczsK IH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFjcGlfaW9ydF9yZWdpc3Rlcl9pcnEoaW50IGh3aXJx LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgIGludCB0cmlnZ2VyLAotCQkJCQkgIHN0cnVjdCBy ZXNvdXJjZSAqcmVzKQotewotCWludCBpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxMLCBod2ly cSwgdHJpZ2dlciwKLQkJCQkgICAgQUNQSV9BQ1RJVkVfSElHSCk7Ci0KLQlpZiAoaXJxIDw9IDAp IHsKLQkJcHJfZXJyKCJjb3VsZCBub3QgcmVnaXN0ZXIgZ3NpIGh3aXJxICVkIG5hbWUgWyVzXVxu IiwgaHdpcnEsCi0JCQkJCQkJCSAgICAgIG5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JcmVzLT5z dGFydCA9IGlycTsKLQlyZXMtPmVuZCA9IGlycTsKLQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9J UlE7Ci0JcmVzLT5uYW1lID0gbmFtZTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYXJtX3NtbXVf djNfY291bnRfcmVzb3VyY2VzKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1 Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKnNtbXU7Ci0JLyogQWx3YXlzIHByZXNlbnQgbWVtIHJlc291 cmNlICovCi0JaW50IG51bV9yZXMgPSAxOwotCi0JLyogUmV0cmlldmUgU01NVXYzIHNwZWNpZmlj IGRhdGEgKi8KLQlzbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKW5vZGUtPm5vZGVf ZGF0YTsKLQotCWlmIChzbW11LT5ldmVudF9nc2l2KQotCQludW1fcmVzKys7Ci0KLQlpZiAoc21t dS0+cHJpX2dzaXYpCi0JCW51bV9yZXMrKzsKLQotCWlmIChzbW11LT5nZXJyX2dzaXYpCi0JCW51 bV9yZXMrKzsKLQotCWlmIChzbW11LT5zeW5jX2dzaXYpCi0JCW51bV9yZXMrKzsKLQotCXJldHVy biBudW1fcmVzOwotfQotCi1zdGF0aWMgYm9vbCBhcm1fc21tdV92M19pc19jb21iaW5lZF9pcnEo c3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICpzbW11KQotewotCS8qCi0JICogQ2F2aXVtIFRodW5k ZXJYMiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG5vdCBzdXBwb3J0IHVuaXF1ZQotCSAqIGlycSBs aW5lLiBVc2Ugc2luZ2xlIGlycSBsaW5lIGZvciBhbGwgdGhlIFNNTVV2MyBpbnRlcnJ1cHRzLgot CSAqLwotCWlmIChzbW11LT5tb2RlbCAhPSBBQ1BJX0lPUlRfU01NVV9WM19DQVZJVU1fQ045OVhY KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKgotCSAqIFRodW5kZXJYMiBkb2Vzbid0IHN1cHBvcnQg TVNJcyBmcm9tIHRoZSBTTU1VLCBzbyB3ZSdyZSBjaGVja2luZwotCSAqIFNQSSBudW1iZXJzIGhl cmUuCi0JICovCi0JcmV0dXJuIHNtbXUtPmV2ZW50X2dzaXYgPT0gc21tdS0+cHJpX2dzaXYgJiYK LQkgICAgICAgc21tdS0+ZXZlbnRfZ3NpdiA9PSBzbW11LT5nZXJyX2dzaXYgJiYKLQkgICAgICAg c21tdS0+ZXZlbnRfZ3NpdiA9PSBzbW11LT5zeW5jX2dzaXY7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l ZCBsb25nIGFybV9zbW11X3YzX3Jlc291cmNlX3NpemUoc3RydWN0IGFjcGlfaW9ydF9zbW11X3Yz ICpzbW11KQotewotCS8qCi0JICogT3ZlcnJpZGUgdGhlIHNpemUsIGZvciBDYXZpdW0gVGh1bmRl clgyIGltcGxlbWVudGF0aW9uCi0JICogd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoZSBwYWdlIDEg U01NVSByZWdpc3RlciBzcGFjZS4KLQkgKi8KLQlpZiAoc21tdS0+bW9kZWwgPT0gQUNQSV9JT1JU X1NNTVVfVjNfQ0FWSVVNX0NOOTlYWCkKLQkJcmV0dXJuIFNaXzY0SzsKLQotCXJldHVybiBTWl8x MjhLOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYXJtX3NtbXVfdjNfaW5pdF9yZXNvdXJjZXMo c3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkJCSAgICAgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAq bm9kZSkKLXsKLQlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKnNtbXU7Ci0JaW50IG51bV9yZXMg PSAwOwotCi0JLyogUmV0cmlldmUgU01NVXYzIHNwZWNpZmljIGRhdGEgKi8KLQlzbW11ID0gKHN0 cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKW5vZGUtPm5vZGVfZGF0YTsKLQotCXJlc1tudW1fcmVz XS5zdGFydCA9IHNtbXUtPmJhc2VfYWRkcmVzczsKLQlyZXNbbnVtX3Jlc10uZW5kID0gc21tdS0+ YmFzZV9hZGRyZXNzICsKLQkJCQlhcm1fc21tdV92M19yZXNvdXJjZV9zaXplKHNtbXUpIC0gMTsK LQlyZXNbbnVtX3Jlc10uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQotCW51bV9yZXMrKzsKLQlp ZiAoYXJtX3NtbXVfdjNfaXNfY29tYmluZWRfaXJxKHNtbXUpKSB7Ci0JCWlmIChzbW11LT5ldmVu dF9nc2l2KQotCQkJYWNwaV9pb3J0X3JlZ2lzdGVyX2lycShzbW11LT5ldmVudF9nc2l2LCAiY29t YmluZWQiLAotCQkJCQkgICAgICAgQUNQSV9FREdFX1NFTlNJVElWRSwKLQkJCQkJICAgICAgICZy ZXNbbnVtX3JlcysrXSk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoc21tdS0+ZXZlbnRfZ3NpdikKLQkJ CWFjcGlfaW9ydF9yZWdpc3Rlcl9pcnEoc21tdS0+ZXZlbnRfZ3NpdiwgImV2ZW50cSIsCi0JCQkJ CSAgICAgICBBQ1BJX0VER0VfU0VOU0lUSVZFLAotCQkJCQkgICAgICAgJnJlc1tudW1fcmVzKytd KTsKLQotCQlpZiAoc21tdS0+cHJpX2dzaXYpCi0JCQlhY3BpX2lvcnRfcmVnaXN0ZXJfaXJxKHNt bXUtPnByaV9nc2l2LCAicHJpcSIsCi0JCQkJCSAgICAgICBBQ1BJX0VER0VfU0VOU0lUSVZFLAot CQkJCQkgICAgICAgJnJlc1tudW1fcmVzKytdKTsKLQotCQlpZiAoc21tdS0+Z2Vycl9nc2l2KQot CQkJYWNwaV9pb3J0X3JlZ2lzdGVyX2lycShzbW11LT5nZXJyX2dzaXYsICJnZXJyb3IiLAotCQkJ CQkgICAgICAgQUNQSV9FREdFX1NFTlNJVElWRSwKLQkJCQkJICAgICAgICZyZXNbbnVtX3Jlcysr XSk7Ci0KLQkJaWYgKHNtbXUtPnN5bmNfZ3NpdikKLQkJCWFjcGlfaW9ydF9yZWdpc3Rlcl9pcnEo c21tdS0+c3luY19nc2l2LCAiY21kcS1zeW5jIiwKLQkJCQkJICAgICAgIEFDUElfRURHRV9TRU5T SVRJVkUsCi0JCQkJCSAgICAgICAmcmVzW251bV9yZXMrK10pOwotCX0KLX0KLQotc3RhdGljIGJv b2wgX19pbml0IGFybV9zbW11X3YzX2lzX2NvaGVyZW50KHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAq bm9kZSkKLXsKLQlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKnNtbXU7Ci0KLQkvKiBSZXRyaWV2 ZSBTTU1VdjMgc3BlY2lmaWMgZGF0YSAqLwotCXNtbXUgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11 X3YzICopbm9kZS0+bm9kZV9kYXRhOwotCi0JcmV0dXJuIHNtbXUtPmZsYWdzICYgQUNQSV9JT1JU X1NNTVVfVjNfQ09IQUNDX09WRVJSSURFOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQUNQSV9O VU1BKSAmJiBkZWZpbmVkKEFDUElfSU9SVF9TTU1VX1YzX1BYTV9WQUxJRCkKLS8qCi0gKiBzZXQg bnVtYSBwcm94aW1pdHkgZG9tYWluIGZvciBzbW11djMgZGV2aWNlCi0gKi8KLXN0YXRpYyB2b2lk ICBfX2luaXQgYXJtX3NtbXVfdjNfc2V0X3Byb3hpbWl0eShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0J CQkJCSAgICAgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgYWNwaV9p b3J0X3NtbXVfdjMgKnNtbXU7Ci0KLQlzbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAq KW5vZGUtPm5vZGVfZGF0YTsKLQlpZiAoc21tdS0+ZmxhZ3MgJiBBQ1BJX0lPUlRfU01NVV9WM19Q WE1fVkFMSUQpIHsKLQkJc2V0X2Rldl9ub2RlKGRldiwgYWNwaV9tYXBfcHhtX3RvX25vZGUoc21t dS0+cHhtKSk7Ci0JCXByX2luZm8oIlNNTVUtdjNbJWxseF0gTWFwcGVkIHRvIFByb3hpbWl0eSBk b21haW4gJWRcbiIsCi0JCQlzbW11LT5iYXNlX2FkZHJlc3MsCi0JCQlzbW11LT5weG0pOwotCX0K LX0KLSNlbHNlCi0jZGVmaW5lIGFybV9zbW11X3YzX3NldF9wcm94aW1pdHkgTlVMTAotI2VuZGlm Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFybV9zbW11X2NvdW50X3Jlc291cmNlcyhzdHJ1Y3QgYWNw aV9pb3J0X25vZGUgKm5vZGUpCi17Ci0Jc3RydWN0IGFjcGlfaW9ydF9zbW11ICpzbW11OwotCi0J LyogUmV0cmlldmUgU01NVSBzcGVjaWZpYyBkYXRhICovCi0Jc21tdSA9IChzdHJ1Y3QgYWNwaV9p b3J0X3NtbXUgKilub2RlLT5ub2RlX2RhdGE7Ci0KLQkvKgotCSAqIE9ubHkgY29uc2lkZXIgdGhl IGdsb2JhbCBmYXVsdCBpbnRlcnJ1cHQgYW5kIGlnbm9yZSB0aGUKLQkgKiBjb25maWd1cmF0aW9u IGFjY2VzcyBpbnRlcnJ1cHQuCi0JICoKLQkgKiBNTUlPIGFkZHJlc3MgYW5kIGdsb2JhbCBmYXVs dCBpbnRlcnJ1cHQgcmVzb3VyY2VzIGFyZSBhbHdheXMKLQkgKiBwcmVzZW50IHNvIGFkZCB0aGVt IHRvIHRoZSBjb250ZXh0IGludGVycnVwdCBjb3VudCBhcyBhIHN0YXRpYwotCSAqIHZhbHVlLgot CSAqLwotCXJldHVybiBzbW11LT5jb250ZXh0X2ludGVycnVwdF9jb3VudCArIDI7Ci19Ci0KLXN0 YXRpYyB2b2lkIF9faW5pdCBhcm1fc21tdV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2Ug KnJlcywKLQkJCQkJICAgc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKQotewotCXN0cnVjdCBh Y3BpX2lvcnRfc21tdSAqc21tdTsKLQlpbnQgaSwgaHdfaXJxLCB0cmlnZ2VyLCBudW1fcmVzID0g MDsKLQl1NjQgKmN0eF9pcnEsICpnbGJfaXJxOwotCi0JLyogUmV0cmlldmUgU01NVSBzcGVjaWZp YyBkYXRhICovCi0Jc21tdSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXUgKilub2RlLT5ub2RlX2Rh dGE7Ci0KLQlyZXNbbnVtX3Jlc10uc3RhcnQgPSBzbW11LT5iYXNlX2FkZHJlc3M7Ci0JcmVzW251 bV9yZXNdLmVuZCA9IHNtbXUtPmJhc2VfYWRkcmVzcyArIHNtbXUtPnNwYW4gLSAxOwotCXJlc1tu dW1fcmVzXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCW51bV9yZXMrKzsKLQotCWdsYl9pcnEg PSBBQ1BJX0FERF9QVFIodTY0LCBub2RlLCBzbW11LT5nbG9iYWxfaW50ZXJydXB0X29mZnNldCk7 Ci0JLyogR2xvYmFsIElSUXMgKi8KLQlod19pcnEgPSBJT1JUX0lSUV9NQVNLKGdsYl9pcnFbMF0p OwotCXRyaWdnZXIgPSBJT1JUX0lSUV9UUklHR0VSX01BU0soZ2xiX2lycVswXSk7Ci0KLQlhY3Bp X2lvcnRfcmVnaXN0ZXJfaXJxKGh3X2lycSwgImFybS1zbW11LWdsb2JhbCIsIHRyaWdnZXIsCi0J CQkJICAgICAmcmVzW251bV9yZXMrK10pOwotCi0JLyogQ29udGV4dCBJUlFzICovCi0JY3R4X2ly cSA9IEFDUElfQUREX1BUUih1NjQsIG5vZGUsIHNtbXUtPmNvbnRleHRfaW50ZXJydXB0X29mZnNl dCk7Ci0JZm9yIChpID0gMDsgaSA8IHNtbXUtPmNvbnRleHRfaW50ZXJydXB0X2NvdW50OyBpKysp IHsKLQkJaHdfaXJxID0gSU9SVF9JUlFfTUFTSyhjdHhfaXJxW2ldKTsKLQkJdHJpZ2dlciA9IElP UlRfSVJRX1RSSUdHRVJfTUFTSyhjdHhfaXJxW2ldKTsKLQotCQlhY3BpX2lvcnRfcmVnaXN0ZXJf aXJxKGh3X2lycSwgImFybS1zbW11LWNvbnRleHQiLCB0cmlnZ2VyLAotCQkJCSAgICAgICAmcmVz W251bV9yZXMrK10pOwotCX0KLX0KLQotc3RhdGljIGJvb2wgX19pbml0IGFybV9zbW11X2lzX2Nv aGVyZW50KHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgYWNwaV9pb3J0 X3NtbXUgKnNtbXU7Ci0KLQkvKiBSZXRyaWV2ZSBTTU1VIHNwZWNpZmljIGRhdGEgKi8KLQlzbW11 ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdSAqKW5vZGUtPm5vZGVfZGF0YTsKLQotCXJldHVybiBz bW11LT5mbGFncyAmIEFDUElfSU9SVF9TTU1VX0NPSEVSRU5UX1dBTEs7Ci19Ci0KLXN0cnVjdCBp b3J0X2lvbW11X2NvbmZpZyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgKCppb21tdV9pbml0 KShzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUpOwotCWJvb2wgKCppb21tdV9pc19jb2hlcmVu dCkoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKTsKLQlpbnQgKCppb21tdV9jb3VudF9yZXNv dXJjZXMpKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSk7Ci0Jdm9pZCAoKmlvbW11X2luaXRf cmVzb3VyY2VzKShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCQkgICAgIHN0cnVjdCBhY3BpX2lv cnRfbm9kZSAqbm9kZSk7Ci0Jdm9pZCAoKmlvbW11X3NldF9wcm94aW1pdHkpKHN0cnVjdCBkZXZp Y2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKTsKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgaW9ydF9pb21tdV9jb25maWcgaW9ydF9hcm1fc21tdV92M19jZmcg X19pbml0Y29uc3QgPSB7Ci0JLm5hbWUgPSAiYXJtLXNtbXUtdjMiLAotCS5pb21tdV9pc19jb2hl cmVudCA9IGFybV9zbW11X3YzX2lzX2NvaGVyZW50LAotCS5pb21tdV9jb3VudF9yZXNvdXJjZXMg PSBhcm1fc21tdV92M19jb3VudF9yZXNvdXJjZXMsCi0JLmlvbW11X2luaXRfcmVzb3VyY2VzID0g YXJtX3NtbXVfdjNfaW5pdF9yZXNvdXJjZXMsCi0JLmlvbW11X3NldF9wcm94aW1pdHkgPSBhcm1f c21tdV92M19zZXRfcHJveGltaXR5LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpb3J0X2lv bW11X2NvbmZpZyBpb3J0X2FybV9zbW11X2NmZyBfX2luaXRjb25zdCA9IHsKLQkubmFtZSA9ICJh cm0tc21tdSIsCi0JLmlvbW11X2lzX2NvaGVyZW50ID0gYXJtX3NtbXVfaXNfY29oZXJlbnQsCi0J LmlvbW11X2NvdW50X3Jlc291cmNlcyA9IGFybV9zbW11X2NvdW50X3Jlc291cmNlcywKLQkuaW9t bXVfaW5pdF9yZXNvdXJjZXMgPSBhcm1fc21tdV9pbml0X3Jlc291cmNlcwotfTsKLQotc3RhdGlj IF9faW5pdAotY29uc3Qgc3RydWN0IGlvcnRfaW9tbXVfY29uZmlnICppb3J0X2dldF9pb21tdV9j Zmcoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKQotewotCXN3aXRjaCAobm9kZS0+dHlwZSkg ewotCWNhc2UgQUNQSV9JT1JUX05PREVfU01NVV9WMzoKLQkJcmV0dXJuICZpb3J0X2FybV9zbW11 X3YzX2NmZzsKLQljYXNlIEFDUElfSU9SVF9OT0RFX1NNTVU6Ci0JCXJldHVybiAmaW9ydF9hcm1f c21tdV9jZmc7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotCi0vKioKLSAqIGlv cnRfYWRkX3NtbXVfcGxhdGZvcm1fZGV2aWNlKCkgLSBBbGxvY2F0ZSBhIHBsYXRmb3JtIGRldmlj ZSBmb3IgU01NVQotICogQG5vZGU6IFBvaW50ZXIgdG8gU01NVSBBQ1BJIElPUlQgbm9kZQotICoK LSAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgPDAgZmFpbHVyZQotICovCiBzdGF0aWMgaW50IF9f aW5pdCBpb3J0X2FkZF9zbW11X3BsYXRmb3JtX2RldmljZShzdHJ1Y3QgYWNwaV9pb3J0X25vZGUg Km5vZGUpCiB7CisJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBmd25vZGVfaGFuZGxlICpm d25vZGU7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcmVzb3VyY2Ug KnI7Ci0JZW51bSBkZXZfZG1hX2F0dHIgYXR0cjsKLQlpbnQgcmV0LCBjb3VudDsKLQljb25zdCBz dHJ1Y3QgaW9ydF9pb21tdV9jb25maWcgKm9wcyA9IGlvcnRfZ2V0X2lvbW11X2NmZyhub2RlKTsK KwlpbnQgcmV0OwogCi0JaWYgKCFvcHMpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcGRldiA9IHBs YXRmb3JtX2RldmljZV9hbGxvYyhvcHMtPm5hbWUsIFBMQVRGT1JNX0RFVklEX0FVVE8pOwotCWlm ICghcGRldikKKwlkZXYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGRldmljZSksIEdGUF9LRVJO RUwpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChvcHMtPmlvbW11X3Nl dF9wcm94aW1pdHkpCi0JCW9wcy0+aW9tbXVfc2V0X3Byb3hpbWl0eSgmcGRldi0+ZGV2LCBub2Rl KTsKLQotCWNvdW50ID0gb3BzLT5pb21tdV9jb3VudF9yZXNvdXJjZXMobm9kZSk7Ci0KLQlyID0g a2NhbGxvYyhjb3VudCwgc2l6ZW9mKCpyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyKSB7Ci0JCXJl dCA9IC1FTk9NRU07Ci0JCWdvdG8gZGV2X3B1dDsKLQl9Ci0KLQlvcHMtPmlvbW11X2luaXRfcmVz b3VyY2VzKHIsIG5vZGUpOwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMo cGRldiwgciwgY291bnQpOwotCS8qCi0JICogUmVzb3VyY2VzIGFyZSBkdXBsaWNhdGVkIGluIHBs YXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzLAotCSAqIGZyZWUgdGhlaXIgYWxsb2NhdGVkIG1l bW9yeQotCSAqLwotCWtmcmVlKHIpOwotCi0JaWYgKHJldCkKLQkJZ290byBkZXZfcHV0OwotCi0J LyoKLQkgKiBBZGQgYSBjb3B5IG9mIElPUlQgbm9kZSBwb2ludGVyIHRvIHBsYXRmb3JtX2RhdGEg dG8KLQkgKiBiZSB1c2VkIHRvIHJldHJpZXZlIElPUlQgZGF0YSBpbmZvcm1hdGlvbi4KLQkgKi8K LQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJm5vZGUsIHNpemVvZihub2Rl KSk7Ci0JaWYgKHJldCkKLQkJZ290byBkZXZfcHV0OwotCi0JLyoKLQkgKiBXZSBleHBlY3QgdGhl IGRtYSBtYXNrcyB0byBiZSBlcXVpdmFsZW50IGZvcgotCSAqIGFsbCBTTU1VcyBzZXQtdXBzCi0J ICovCi0JcGRldi0+ZGV2LmRtYV9tYXNrID0gJnBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzazsK KwlkZXYtPnR5cGUgPSBERVZfQUNQSTsKKwlkZXYtPmFjcGlfbm9kZSA9IG5vZGU7CiAKIAlmd25v ZGUgPSBpb3J0X2dldF9md25vZGUobm9kZSk7CiAKIAlpZiAoIWZ3bm9kZSkgewogCQlyZXQgPSAt RU5PREVWOwotCQlnb3RvIGRldl9wdXQ7CisJCWdvdG8gZW5kOwogCX0KIAotCXBkZXYtPmRldi5m d25vZGUgPSBmd25vZGU7Ci0KLQlhdHRyID0gb3BzLT5pb21tdV9pc19jb2hlcmVudChub2RlKSA/ Ci0JCQkgICAgIERFVl9ETUFfQ09IRVJFTlQgOiBERVZfRE1BX05PTl9DT0hFUkVOVDsKLQotCS8q IENvbmZpZ3VyZSBETUEgZm9yIHRoZSBwYWdlIHRhYmxlIHdhbGtlciAqLwotCWFjcGlfZG1hX2Nv bmZpZ3VyZSgmcGRldi0+ZGV2LCBhdHRyKTsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQo cGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBkbWFfZGVjb25maWd1cmU7Ci0KLQlyZXR1cm4gMDsK LQotZG1hX2RlY29uZmlndXJlOgotCWFjcGlfZG1hX2RlY29uZmlndXJlKCZwZGV2LT5kZXYpOwot ZGV2X3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwotCisJZGV2LT5md25vZGUgPSBm d25vZGU7CisJZGV2LT5pb21tdV9md3NwZWMgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGlvbW11 X2Z3c3BlYyksIEdGUF9LRVJORUwpOworCS8qIENhbGwgdGhlIGFjcGkgaW5pdCBmdW5jdGlvbnMg Zm9yIElPTU1VIGRldmljZXMgKi8KKwlyZXQgPSBhY3BpX2RldmljZV9pbml0KERFVklDRV9JT01N VSwgKHZvaWQgKikgZGV2LCBub2RlLT50eXBlKTsKK2VuZDoKIAlyZXR1cm4gcmV0OwogfQogCi1z dGF0aWMgYm9vbCBfX2luaXQgaW9ydF9lbmFibGVfYWNzKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAq aW9ydF9ub2RlKQotewotCWlmIChpb3J0X25vZGUtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVfUENJ X1JPT1RfQ09NUExFWCkgewotCQlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKnBhcmVudDsKLQkJc3Ry dWN0IGFjcGlfaW9ydF9pZF9tYXBwaW5nICptYXA7Ci0JCWludCBpOwotCi0JCW1hcCA9IEFDUElf QUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X2lkX21hcHBpbmcsIGlvcnRfbm9kZSwKLQkJCQkgICBp b3J0X25vZGUtPm1hcHBpbmdfb2Zmc2V0KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgaW9ydF9ub2Rl LT5tYXBwaW5nX2NvdW50OyBpKyssIG1hcCsrKSB7Ci0JCQlpZiAoIW1hcC0+b3V0cHV0X3JlZmVy ZW5jZSkKLQkJCQljb250aW51ZTsKLQotCQkJcGFyZW50ID0gQUNQSV9BRERfUFRSKHN0cnVjdCBh Y3BpX2lvcnRfbm9kZSwKLQkJCQkJaW9ydF90YWJsZSwgIG1hcC0+b3V0cHV0X3JlZmVyZW5jZSk7 Ci0JCQkvKgotCQkJICogSWYgd2UgZGV0ZWN0IGEgUkMtPlNNTVUgbWFwcGluZywgbWFrZSBzdXJl Ci0JCQkgKiB3ZSBlbmFibGUgQUNTIG9uIHRoZSBzeXN0ZW0uCi0JCQkgKi8KLQkJCWlmICgocGFy ZW50LT50eXBlID09IEFDUElfSU9SVF9OT0RFX1NNTVUpIHx8Ci0JCQkJKHBhcmVudC0+dHlwZSA9 PSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzKSkgewotCQkJCXBjaV9yZXF1ZXN0X2FjcygpOwotCQkJ CXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQogCi1zdGF0 aWMgdm9pZCBfX2luaXQgaW9ydF9pbml0X3BsYXRmb3JtX2RldmljZXModm9pZCkKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmFjcGlfYWxsb2NfZndub2RlX3N0YXRpYyh2b2lk KQogewotCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlLCAqaW9ydF9lbmQ7Ci0Jc3Ry dWN0IGFjcGlfdGFibGVfaW9ydCAqaW9ydDsKIAlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2Rl OwotCWludCBpLCByZXQ7Ci0JYm9vbCBhY3NfZW5hYmxlZCA9IGZhbHNlOwogCi0JLyoKLQkgKiBp b3J0X3RhYmxlIGFuZCBpb3J0IGJvdGggcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIElPUlQgdGFibGUs IGJ1dAotCSAqIGhhdmUgZGlmZmVyZW50IHN0cnVjdCB0eXBlcwotCSAqLwotCWlvcnQgPSAoc3Ry dWN0IGFjcGlfdGFibGVfaW9ydCAqKWlvcnRfdGFibGU7Ci0KLQkvKiBHZXQgdGhlIGZpcnN0IElP UlQgbm9kZSAqLwotCWlvcnRfbm9kZSA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUsIGlvcnQsCi0JCQkJIGlvcnQtPm5vZGVfb2Zmc2V0KTsKLQlpb3J0X2VuZCA9IEFDUElfQURE X1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnQsCi0JCQkJaW9ydF90YWJsZS0+bGVuZ3Ro KTsKLQotCWZvciAoaSA9IDA7IGkgPCBpb3J0LT5ub2RlX2NvdW50OyBpKyspIHsKLQkJaWYgKGlv cnRfbm9kZSA+PSBpb3J0X2VuZCkgewotCQkJcHJfZXJyKCJpb3J0IG5vZGUgcG9pbnRlciBvdmVy Zmxvd3MsIGJhZCB0YWJsZVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoIWFjc19lbmFi bGVkKQotCQkJYWNzX2VuYWJsZWQgPSBpb3J0X2VuYWJsZV9hY3MoaW9ydF9ub2RlKTsKLQotCQlp ZiAoKGlvcnRfbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9TTU1VKSB8fAotCQkJKGlvcnRf bm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzKSkgewotCi0JCQlmd25vZGUgPSBh Y3BpX2FsbG9jX2Z3bm9kZV9zdGF0aWMoKTsKLQkJCWlmICghZndub2RlKQotCQkJCXJldHVybjsK LQotCQkJaW9ydF9zZXRfZndub2RlKGlvcnRfbm9kZSwgZndub2RlKTsKKwlmd25vZGUgPSBremFs bG9jKHNpemVvZihzdHJ1Y3QgZndub2RlX2hhbmRsZSksIEdGUF9LRVJORUwpOworCWlmICghZndu b2RlKQorCQlyZXR1cm4gTlVMTDsKIAotCQkJcmV0ID0gaW9ydF9hZGRfc21tdV9wbGF0Zm9ybV9k ZXZpY2UoaW9ydF9ub2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlpb3J0X2RlbGV0ZV9md25vZGUo aW9ydF9ub2RlKTsKLQkJCQlhY3BpX2ZyZWVfZndub2RlX3N0YXRpYyhmd25vZGUpOwotCQkJCXJl dHVybjsKLQkJCX0KLQkJfQorCWZ3bm9kZS0+b3BzID0gJmFjcGlfc3RhdGljX2Z3bm9kZV9vcHM7 CiAKLQkJaW9ydF9ub2RlID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSwgaW9y dF9ub2RlLAotCQkJCQkgaW9ydF9ub2RlLT5sZW5ndGgpOwotCX0KKwlyZXR1cm4gZndub2RlOwog fQogCiB2b2lkIF9faW5pdCBhY3BpX2lvcnRfaW5pdCh2b2lkKQpAQCAtMTI2NSwxNSArMzU4LDEy IEBAIHZvaWQgX19pbml0IGFjcGlfaW9ydF9pbml0KHZvaWQpCiAJYWNwaV9zdGF0dXMgc3RhdHVz OwogCiAJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfSU9SVCwgMCwgJmlvcnRfdGFi bGUpOworCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWlmIChzdGF0dXMgIT0gQUVf Tk9UX0ZPVU5EKSB7CiAJCQljb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24o c3RhdHVzKTsKLQogCQkJcHJfZXJyKCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xuIiwgbXNnKTsK IAkJfQotCiAJCXJldHVybjsKIAl9Ci0KLQlpb3J0X2luaXRfcGxhdGZvcm1fZGV2aWNlcygpOwog fQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYWNwaS9hY3BpX2lvcnQuaCBiL3hlbi9pbmNsdWRl L2FjcGkvYWNwaV9pb3J0LmgKaW5kZXggOGQzZjBiZjgwMy4uNTU5MjI2YTMxMiAxMDA2NDQKLS0t IGEveGVuL2luY2x1ZGUvYWNwaS9hY3BpX2lvcnQuaAorKysgYi94ZW4vaW5jbHVkZS9hY3BpL2Fj cGlfaW9ydC5oCkBAIC0xOSw5ICsxOSw5IEBACiAjaWZuZGVmIF9fQUNQSV9JT1JUX0hfXwogI2Rl ZmluZSBfX0FDUElfSU9SVF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRl IDxsaW51eC9md25vZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KKyNpbmNsdWRl IDxhc20vZGV2aWNlLmg+CisjaW5jbHVkZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDx4ZW4vZndu b2RlLmg+CiAKICNkZWZpbmUgSU9SVF9JUlFfTUFTSyhpcnEpCQkoaXJxICYgMHhmZmZmZmZmZlVM TCkKICNkZWZpbmUgSU9SVF9JUlFfVFJJR0dFUl9NQVNLKGlycSkJKChpcnEgPj4gMzIpICYgMHhm ZmZmZmZmZlVMTCkKLS0gCjIuMTQuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by94ZW4tZGV2ZWw=