From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 3F9133850418 for ; Fri, 4 Dec 2020 14:16:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3F9133850418 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ChungLin_Tang@mentor.com IronPort-SDR: W5+qsV4UfEuj7vLe8k/nPGCIaR2RVsghPT4bqV3LlIgB+59+rZxseOmCgQkjLkBiVtmj0wnIdE RU04UTHbdQD1NGeyU4q792/vlqHF/4DbgYvYPtkBO8tBdk5gcdF0EZgwN1Tl0mJheVdSAoDbQ3 r/lI8EBzo8d/lqKxlwKAAiZtIj7ycys+E3FzrUl7b6JTgY5RsI98UitW6GJgBnG+9UT2fAXHzV ZiFe5lnkC64QKk+27hZRgoU14VSPEUL9dnWdssjJY649DzE2AwKLk6LOXEAIprTHRoPcgZqfMc kNM= X-IronPort-AV: E=Sophos;i="5.78,392,1599552000"; d="scan'208";a="55936761" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 04 Dec 2020 06:16:02 -0800 IronPort-SDR: thb9xXKq9qyySeHc3ueY3HE/Xo5XoEqppp3nFXpDnUWMJeGK3jF/hU6g+6LMZ/i6eWYvaOwYEo T4WCP7J1QISC34z977Rcs9xKfbcaaXJCc6PlCRqho1a/vLei9sEZkfX9RakA5c6wdcGwZAjinL JMxWXCsskpR2oDs4ZIO81YofdNWZh53cI93yecRpnC3BJY+Kfz91/4ml1xyAvl/zXuvpwQWmNY 2uuVDkBn/XUS3AQZKzmNLz6PwEggENlURKGEIRKE522BiYUonv7/pQhcCkbTkIZunjfwt6pyoU XOI= From: Chung-Lin Tang Subject: [PATCH, v2, OpenMP 5.0, libgomp] Structure element mapping for OpenMP 5.0 To: gcc-patches , Jakub Jelinek , Catherine Moore , Andrew Stubbs Message-ID: <12b667d2-09fe-0640-2622-c78ab0b52f87@codesourcery.com> Date: Fri, 4 Dec 2020 22:15:46 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------3DFD981472C4A9F2DE5DC58E" Content-Language: en-US X-ClientProxiedBy: svr-orw-mbx-01.mgc.mentorg.com (147.34.90.201) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_NUMSUBJECT, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Dec 2020 14:16:10 -0000 --------------3DFD981472C4A9F2DE5DC58E Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Jakub, this is a new version of the structure element mapping patch for OpenMP 5.0 requirement changes. This one uses the approach you've outlined in your concept patch [1], basically to use more special REFCOUNT_* values to mark them, and link following structure element splay_tree_keys back to the first key's refcount. [1] https://gcc.gnu.org/pipermail/gcc-patches/2020-October/557622.html Implementation notes of the attached patch: (1) This patch solves the 5.0 requirements of "not already incremented/decremented because of the effect of a map clause on the construct" by pulling in libgomp/hashtab.h and using htab_t as a pointer set. A "htab_t *refcount_set" is added in map/unmap routines to track the processing status of the uintptr_t* addresses of refcount fields in splay_tree_keys. * Currently this patch is using the same htab_create/htab_free routines like in task.c. I toyed with creating a 'htab_alloca' macro (allocating a fixed size htab) to speed things further, but decided to play it safer for the current patch. (2) Because of the use of pointer-to-refcounts as the basis, and structure element siblings all share a same refcount, uniform increment/decrement without repeating is also naturally achieved. (3) Because of the need to remove whole structure element sibling sequences out of context, it appears we need to mark the first/last of such a sequence. You'll see that the special REFCOUNT_* values have been expanded a bit more than your concept patch (at some point we should think about stop abusing it and add a proper flags word) (4) The new increment/decrement routines combine most of the new refcount_set lookup code with the refcount adjusting. For the decrement routine, "copy" and "removal" are now separate return values, since for structure element sequences, even when signalling "removal" you may still need to finish the "copy" work of following target_var_descs. (5) There are some re-organizing changes to oacc-parallel.c and oacc-mem.c, but most of the code that matters is in target.c. (6) New testcases have been added to reflect the cases discussed on omp-lang list. This patch has been tested for libgomp with no regressions on x86_64-linux with nvptx offloading. Since I submitted the first "v1" patch long ago, is this okay to be considered as committable now after approval? Thanks, Chung-Lin 2020-12-04 Chung-Lin Tang libgomp/ * hashtab.h (htab_clear): New function with initialization code factored out from... (htab_create): ...here, adjust to use htab_clear function. * libgomp.h (REFCOUNT_SPECIAL): New symbol to denote range of special refcount values, add comments. (REFCOUNT_INFINITY): Adjust definition to use REFCOUNT_SPECIAL. (REFCOUNT_LINK): Likewise. (REFCOUNT_STRUCTELEM): New special refcount range for structure element siblings. (REFCOUNT_STRUCTELEM_P): Macro for testing for structure element sibling maps. (REFCOUNT_STRUCTELEM_FLAG_FIRST): Flag to indicate first sibling. (REFCOUNT_STRUCTELEM_FLAG_LAST): Flag to indicate last sibling. (REFCOUNT_STRUCTELEM_FIRST_P): Macro to test _FIRST flag. (REFCOUNT_STRUCTELEM_LAST_P): Macro to test _LAST flag. (struct splay_tree_key_s): Add structelem_refcount and structelem_refcount_ptr fields into a union with dynamic_refcount. Add comments. (gomp_map_vars): Delete declaration. (gomp_map_vars_async): Likewise. (gomp_unmap_vars): Likewise. (gomp_unmap_vars_async): Likewise. (goacc_map_vars): New declaration. (goacc_unmap_vars): Likewise. * oacc-mem.c (acc_map_data): Adjust to use goacc_map_vars. (goacc_enter_datum): Likewise. (goacc_enter_data_internal): Likewise. * oacc-parallel.c (GOACC_parallel_keyed): Adjust to use goacc_map_vars and goacc_unmap_vars. (GOACC_data_start): Adjust to use goacc_map_vars. (GOACC_data_end): Adjust to use goacc_unmap_vars. * target.c (hash_entry_type): New typedef. (htab_alloc): New function hook for hashtab.h. (htab_free): Likewise. (htab_hash): Likewise. (htab_eq): Likewise. (hashtab.h): Add file include. (gomp_increment_refcount): New function. (gomp_decrement_refcount): Likewise. (gomp_map_vars_existing): Add refcount_set parameter, adjust to use gomp_increment_refcount. (gomp_map_fields_existing): Add refcount_set parameter, adjust calls to gomp_map_vars_existing. (gomp_map_vars_internal): Add refcount_set parameter, add local openmp_p variable to guard OpenMP specific paths, adjust calls to gomp_map_vars_existing, add structure element sibling splay_tree_key sequence creation code, adjust Fortran map case to avoid increment under OpenMP. (gomp_map_vars): Adjust to static, add refcount_set parameter, manage local refcount_set if caller passed in NULL, adjust call to gomp_map_vars_internal. (gomp_map_vars_async): Adjust and rename into... (goacc_map_vars): ...this new function, adjust call to gomp_map_vars_internal. (gomp_remove_splay_tree_key): New function with code factored out from gomp_remove_var_internal. (gomp_remove_var_internal): Add code to handle removing multiple splay_tree_key sequence for structure elements, adjust code to use gomp_remove_splay_tree_key for splay-tree key removal. (gomp_unmap_vars_internal): Add refcount_set parameter, adjust to use gomp_decrement_refcount. (gomp_unmap_vars): Adjust to static, add refcount_set parameter, manage local refcount_set if caller passed in NULL, adjust call to gomp_unmap_vars_internal. (gomp_unmap_vars_async): Adjust and rename into... (goacc_unmap_vars): ...this new function, adjust call to gomp_unmap_vars_internal. (GOMP_target): Manage refcount_set and adjust calls to gomp_map_vars and gomp_unmap_vars. (GOMP_target_ext): Likewise. (gomp_target_data_fallback): Adjust call to gomp_map_vars. (GOMP_target_data): Likewise. (GOMP_target_data_ext): Likewise. (GOMP_target_end_data): Adjust call to gomp_unmap_vars. (gomp_exit_data): Add refcount_set parameter, adjust to use gomp_decrement_refcount, adjust to queue splay-tree keys for removal after main loop. (GOMP_target_enter_exit_data): Manage refcount_set and adjust calls to gomp_map_vars and gomp_exit_data. (gomp_target_task_fn): Likewise. * testsuite/libgomp.c-c++-common/refcount-1.c: New testcase. * testsuite/libgomp.c-c++-common/struct-elem-1.c: New testcase. * testsuite/libgomp.c-c++-common/struct-elem-2.c: New testcase. * testsuite/libgomp.c-c++-common/struct-elem-3.c: New testcase. * testsuite/libgomp.c-c++-common/struct-elem-4.c: New testcase. * testsuite/libgomp.c-c++-common/struct-elem-5.c: New testcase. --------------3DFD981472C4A9F2DE5DC58E Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="omp5-structelem-v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="omp5-structelem-v2.patch" ZGlmZiAtLWdpdCBhL2xpYmdvbXAvaGFzaHRhYi5oIGIvbGliZ29tcC9oYXNodGFiLmgKaW5k ZXggOTMyMjNlM2JjNWUuLjQxYjRmYmIzYjkyIDEwMDY0NAotLS0gYS9saWJnb21wL2hhc2h0 YWIuaAorKysgYi9saWJnb21wL2hhc2h0YWIuaApAQCAtMjIwLDMzICsyMjAsMzkgQEAgaHRh Yl9tb2QgKGhhc2h2YWxfdCBoYXNoLCBodGFiX3QgaHRhYikKIHN0YXRpYyBpbmxpbmUgaGFz aHZhbF90CiBodGFiX21vZF9tMiAoaGFzaHZhbF90IGhhc2gsIGh0YWJfdCBodGFiKQogewog ICBjb25zdCBzdHJ1Y3QgcHJpbWVfZW50ICpwID0gJnByaW1lX3RhYltodGFiLT5zaXplX3By aW1lX2luZGV4XTsKICAgcmV0dXJuIDEgKyBodGFiX21vZF8xIChoYXNoLCBwLT5wcmltZSAt IDIsIHAtPmludl9tMiwgcC0+c2hpZnQpOwogfQogCitzdGF0aWMgaW5saW5lIGh0YWJfdAor aHRhYl9jbGVhciAoaHRhYl90IGh0YWIpCit7CisgIGh0YWItPm5fZWxlbWVudHMgPSAwOwor ICBodGFiLT5uX2RlbGV0ZWQgPSAwOworICBtZW1zZXQgKGh0YWItPmVudHJpZXMsIDAsIGh0 YWItPnNpemUgKiBzaXplb2YgKGhhc2hfZW50cnlfdHlwZSkpOworICByZXR1cm4gaHRhYjsK K30KKwogLyogQ3JlYXRlIGhhc2ggdGFibGUgb2Ygc2l6ZSBTSVpFLiAgKi8KIAogc3RhdGlj IGh0YWJfdAogaHRhYl9jcmVhdGUgKHNpemVfdCBzaXplKQogewogICBodGFiX3QgcmVzdWx0 OwogICB1bnNpZ25lZCBpbnQgc2l6ZV9wcmltZV9pbmRleDsKIAogICBzaXplX3ByaW1lX2lu ZGV4ID0gaGlnaGVyX3ByaW1lX2luZGV4IChzaXplKTsKICAgc2l6ZSA9IHByaW1lX3RhYltz aXplX3ByaW1lX2luZGV4XS5wcmltZTsKIAogICByZXN1bHQgPSAoaHRhYl90KSBodGFiX2Fs bG9jIChzaXplb2YgKHN0cnVjdCBodGFiKQogCQkJCSsgc2l6ZSAqIHNpemVvZiAoaGFzaF9l bnRyeV90eXBlKSk7CiAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7Ci0gIHJlc3VsdC0+bl9lbGVt ZW50cyA9IDA7Ci0gIHJlc3VsdC0+bl9kZWxldGVkID0gMDsKICAgcmVzdWx0LT5zaXplX3By aW1lX2luZGV4ID0gc2l6ZV9wcmltZV9pbmRleDsKLSAgbWVtc2V0IChyZXN1bHQtPmVudHJp ZXMsIDAsIHNpemUgKiBzaXplb2YgKGhhc2hfZW50cnlfdHlwZSkpOwotICByZXR1cm4gcmVz dWx0OworICByZXR1cm4gaHRhYl9jbGVhciAocmVzdWx0KTsKIH0KIAogLyogU2ltaWxhciB0 byBodGFiX2ZpbmRfc2xvdCwgYnV0IHdpdGhvdXQgc2V2ZXJhbCB1bndhbnRlZCBzaWRlIGVm ZmVjdHM6CiAgICAgLSBEb2VzIG5vdCBjYWxsIGh0YWJfZXEgd2hlbiBpdCBmaW5kcyBhbiBl eGlzdGluZyBlbnRyeS4KICAgICAtIERvZXMgbm90IGNoYW5nZSB0aGUgY291bnQgb2YgZWxl bWVudHMgaW4gdGhlIGhhc2ggdGFibGUuCiAgICBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1l cyB0aGVyZSBhcmUgbm8gZGVsZXRlZCBlbnRyaWVzIGluIHRoZSB0YWJsZS4KICAgIEhBU0gg aXMgdGhlIGhhc2ggdmFsdWUgZm9yIHRoZSBlbGVtZW50IHRvIGJlIGluc2VydGVkLiAgKi8K ZGlmZiAtLWdpdCBhL2xpYmdvbXAvbGliZ29tcC5oIGIvbGliZ29tcC9saWJnb21wLmgKaW5k ZXggMDcwZDI5Yzk2OWUuLjVlYzk2ODI3MDI3IDEwMDY0NAotLS0gYS9saWJnb21wL2xpYmdv bXAuaAorKysgYi9saWJnb21wL2xpYmdvbXAuaApAQCAtOTkyLDE5ICs5OTIsNDMgQEAgc3Ry dWN0IHRhcmdldF9tZW1fZGVzYyB7CiAgIHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2 aWNlX2Rlc2NyOwogCiAgIC8qIExpc3Qgb2YgdGFyZ2V0IGl0ZW1zIHRvIHJlbW92ZSAob3Ig ZGVjcmVhc2UgcmVmY291bnQpCiAgICAgIGF0IHRoZSBlbmQgb2YgcmVnaW9uLiAgKi8KICAg c3RydWN0IHRhcmdldF92YXJfZGVzYyBsaXN0W107CiB9OwogCisvKiBTcGVjaWFsIHZhbHVl IGZvciByZWZjb3VudCAtIG1hc2sgdG8gaW5kaWNhdGUgZXhpc3RlbmNlIG9mIHNwZWNpYWwK KyAgIHZhbHVlcy4gUmlnaHQgbm93IHdlIGFsbG9jYXRlIDMgYml0cy4gICovCisjZGVmaW5l IFJFRkNPVU5UX1NQRUNJQUwgKH4odWludHB0cl90KSAweDcpCisKIC8qIFNwZWNpYWwgdmFs dWUgZm9yIHJlZmNvdW50IC0gaW5maW5pdHkuICAqLwotI2RlZmluZSBSRUZDT1VOVF9JTkZJ TklUWSAofih1aW50cHRyX3QpIDApCisjZGVmaW5lIFJFRkNPVU5UX0lORklOSVRZIChSRUZD T1VOVF9TUEVDSUFMIHwgMCkKIC8qIFNwZWNpYWwgdmFsdWUgZm9yIHJlZmNvdW50IC0gdGd0 X29mZnNldCBjb250YWlucyB0YXJnZXQgYWRkcmVzcyBvZiB0aGUKICAgIGFydGlmaWNpYWwg cG9pbnRlciB0byAib21wIGRlY2xhcmUgdGFyZ2V0IGxpbmsiIG9iamVjdC4gICovCi0jZGVm aW5lIFJFRkNPVU5UX0xJTksgKH4odWludHB0cl90KSAxKQorI2RlZmluZSBSRUZDT1VOVF9M SU5LICAgICAoUkVGQ09VTlRfU1BFQ0lBTCB8IDEpCisKKy8qIFNwZWNpYWwgdmFsdWUgZm9y IHJlZmNvdW50IC0gc3RydWN0dXJlIGVsZW1lbnQgc2libGluZyBsaXN0IGl0ZW1zLgorICAg QWxsIHN1Y2gga2V5IHJlZm91bnRzIGhhdmUgUkVGQ09VTlRfU1RSVUNURUxFTSBiaXRzIHNl dCwgd2l0aCBfRkxBR19GSVJTVAorICAgYW5kIF9GTEFHX0xBU1QgaW5kaWNhdGluZyBmaXJz dCBhbmQgbGFzdCBpbiB0aGUgY3JlYXRlZCBzaWJsaW5nIHNlcXVlbmNlLiAgKi8KKyNkZWZp bmUgUkVGQ09VTlRfU1RSVUNURUxFTSAoUkVGQ09VTlRfU1BFQ0lBTCB8IDQpCisjZGVmaW5l IFJFRkNPVU5UX1NUUlVDVEVMRU1fUChWKQkJCVwKKyAgKCgoVikgJiBSRUZDT1VOVF9TVFJV Q1RFTEVNKSA9PSBSRUZDT1VOVF9TVFJVQ1RFTEVNKQorLyogVGhlIGZpcnN0IGxlYWRpbmcg a2V5IHdpdGggX0ZMQUdfRklSU1Qgc2V0IGhvdXNlcyB0aGUgYWN0dWFsIHJlZmVyZW5jZSBj b3VudAorICAgaW4gdGhlIHN0cnVjdGVsZW1fcmVmY291bnQgZmllbGQuIE90aGVyIHNpYmxp bmdzIHBvaW50IHRvIHRoaXMgY291bnRlciB2YWx1ZQorICAgdGhyb3VnaCBpdHMgc3RydWN0 ZWxlbV9yZWZjb3VudF9wdHIgZmllbGQuICAqLworI2RlZmluZSBSRUZDT1VOVF9TVFJVQ1RF TEVNX0ZMQUdfRklSU1QgKDEpCisvKiBUaGUgbGFzdCBrZXkgaW4gdGhlIHNpYmxpbmcgc2Vx dWVuY2UgaGFzIHRoaXMgc2V0LiBUaGlzIGlzIHJlcXVpcmVkIHRvCisgICBpbmRpY2F0ZSB0 aGUgc2VxdWVuY2UgYm91bmRhcnksIHdoZW4gd2UgcmVtb3ZlIHRoZSBzdHJ1Y3R1cmUgc2li bGluZyBsaXN0CisgICBmcm9tIHRoZSBtYXAuICAqLworI2RlZmluZSBSRUZDT1VOVF9TVFJV Q1RFTEVNX0ZMQUdfTEFTVCAgKDIpCisKKyNkZWZpbmUgUkVGQ09VTlRfU1RSVUNURUxFTV9G SVJTVF9QKFYpCQkJCQlcCisgIChSRUZDT1VOVF9TVFJVQ1RFTEVNX1AgKFYpICYmICgoVikg JiBSRUZDT1VOVF9TVFJVQ1RFTEVNX0ZMQUdfRklSU1QpKQorI2RlZmluZSBSRUZDT1VOVF9T VFJVQ1RFTEVNX0xBU1RfUChWKQkJCQkJXAorICAoUkVGQ09VTlRfU1RSVUNURUxFTV9QIChW KSAmJiAoKFYpICYgUkVGQ09VTlRfU1RSVUNURUxFTV9GTEFHX0xBU1QpKQogCiAvKiBTcGVj aWFsIG9mZnNldCB2YWx1ZXMuICAqLwogI2RlZmluZSBPRkZTRVRfSU5MSU5FRCAofih1aW50 cHRyX3QpIDApCiAjZGVmaW5lIE9GRlNFVF9QT0lOVEVSICh+KHVpbnRwdHJfdCkgMSkKICNk ZWZpbmUgT0ZGU0VUX1NUUlVDVCAofih1aW50cHRyX3QpIDIpCiAKIC8qIEF1eGlsaWFyeSBz dHJ1Y3R1cmUgZm9yIGluZnJlcXVlbnRseS11c2VkIG9yIEFQSS1zcGVjaWZpYyBkYXRhLiAg Ki8KQEAgLTEwMjQsMTYgKzEwNDgsMzAgQEAgc3RydWN0IHNwbGF5X3RyZWVfa2V5X3Mgewog ICB1aW50cHRyX3QgaG9zdF9lbmQ7CiAgIC8qIERlc2NyaXB0b3Igb2YgdGhlIHRhcmdldCBt ZW1vcnkuICAqLwogICBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3Q7CiAgIC8qIE9mZnNl dCBmcm9tIHRndC0+dGd0X3N0YXJ0IHRvIHRoZSBzdGFydCBvZiB0aGUgdGFyZ2V0IG9iamVj dC4gICovCiAgIHVpbnRwdHJfdCB0Z3Rfb2Zmc2V0OwogICAvKiBSZWZlcmVuY2UgY291bnQu ICAqLwogICB1aW50cHRyX3QgcmVmY291bnQ7Ci0gIC8qIER5bmFtaWMgcmVmZXJlbmNlIGNv dW50LiAgKi8KLSAgdWludHB0cl90IGR5bmFtaWNfcmVmY291bnQ7CisgIHVuaW9uIHsKKyAg ICAvKiBEeW5hbWljIHJlZmVyZW5jZSBjb3VudC4gICovCisgICAgdWludHB0cl90IGR5bmFt aWNfcmVmY291bnQ7CisKKyAgICAvKiBVbmlmaWVkIHJlZmVyZW5jZSBjb3VudCBmb3Igc3Ry dWN0dXJlIGVsZW1lbnQgc2libGluZ3MsIHRoaXMgaXMgdXNlZAorICAgICAgIHdoZW4gUkVG Q09VTlRfU1RSVUNURUxFTV9GSVJTVF9QKGstPnJlZmNvdW50KSA9PSB0cnVlLCB0aGUgZmly c3Qgc2libGluZworICAgICAgIGluIGEgc3RydWN0dXJlIGVsZW1lbnQgc2libGluZyBsaXN0 IGl0ZW0gc2VxdWVuY2UuICAqLworICAgIHVpbnRwdHJfdCBzdHJ1Y3RlbGVtX3JlZmNvdW50 OworCisgICAgLyogV2hlbiBSRUZDT1VOVF9TVFJVQ1RFTEVNX1AgKGstPnJlZmNvdW50KSA9 PSB0cnVlLCB0aGlzIGZpZWxkIHBvaW50cworICAgICAgIGludG8gdGhlIChhYm92ZSkgc3Ry dWN0ZWxlbV9yZWZjb3VudCBmaWVsZCBvZiB0aGUgX0ZJUlNUIHNwbGF5X3RyZWVfa2V5LAor ICAgICAgIHRoZSBmaXJzdCBrZXkgaW4gdGhlIGNyZWF0ZWQgc2VxdWVuY2UuIEFsbCBzdHJ1 Y3R1cmUgZWxlbWVudCBzaWJsaW5ncworICAgICAgIHNoYXJlIGEgc2luZ2xlIHJlZmNvdW50 IGluIHRoaXMgbWFubmVyLiBTaW5jZSB0aGVzZSB0d28gZmllbGRzIHdvbid0IGJlCisgICAg ICAgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGV5IGFyZSBzdGFzaGVkIGluIGEgdW5pb24u ICAqLworICAgIHVpbnRwdHJfdCAqc3RydWN0ZWxlbV9yZWZjb3VudF9wdHI7CisgIH07CiAg IHN0cnVjdCBzcGxheV90cmVlX2F1eCAqYXV4OwogfTsKIAogLyogVGhlIGNvbXBhcmlzb24g ZnVuY3Rpb24uICAqLwogCiBzdGF0aWMgaW5saW5lIGludAogc3BsYXlfY29tcGFyZSAoc3Bs YXlfdHJlZV9rZXkgeCwgc3BsYXlfdHJlZV9rZXkgeSkKQEAgLTExODAsMjcgKzEyMTgsMjEg QEAgZXh0ZXJuIHVpbnRwdHJfdCBnb21wX21hcF92YWwgKHN0cnVjdCB0YXJnZXRfbWVtX2Rl c2MgKiwgdm9pZCAqKiwgc2l6ZV90KTsKIGV4dGVybiB2b2lkIGdvbXBfYXR0YWNoX3BvaW50 ZXIgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqLAogCQkJCSBzdHJ1Y3QgZ29hY2NfYXN5 bmNxdWV1ZSAqLCBzcGxheV90cmVlLAogCQkJCSBzcGxheV90cmVlX2tleSwgdWludHB0cl90 LCBzaXplX3QsCiAJCQkJIHN0cnVjdCBnb21wX2NvYWxlc2NlX2J1ZiAqKTsKIGV4dGVybiB2 b2lkIGdvbXBfZGV0YWNoX3BvaW50ZXIgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqLAog CQkJCSBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqLCBzcGxheV90cmVlX2tleSwKIAkJCQkg dWludHB0cl90LCBib29sLCBzdHJ1Y3QgZ29tcF9jb2FsZXNjZV9idWYgKik7Ci0KLWV4dGVy biBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICpnb21wX21hcF92YXJzIChzdHJ1Y3QgZ29tcF9k ZXZpY2VfZGVzY3IgKiwKLQkJCQkJICAgICAgc2l6ZV90LCB2b2lkICoqLCB2b2lkICoqLAot CQkJCQkgICAgICBzaXplX3QgKiwgdm9pZCAqLCBib29sLAotCQkJCQkgICAgICBlbnVtIGdv bXBfbWFwX3ZhcnNfa2luZCk7Ci1leHRlcm4gc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqZ29t cF9tYXBfdmFyc19hc3luYyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICosCi0JCQkJCQkg ICAgc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKiwKLQkJCQkJCSAgICBzaXplX3QsIHZvaWQg KiosIHZvaWQgKiosCi0JCQkJCQkgICAgc2l6ZV90ICosIHZvaWQgKiwgYm9vbCwKLQkJCQkJ CSAgICBlbnVtIGdvbXBfbWFwX3ZhcnNfa2luZCk7Ci1leHRlcm4gdm9pZCBnb21wX3VubWFw X3ZhcnMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKiwgYm9vbCk7Ci1leHRlcm4gdm9pZCBn b21wX3VubWFwX3ZhcnNfYXN5bmMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKiwgYm9vbCwK LQkJCQkgICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqKTsKK2V4dGVybiBzdHJ1Y3QgdGFy Z2V0X21lbV9kZXNjICpnb2FjY19tYXBfdmFycyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2Ny ICosCisJCQkJCSAgICAgICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqLAorCQkJCQkgICAg ICAgc2l6ZV90LCB2b2lkICoqLCB2b2lkICoqLAorCQkJCQkgICAgICAgc2l6ZV90ICosIHZv aWQgKiwgYm9vbCwKKwkJCQkJICAgICAgIGVudW0gZ29tcF9tYXBfdmFyc19raW5kKTsKK2V4 dGVybiB2b2lkIGdvYWNjX3VubWFwX3ZhcnMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKiwg Ym9vbCwKKwkJCSAgICAgIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICopOwogZXh0ZXJuIHZv aWQgZ29tcF9pbml0X2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICopOwogZXh0 ZXJuIGJvb2wgZ29tcF9maW5pX2RldmljZSAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICop OwogZXh0ZXJuIHZvaWQgZ29tcF91bmxvYWRfZGV2aWNlIChzdHJ1Y3QgZ29tcF9kZXZpY2Vf ZGVzY3IgKik7CiBleHRlcm4gYm9vbCBnb21wX3JlbW92ZV92YXIgKHN0cnVjdCBnb21wX2Rl dmljZV9kZXNjciAqLCBzcGxheV90cmVlX2tleSk7CiBleHRlcm4gdm9pZCBnb21wX3JlbW92 ZV92YXJfYXN5bmMgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqLCBzcGxheV90cmVlX2tl eSwKIAkJCQkgICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqKTsKIApkaWZmIC0tZ2l0IGEv bGliZ29tcC9vYWNjLW1lbS5jIGIvbGliZ29tcC9vYWNjLW1lbS5jCmluZGV4IDRjOGYwZTA4 MjhlLi5kMjg5MjEzYTE3NiAxMDA2NDQKLS0tIGEvbGliZ29tcC9vYWNjLW1lbS5jCisrKyBi L2xpYmdvbXAvb2FjYy1tZW0uYwpAQCAtMzk4LDE3ICszOTgsMTYgQEAgYWNjX21hcF9kYXRh ICh2b2lkICpoLCB2b2lkICpkLCBzaXplX3QgcykKIAkgIGdvbXBfZmF0YWwgKCJkZXZpY2Ug YWRkcmVzcyBbJXAsICslZF0gaXMgYWxyZWFkeSBtYXBwZWQiLCAodm9pZCAqKWQsCiAJCSAg ICAgIChpbnQpcyk7CiAJfQogCiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFjY19kZXYt PmxvY2spOwogCiAgICAgICBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QKLQk9IGdvbXBf bWFwX3ZhcnMgKGFjY19kZXYsIG1hcG51bSwgJmhvc3RhZGRycywgJmRldmFkZHJzLCAmc2l6 ZXMsCi0JCQkgJmtpbmRzLCB0cnVlLAotCQkJIEdPTVBfTUFQX1ZBUlNfT1BFTkFDQyB8IEdP TVBfTUFQX1ZBUlNfRU5URVJfREFUQSk7CisJPSBnb2FjY19tYXBfdmFycyAoYWNjX2Rldiwg TlVMTCwgbWFwbnVtLCAmaG9zdGFkZHJzLCAmZGV2YWRkcnMsICZzaXplcywKKwkJCSAgJmtp bmRzLCB0cnVlLCBHT01QX01BUF9WQVJTX0VOVEVSX0RBVEEpOwogICAgICAgYXNzZXJ0ICh0 Z3QpOwogICAgICAgYXNzZXJ0ICh0Z3QtPmxpc3RfY291bnQgPT0gMSk7CiAgICAgICBzcGxh eV90cmVlX2tleSBuID0gdGd0LT5saXN0WzBdLmtleTsKICAgICAgIGFzc2VydCAobik7CiAg ICAgICBhc3NlcnQgKG4tPnJlZmNvdW50ID09IDEpOwogICAgICAgYXNzZXJ0IChuLT5keW5h bWljX3JlZmNvdW50ID09IDApOwogICAgICAgLyogU3BlY2lhbCByZWZlcmVuY2UgY291bnRp bmcgYmVoYXZpb3IuICAqLwpAQCAtNTY4LDE3ICs1NjcsMTYgQEAgZ29hY2NfZW50ZXJfZGF0 dW0gKHZvaWQgKipob3N0YWRkcnMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKmtpbmRzLCBpbnQg YXN5bmMpCiAgICAgICBjb25zdCBzaXplX3QgbWFwbnVtID0gMTsKIAogICAgICAgZ29tcF9t dXRleF91bmxvY2sgKCZhY2NfZGV2LT5sb2NrKTsKIAogICAgICAgZ29hY2NfYXEgYXEgPSBn ZXRfZ29hY2NfYXN5bmNxdWV1ZSAoYXN5bmMpOwogCiAgICAgICBzdHJ1Y3QgdGFyZ2V0X21l bV9kZXNjICp0Z3QKLQk9IGdvbXBfbWFwX3ZhcnNfYXN5bmMgKGFjY19kZXYsIGFxLCBtYXBu dW0sIGhvc3RhZGRycywgTlVMTCwgc2l6ZXMsCi0JCQkgICAgICAga2luZHMsIHRydWUsIChH T01QX01BUF9WQVJTX09QRU5BQ0MKLQkJCQkJICAgICB8IEdPTVBfTUFQX1ZBUlNfRU5URVJf REFUQSkpOworCT0gZ29hY2NfbWFwX3ZhcnMgKGFjY19kZXYsIGFxLCBtYXBudW0sIGhvc3Rh ZGRycywgTlVMTCwgc2l6ZXMsCisJCQkgIGtpbmRzLCB0cnVlLCBHT01QX01BUF9WQVJTX0VO VEVSX0RBVEEpOwogICAgICAgYXNzZXJ0ICh0Z3QpOwogICAgICAgYXNzZXJ0ICh0Z3QtPmxp c3RfY291bnQgPT0gMSk7CiAgICAgICBuID0gdGd0LT5saXN0WzBdLmtleTsKICAgICAgIGFz c2VydCAobik7CiAgICAgICBhc3NlcnQgKG4tPnJlZmNvdW50ID09IDEpOwogICAgICAgYXNz ZXJ0IChuLT5keW5hbWljX3JlZmNvdW50ID09IDApOwogICAgICAgbi0+ZHluYW1pY19yZWZj b3VudCsrOwpAQCAtMTA2NiwxNSArMTA2NCwxNSBAQCBmaW5kX2dyb3VwX2xhc3QgKGludCBw b3MsIHNpemVfdCBtYXBudW0sIHNpemVfdCAqc2l6ZXMsIHVuc2lnbmVkIHNob3J0ICpraW5k cykKIAlwb3MrKzsKICAgICB9CiAKICAgcmV0dXJuIHBvczsKIH0KIAogLyogTWFwIHZhcmlh YmxlcyBmb3IgT3BlbkFDQyAiZW50ZXIgZGF0YSIuICBXZSBjYW4ndCBqdXN0IGNhbGwKLSAg IGdvbXBfbWFwX3ZhcnNfYXN5bmMgb25jZSwgYmVjYXVzZSBpbmRpdmlkdWFsIG1hcHBlZCB2 YXJpYWJsZXMgbWlnaHQgaGF2ZQorICAgZ29hY2NfbWFwX3ZhcnMgb25jZSwgYmVjYXVzZSBp bmRpdmlkdWFsIG1hcHBlZCB2YXJpYWJsZXMgbWlnaHQgaGF2ZQogICAgImV4aXQgZGF0YSIg Y2FsbGVkIGZvciB0aGVtIGF0IGRpZmZlcmVudCB0aW1lcy4gICovCiAKIHN0YXRpYyB2b2lk CiBnb2FjY19lbnRlcl9kYXRhX2ludGVybmFsIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3Ig KmFjY19kZXYsIHNpemVfdCBtYXBudW0sCiAJCQkgICB2b2lkICoqaG9zdGFkZHJzLCBzaXpl X3QgKnNpemVzLAogCQkJICAgdW5zaWduZWQgc2hvcnQgKmtpbmRzLCBnb2FjY19hcSBhcSkK IHsKQEAgLTExOTgsMTggKzExOTYsMTcgQEAgZ29hY2NfZW50ZXJfZGF0YV9pbnRlcm5hbCAo c3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICphY2NfZGV2LCBzaXplX3QgbWFwbnVtLAogCXsK IAkgIC8qIFRoZSBkYXRhIGlzIG5vdCBtYXBwZWQgYWxyZWFkeS4gIE1hcCBpdCBub3csIHVu bGVzcyB0aGUgZmlyc3QKIAkgICAgIG1lbWJlciBpbiB0aGUgZ3JvdXAgaGFzIGEgTlVMTCBw b2ludGVyIChlLmcuIGEgbm9uLXByZXNlbnQKIAkgICAgIG9wdGlvbmFsIHBhcmFtZXRlciku ICAqLwogCSAgZ29tcF9tdXRleF91bmxvY2sgKCZhY2NfZGV2LT5sb2NrKTsKIAogCSAgc3Ry dWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0Ci0JICAgID0gZ29tcF9tYXBfdmFyc19hc3luYyAo YWNjX2RldiwgYXEsIGdyb3VwbnVtLCAmaG9zdGFkZHJzW2ldLCBOVUxMLAotCQkJCSAgICZz aXplc1tpXSwgJmtpbmRzW2ldLCB0cnVlLAotCQkJCSAgIChHT01QX01BUF9WQVJTX09QRU5B Q0MKLQkJCQkgICAgfCBHT01QX01BUF9WQVJTX0VOVEVSX0RBVEEpKTsKKwkgICAgPSBnb2Fj Y19tYXBfdmFycyAoYWNjX2RldiwgYXEsIGdyb3VwbnVtLCAmaG9zdGFkZHJzW2ldLCBOVUxM LAorCQkJICAgICAgJnNpemVzW2ldLCAma2luZHNbaV0sIHRydWUsCisJCQkgICAgICBHT01Q X01BUF9WQVJTX0VOVEVSX0RBVEEpOwogCSAgYXNzZXJ0ICh0Z3QpOwogCiAJICBnb21wX211 dGV4X2xvY2sgKCZhY2NfZGV2LT5sb2NrKTsKIAogCSAgZm9yIChzaXplX3QgaiA9IDA7IGog PCB0Z3QtPmxpc3RfY291bnQ7IGorKykKIAkgICAgewogCSAgICAgIG4gPSB0Z3QtPmxpc3Rb al0ua2V5OwpkaWZmIC0tZ2l0IGEvbGliZ29tcC9vYWNjLXBhcmFsbGVsLmMgYi9saWJnb21w L29hY2MtcGFyYWxsZWwuYwppbmRleCBjN2U0NmUzNWJkNi4uZDIyNTliYjMxYmEgMTAwNjQ0 Ci0tLSBhL2xpYmdvbXAvb2FjYy1wYXJhbGxlbC5jCisrKyBiL2xpYmdvbXAvb2FjYy1wYXJh bGxlbC5jCkBAIC0yODYsMjUgKzI4NiwyNSBAQCBHT0FDQ19wYXJhbGxlbF9rZXllZCAoaW50 IGZsYWdzX20sIHZvaWQgKCpmbikgKHZvaWQgKiksCiAgICAgICBlbnRlcl9leGl0X2RhdGFf ZXZlbnRfaW5mby5vdGhlcl9ldmVudC50b29sX2luZm8gPSBOVUxMOwogICAgICAgZ29hY2Nf cHJvZmlsaW5nX2Rpc3BhdGNoICgmcHJvZl9pbmZvLCAmZW50ZXJfZXhpdF9kYXRhX2V2ZW50 X2luZm8sCiAJCQkJJmFwaV9pbmZvKTsKICAgICB9CiAKICAgZ29hY2NfYXEgYXEgPSBnZXRf Z29hY2NfYXN5bmNxdWV1ZSAoYXN5bmMpOwogCi0gIHRndCA9IGdvbXBfbWFwX3ZhcnNfYXN5 bmMgKGFjY19kZXYsIGFxLCBtYXBudW0sIGhvc3RhZGRycywgTlVMTCwgc2l6ZXMsIGtpbmRz LAotCQkJICAgICB0cnVlLCBHT01QX01BUF9WQVJTX09QRU5BQ0MpOworICB0Z3QgPSBnb2Fj Y19tYXBfdmFycyAoYWNjX2RldiwgYXEsIG1hcG51bSwgaG9zdGFkZHJzLCBOVUxMLCBzaXpl cywga2luZHMsCisJCQl0cnVlLCAwKTsKICAgaWYgKHByb2ZpbGluZ19wKQogICAgIHsKICAg ICAgIHByb2ZfaW5mby5ldmVudF90eXBlID0gYWNjX2V2X2VudGVyX2RhdGFfZW5kOwogICAg ICAgZW50ZXJfZXhpdF9kYXRhX2V2ZW50X2luZm8ub3RoZXJfZXZlbnQuZXZlbnRfdHlwZQog CT0gcHJvZl9pbmZvLmV2ZW50X3R5cGU7CiAgICAgICBnb2FjY19wcm9maWxpbmdfZGlzcGF0 Y2ggKCZwcm9mX2luZm8sICZlbnRlcl9leGl0X2RhdGFfZXZlbnRfaW5mbywKIAkJCQkmYXBp X2luZm8pOwogICAgIH0KLSAgCisKICAgZGV2YWRkcnMgPSBnb21wX2FsbG9jYSAoc2l6ZW9m ICh2b2lkICopICogbWFwbnVtKTsKICAgZm9yIChpID0gMDsgaSA8IG1hcG51bTsgaSsrKQog ICAgIGRldmFkZHJzW2ldID0gKHZvaWQgKikgZ29tcF9tYXBfdmFsICh0Z3QsIGhvc3RhZGRy cywgaSk7CiAKICAgaWYgKGFxID09IE5VTEwpCiAgICAgYWNjX2Rldi0+b3BlbmFjYy5leGVj X2Z1bmMgKHRndF9mbiwgbWFwbnVtLCBob3N0YWRkcnMsIGRldmFkZHJzLCBkaW1zLAogCQkJ CXRndCk7CkBAIC0zMTcsMTkgKzMxNywxNiBAQCBHT0FDQ19wYXJhbGxlbF9rZXllZCAoaW50 IGZsYWdzX20sIHZvaWQgKCpmbikgKHZvaWQgKiksCiAgICAgICBwcm9mX2luZm8uZXZlbnRf dHlwZSA9IGFjY19ldl9leGl0X2RhdGFfc3RhcnQ7CiAgICAgICBlbnRlcl9leGl0X2RhdGFf ZXZlbnRfaW5mby5vdGhlcl9ldmVudC5ldmVudF90eXBlID0gcHJvZl9pbmZvLmV2ZW50X3R5 cGU7CiAgICAgICBlbnRlcl9leGl0X2RhdGFfZXZlbnRfaW5mby5vdGhlcl9ldmVudC50b29s X2luZm8gPSBOVUxMOwogICAgICAgZ29hY2NfcHJvZmlsaW5nX2Rpc3BhdGNoICgmcHJvZl9p bmZvLCAmZW50ZXJfZXhpdF9kYXRhX2V2ZW50X2luZm8sCiAJCQkJJmFwaV9pbmZvKTsKICAg ICB9CiAKLSAgLyogSWYgcnVubmluZyBzeW5jaHJvbm91c2x5LCB1bm1hcCBpbW1lZGlhdGVs eS4gICovCi0gIGlmIChhcSA9PSBOVUxMKQotICAgIGdvbXBfdW5tYXBfdmFycyAodGd0LCB0 cnVlKTsKLSAgZWxzZQotICAgIGdvbXBfdW5tYXBfdmFyc19hc3luYyAodGd0LCB0cnVlLCBh cSk7CisgIC8qIElmIHJ1bm5pbmcgc3luY2hyb25vdXNseSAoYXEgPT0gTlVMTCksIHRoaXMg d2lsbCB1bm1hcCBpbW1lZGlhdGVseS4gICovCisgIGdvYWNjX3VubWFwX3ZhcnMgKHRndCwg dHJ1ZSwgYXEpOwogCiAgIGlmIChwcm9maWxpbmdfcCkKICAgICB7CiAgICAgICBwcm9mX2lu Zm8uZXZlbnRfdHlwZSA9IGFjY19ldl9leGl0X2RhdGFfZW5kOwogICAgICAgZW50ZXJfZXhp dF9kYXRhX2V2ZW50X2luZm8ub3RoZXJfZXZlbnQuZXZlbnRfdHlwZSA9IHByb2ZfaW5mby5l dmVudF90eXBlOwogICAgICAgZ29hY2NfcHJvZmlsaW5nX2Rpc3BhdGNoICgmcHJvZl9pbmZv LCAmZW50ZXJfZXhpdF9kYXRhX2V2ZW50X2luZm8sCiAJCQkJJmFwaV9pbmZvKTsKQEAgLTQ1 MiwyNSArNDQ5LDI0IEBAIEdPQUNDX2RhdGFfc3RhcnQgKGludCBmbGFnc19tLCBzaXplX3Qg bWFwbnVtLAogCiAgIC8qIEhvc3QgZmFsbGJhY2sgb3IgJ2RvIG5vdGhpbmcnLiAgKi8KICAg aWYgKChhY2NfZGV2LT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX1NIQVJFRF9N RU0pCiAgICAgICB8fCAoZmxhZ3MgJiBHT0FDQ19GTEFHX0hPU1RfRkFMTEJBQ0spKQogICAg IHsKICAgICAgIHByb2ZfaW5mby5kZXZpY2VfdHlwZSA9IGFjY19kZXZpY2VfaG9zdDsKICAg ICAgIGFwaV9pbmZvLmRldmljZV90eXBlID0gcHJvZl9pbmZvLmRldmljZV90eXBlOwotICAg ICAgdGd0ID0gZ29tcF9tYXBfdmFycyAoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgdHJ1ZSwKLQkJCSAgIEdPTVBfTUFQX1ZBUlNfT1BFTkFDQyk7CisgICAgICB0Z3QgPSBn b2FjY19tYXBfdmFycyAoTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg dHJ1ZSwgMCk7CiAgICAgICB0Z3QtPnByZXYgPSB0aHItPm1hcHBlZF9kYXRhOwogICAgICAg dGhyLT5tYXBwZWRfZGF0YSA9IHRndDsKIAogICAgICAgZ290byBvdXRfcHJvZjsKICAgICB9 CiAKICAgZ29tcF9kZWJ1ZyAoMCwgIiAgJXM6IHByZXBhcmUgbWFwcGluZ3NcbiIsIF9fRlVO Q1RJT05fXyk7Ci0gIHRndCA9IGdvbXBfbWFwX3ZhcnMgKGFjY19kZXYsIG1hcG51bSwgaG9z dGFkZHJzLCBOVUxMLCBzaXplcywga2luZHMsIHRydWUsCi0JCSAgICAgICBHT01QX01BUF9W QVJTX09QRU5BQ0MpOworICB0Z3QgPSBnb2FjY19tYXBfdmFycyAoYWNjX2RldiwgTlVMTCwg bWFwbnVtLCBob3N0YWRkcnMsIE5VTEwsIHNpemVzLCBraW5kcywKKwkJCXRydWUsIDApOwog ICBnb21wX2RlYnVnICgwLCAiICAlczogbWFwcGluZ3MgcHJlcGFyZWRcbiIsIF9fRlVOQ1RJ T05fXyk7CiAgIHRndC0+cHJldiA9IHRoci0+bWFwcGVkX2RhdGE7CiAgIHRoci0+bWFwcGVk X2RhdGEgPSB0Z3Q7CiAKICBvdXRfcHJvZjoKICAgaWYgKHByb2ZpbGluZ19wKQogICAgIHsK QEAgLTUzOCwxNSArNTM0LDE1IEBAIEdPQUNDX2RhdGFfZW5kICh2b2lkKQogICAgIH0KIAog ICBpZiAocHJvZmlsaW5nX3ApCiAgICAgZ29hY2NfcHJvZmlsaW5nX2Rpc3BhdGNoICgmcHJv Zl9pbmZvLCAmZXhpdF9kYXRhX2V2ZW50X2luZm8sICZhcGlfaW5mbyk7CiAKICAgZ29tcF9k ZWJ1ZyAoMCwgIiAgJXM6IHJlc3RvcmUgbWFwcGluZ3NcbiIsIF9fRlVOQ1RJT05fXyk7CiAg IHRoci0+bWFwcGVkX2RhdGEgPSB0Z3QtPnByZXY7Ci0gIGdvbXBfdW5tYXBfdmFycyAodGd0 LCB0cnVlKTsKKyAgZ29hY2NfdW5tYXBfdmFycyAodGd0LCB0cnVlLCBOVUxMKTsKICAgZ29t cF9kZWJ1ZyAoMCwgIiAgJXM6IG1hcHBpbmdzIHJlc3RvcmVkXG4iLCBfX0ZVTkNUSU9OX18p OwogCiAgIGlmIChwcm9maWxpbmdfcCkKICAgICB7CiAgICAgICBwcm9mX2luZm8uZXZlbnRf dHlwZSA9IGFjY19ldl9leGl0X2RhdGFfZW5kOwogICAgICAgZXhpdF9kYXRhX2V2ZW50X2lu Zm8ub3RoZXJfZXZlbnQuZXZlbnRfdHlwZSA9IHByb2ZfaW5mby5ldmVudF90eXBlOwogICAg ICAgZ29hY2NfcHJvZmlsaW5nX2Rpc3BhdGNoICgmcHJvZl9pbmZvLCAmZXhpdF9kYXRhX2V2 ZW50X2luZm8sICZhcGlfaW5mbyk7CmRpZmYgLS1naXQgYS9saWJnb21wL3RhcmdldC5jIGIv bGliZ29tcC90YXJnZXQuYwppbmRleCA2MTUyZjU4ZTEzZC4uZjcyNTUyOWYzNWYgMTAwNjQ0 Ci0tLSBhL2xpYmdvbXAvdGFyZ2V0LmMKKysrIGIvbGliZ29tcC90YXJnZXQuYwpAQCAtNDAs MTQgKzQwLDMxIEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2lmZGVmIFBMVUdJTl9TVVBQ T1JUCiAjaW5jbHVkZSA8ZGxmY24uaD4KICNpbmNsdWRlICJwbHVnaW4tc3VmZml4LmgiCiAj ZW5kaWYKIAordHlwZWRlZiB1aW50cHRyX3QgKmhhc2hfZW50cnlfdHlwZTsKK3N0YXRpYyBp bmxpbmUgdm9pZCAqIGh0YWJfYWxsb2MgKHNpemVfdCBzaXplKSB7IHJldHVybiBnb21wX21h bGxvYyAoc2l6ZSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2ZyZWUgKHZvaWQgKnB0 cikgeyBmcmVlIChwdHIpOyB9CisjaW5jbHVkZSAiaGFzaHRhYi5oIgorCitzdGF0aWMgaW5s aW5lIGhhc2h2YWxfdAoraHRhYl9oYXNoIChoYXNoX2VudHJ5X3R5cGUgZWxlbWVudCkKK3sK KyAgcmV0dXJuIGhhc2hfcG9pbnRlciAoKHZvaWQgKikgZWxlbWVudCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgYm9vbAoraHRhYl9lcSAoaGFzaF9lbnRyeV90eXBlIHgsIGhhc2hfZW50cnlf dHlwZSB5KQoreworICByZXR1cm4geCA9PSB5OworfQorCiAjZGVmaW5lIEZJRUxEX1RHVF9F TVBUWSAofihzaXplX3QpIDApCiAKIHN0YXRpYyB2b2lkIGdvbXBfdGFyZ2V0X2luaXQgKHZv aWQpOwogCiAvKiBUaGUgd2hvbGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3Igb2ZmbG9hZGlu ZyBwbHVnaW5zIGlzIG9ubHkgcnVuIG9uZS4gICovCiBzdGF0aWMgcHRocmVhZF9vbmNlX3Qg Z29tcF9pc19pbml0aWFsaXplZCA9IFBUSFJFQURfT05DRV9JTklUOwogCkBAIC0zNTYsMjQg KzM3MywxMzIgQEAgZ29tcF9mcmVlX2RldmljZV9tZW1vcnkgKHN0cnVjdCBnb21wX2Rldmlj ZV9kZXNjciAqZGV2aWNlcCwgdm9pZCAqZGV2cHRyKQogICBpZiAoIWRldmljZXAtPmZyZWVf ZnVuYyAoZGV2aWNlcC0+dGFyZ2V0X2lkLCBkZXZwdHIpKQogICAgIHsKICAgICAgIGdvbXBf bXV0ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7CiAgICAgICBnb21wX2ZhdGFsICgiZXJy b3IgaW4gZnJlZWluZyBkZXZpY2UgbWVtb3J5IGJsb2NrIGF0ICVwIiwgZGV2cHRyKTsKICAg ICB9CiB9CiAKKy8qIEluY3JlbWVudCByZWZlcmVuY2UgY291bnQgb2YgYSBzcGxheV90cmVl X2tleSByZWdpb24gSyBieSAxLgorICAgSWYgUkVGQ09VTlRfU0VUICE9IE5VTEwsIHVzZSBp dCB0byB0cmFjayBhbHJlYWR5IHNlZW4gcmVmY291bnRzLCBhbmQgb25seQorICAgaW5jcmVt ZW50IHRoZSB2YWx1ZSBpZiByZWZjb3VudCBpcyBub3QgeWV0IGNvbnRhaW5lZCBpbiB0aGUg c2V0ICh1c2VkIGZvcgorICAgT3Blbk1QIDUuMCwgd2hpY2ggc3BlY2lmaWVzIHRoYXQgYSBy ZWdpb24ncyByZWZjb3VudCBpcyBhZGp1c3RlZCBhdCBtb3N0CisgICBvbmNlIGZvciBlYWNo IGNvbnN0cnVjdCkuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dvbXBfaW5jcmVtZW50 X3JlZmNvdW50IChzcGxheV90cmVlX2tleSBrLCBodGFiX3QgKnJlZmNvdW50X3NldCkKK3sK KyAgaWYgKGsgPT0gTlVMTCB8fCBrLT5yZWZjb3VudCA9PSBSRUZDT1VOVF9JTkZJTklUWSkK KyAgICByZXR1cm47CisKKyAgdWludHB0cl90ICpyZWZjb3VudF9wdHIgPSAmay0+cmVmY291 bnQ7CisKKyAgaWYgKFJFRkNPVU5UX1NUUlVDVEVMRU1fRklSU1RfUCAoay0+cmVmY291bnQp KQorICAgIHJlZmNvdW50X3B0ciA9ICZrLT5zdHJ1Y3RlbGVtX3JlZmNvdW50OworICBlbHNl IGlmIChSRUZDT1VOVF9TVFJVQ1RFTEVNX1AgKGstPnJlZmNvdW50KSkKKyAgICByZWZjb3Vu dF9wdHIgPSBrLT5zdHJ1Y3RlbGVtX3JlZmNvdW50X3B0cjsKKworICBpZiAocmVmY291bnRf c2V0KQorICAgIHsKKyAgICAgIGlmIChodGFiX2ZpbmQgKCpyZWZjb3VudF9zZXQsIHJlZmNv dW50X3B0cikpCisJcmV0dXJuOworICAgICAgdWludHB0cl90ICoqc2xvdCA9IGh0YWJfZmlu ZF9zbG90IChyZWZjb3VudF9zZXQsIHJlZmNvdW50X3B0ciwgSU5TRVJUKTsKKyAgICAgICpz bG90ID0gcmVmY291bnRfcHRyOworICAgIH0KKworICAqcmVmY291bnRfcHRyICs9IDE7Cisg IHJldHVybjsKK30KKworLyogRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCBvZiBhIHNwbGF5 X3RyZWVfa2V5IHJlZ2lvbiBLIGJ5IDEsIG9yIGlmIERFTEVURV9QCisgICBpcyB0cnVlLCBz ZXQgcmVmZXJlbmNlIGNvdW50IHRvIHplcm8uIElmIFJFRkNPVU5UX1NFVCAhPSBOVUxMLCB1 c2UgaXQgdG8KKyAgIHRyYWNrIGFscmVhZHkgc2VlbiByZWZjb3VudHMsIGFuZCBvbmx5IGFk anVzdCB0aGUgdmFsdWUgaWYgcmVmY291bnQgaXMgbm90CisgICB5ZXQgY29udGFpbmVkIGlu IHRoZSBzZXQgKGxpa2UgZ29tcF9pbmNyZW1lbnRfcmVmY291bnQpLgorCisgICBSZXR1cm4g b3V0LXZhbHVlczogc2V0ICpET19DT1BZIHRvIHRydWUgaWYgd2Ugc2V0IHRoZSByZWZjb3Vu dCB0byB6ZXJvLCBvcgorICAgaXQgaXMgYWxyZWFkeSB6ZXJvIGFuZCB3ZSBrbm93IHdlIGRl Y3JlbWVudGVkIGl0IGVhcmxpZXIuIFRoaXMgc2lnbmFscyB0aGF0CisgICBhc3NvY2lhdGVk IG1hcHMgc2hvdWxkIGJlIGNvcGllZCBiYWNrIHRvIGhvc3QuCisKKyAgICpET19SRU1PVkUg aXMgc2V0IHRvIHRydWUgd2hlbiB3ZSB0aGlzIGlzIHRoZSBmaXJzdCBoYW5kbGluZyBvZiB0 aGlzIHJlZmNvdW50CisgICBhbmQgd2UgYXJlIHNldHRpbmcgaXQgdG8gemVyby4gVGhpcyBz aWduYWxzIGEgcmVtb3ZhbCBvZiB0aGlzIGtleSBmcm9tIHRoZQorICAgc3BsYXktdHJlZSBt YXAuCisKKyAgIENvcHkgYW5kIHJlbW92YWwgYXJlIHNlcGFyYXRlZCBkdWUgdG8gY2FzZXMg bGlrZSBoYW5kbGluZyBvZiBzdHJ1Y3R1cmUKKyAgIGVsZW1lbnRzLCBlLmcuIGVhY2ggbWFw IG9mIGEgc3RydWN0dXJlIGVsZW1lbnQgcmVwcmVzZW50aW5nIGEgcG9zc2libGUgY29weQor ICAgb3V0IG9mIGEgc3RydWN0dXJlIGZpZWxkIGhhcyB0byBiZSBoYW5kbGVkIGluZGl2aWR1 YWxseSwgYnV0IHdlIG9ubHkgc2lnbmFsCisgICByZW1vdmFsIGZvciBvbmUgKHRoZSBmaXJz dCBlbmNvdW50ZXJlZCkgc2liaW5nIG1hcC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAor Z29tcF9kZWNyZW1lbnRfcmVmY291bnQgKHNwbGF5X3RyZWVfa2V5IGssIGh0YWJfdCAqcmVm Y291bnRfc2V0LCBib29sIGRlbGV0ZV9wLAorCQkJIGJvb2wgKmRvX2NvcHksIGJvb2wgKmRv X3JlbW92ZSkKK3sKKyAgaWYgKGsgPT0gTlVMTCB8fCBrLT5yZWZjb3VudCA9PSBSRUZDT1VO VF9JTkZJTklUWSkKKyAgICB7CisgICAgICAqZG9fY29weSA9ICpkb19yZW1vdmUgPSBmYWxz ZTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgdWludHB0cl90ICpyZWZjb3VudF9wdHIg PSAmay0+cmVmY291bnQ7CisKKyAgaWYgKFJFRkNPVU5UX1NUUlVDVEVMRU1fRklSU1RfUCAo ay0+cmVmY291bnQpKQorICAgIHJlZmNvdW50X3B0ciA9ICZrLT5zdHJ1Y3RlbGVtX3JlZmNv dW50OworICBlbHNlIGlmIChSRUZDT1VOVF9TVFJVQ1RFTEVNX1AgKGstPnJlZmNvdW50KSkK KyAgICByZWZjb3VudF9wdHIgPSBrLT5zdHJ1Y3RlbGVtX3JlZmNvdW50X3B0cjsKKworICBi b29sIG5ld19lbmNvdW50ZXJlZF9yZWZjb3VudDsKKyAgYm9vbCBzZXRfdG9femVybyA9IGZh bHNlOworICBib29sIGlzX3plcm8gPSBmYWxzZTsKKworICB1aW50cHRyX3Qgb3JpZ19yZWZj b3VudCA9ICpyZWZjb3VudF9wdHI7CisKKyAgaWYgKHJlZmNvdW50X3NldCkKKyAgICB7Cisg ICAgICBpZiAoaHRhYl9maW5kICgqcmVmY291bnRfc2V0LCByZWZjb3VudF9wdHIpKQorCXsK KwkgIG5ld19lbmNvdW50ZXJlZF9yZWZjb3VudCA9IGZhbHNlOworCSAgZ290byBlbmQ7CisJ fQorCisgICAgICB1aW50cHRyX3QgKipzbG90ID0gaHRhYl9maW5kX3Nsb3QgKHJlZmNvdW50 X3NldCwgcmVmY291bnRfcHRyLCBJTlNFUlQpOworICAgICAgKnNsb3QgPSByZWZjb3VudF9w dHI7CisgICAgICBuZXdfZW5jb3VudGVyZWRfcmVmY291bnQgPSB0cnVlOworICAgIH0KKyAg ZWxzZQorICAgIC8qIElmIG5vIHJlZmNvdW50X3NldCBiZWluZyB1c2VkLCBhc3N1bWUgYWxs IGtleXMgYXJlIGJlaW5nIGRlY3JlbWVudGVkCisgICAgICAgZm9yIHRoZSBmaXJzdCB0aW1l LiAgKi8KKyAgICBuZXdfZW5jb3VudGVyZWRfcmVmY291bnQgPSB0cnVlOworCisgIGlmIChk ZWxldGVfcCkKKyAgICAqcmVmY291bnRfcHRyID0gMDsKKyAgZWxzZSBpZiAoKnJlZmNvdW50 X3B0ciA+IDApCisgICAgKnJlZmNvdW50X3B0ciAtPSAxOworCisgZW5kOgorICBpZiAoKnJl ZmNvdW50X3B0ciA9PSAwKQorICAgIHsKKyAgICAgIGlmIChvcmlnX3JlZmNvdW50ID4gMCkK KwlzZXRfdG9femVybyA9IHRydWU7CisKKyAgICAgIGlzX3plcm8gPSB0cnVlOworICAgIH0K KworICAqZG9fY29weSA9IChzZXRfdG9femVybyB8fCAoIW5ld19lbmNvdW50ZXJlZF9yZWZj b3VudCAmJiBpc196ZXJvKSk7CisgICpkb19yZW1vdmUgPSAobmV3X2VuY291bnRlcmVkX3Jl ZmNvdW50ICYmIHNldF90b196ZXJvKTsKK30KKwogLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJl IGdvbXBfbWFwX2xvb2t1cCwgc3BsYXlfdHJlZV9sb29rdXAgb3IKICAgIGdvbXBfbWFwXzBs ZW5fbG9va3VwIGZvdW5kIG9sZG4gZm9yIG5ld24uCiAgICBIZWxwZXIgZnVuY3Rpb24gb2Yg Z29tcF9tYXBfdmFycy4gICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZ29tcF9tYXBfdmFy c19leGlzdGluZyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwLAogCQkJc3Ry dWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxLCBzcGxheV90cmVlX2tleSBvbGRuLAogCQkJc3Bs YXlfdHJlZV9rZXkgbmV3biwgc3RydWN0IHRhcmdldF92YXJfZGVzYyAqdGd0X3ZhciwKIAkJ CXVuc2lnbmVkIGNoYXIga2luZCwgYm9vbCBhbHdheXNfdG9fZmxhZywKLQkJCXN0cnVjdCBn b21wX2NvYWxlc2NlX2J1ZiAqY2J1ZikKKwkJCXN0cnVjdCBnb21wX2NvYWxlc2NlX2J1ZiAq Y2J1ZiwKKwkJCWh0YWJfdCAqcmVmY291bnRfc2V0KQogewogICBhc3NlcnQgKGtpbmQgIT0g R09NUF9NQVBfQVRUQUNIKTsKIAogICB0Z3RfdmFyLT5rZXkgPSBvbGRuOwogICB0Z3RfdmFy LT5jb3B5X2Zyb20gPSBHT01QX01BUF9DT1BZX0ZST01fUCAoa2luZCk7CiAgIHRndF92YXIt PmFsd2F5c19jb3B5X2Zyb20gPSBHT01QX01BUF9BTFdBWVNfRlJPTV9QIChraW5kKTsKICAg dGd0X3Zhci0+aXNfYXR0YWNoID0gZmFsc2U7CkBAIC0zOTQsMTYgKzUxOSwxNSBAQCBnb21w X21hcF92YXJzX2V4aXN0aW5nIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAs CiAgIGlmIChHT01QX01BUF9BTFdBWVNfVE9fUCAoa2luZCkgfHwgYWx3YXlzX3RvX2ZsYWcp CiAgICAgZ29tcF9jb3B5X2hvc3QyZGV2IChkZXZpY2VwLCBhcSwKIAkJCSh2b2lkICopIChv bGRuLT50Z3QtPnRndF9zdGFydCArIG9sZG4tPnRndF9vZmZzZXQKIAkJCQkgICsgbmV3bi0+ aG9zdF9zdGFydCAtIG9sZG4tPmhvc3Rfc3RhcnQpLAogCQkJKHZvaWQgKikgbmV3bi0+aG9z dF9zdGFydCwKIAkJCW5ld24tPmhvc3RfZW5kIC0gbmV3bi0+aG9zdF9zdGFydCwgY2J1Zik7 CiAKLSAgaWYgKG9sZG4tPnJlZmNvdW50ICE9IFJFRkNPVU5UX0lORklOSVRZKQotICAgIG9s ZG4tPnJlZmNvdW50Kys7CisgIGdvbXBfaW5jcmVtZW50X3JlZmNvdW50IChvbGRuLCByZWZj b3VudF9zZXQpOwogfQogCiBzdGF0aWMgaW50CiBnZXRfa2luZCAoYm9vbCBzaG9ydF9tYXBr aW5kLCB2b2lkICpraW5kcywgaW50IGlkeCkKIHsKICAgcmV0dXJuIHNob3J0X21hcGtpbmQg PyAoKHVuc2lnbmVkIHNob3J0ICopIGtpbmRzKVtpZHhdCiAJCSAgICAgICA6ICgodW5zaWdu ZWQgY2hhciAqKSBraW5kcylbaWR4XTsKQEAgLTQ0OSwxNSArNTczLDE1IEBAIGdvbXBfbWFw X3BvaW50ZXIgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRndCwgc3RydWN0IGdvYWNjX2Fz eW5jcXVldWUgKmFxLAogfQogCiBzdGF0aWMgdm9pZAogZ29tcF9tYXBfZmllbGRzX2V4aXN0 aW5nIChzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QsCiAJCQkgIHN0cnVjdCBnb2FjY19h c3luY3F1ZXVlICphcSwgc3BsYXlfdHJlZV9rZXkgbiwKIAkJCSAgc2l6ZV90IGZpcnN0LCBz aXplX3QgaSwgdm9pZCAqKmhvc3RhZGRycywKIAkJCSAgc2l6ZV90ICpzaXplcywgdm9pZCAq a2luZHMsCi0JCQkgIHN0cnVjdCBnb21wX2NvYWxlc2NlX2J1ZiAqY2J1ZikKKwkJCSAgc3Ry dWN0IGdvbXBfY29hbGVzY2VfYnVmICpjYnVmLCBodGFiX3QgKnJlZmNvdW50X3NldCkKIHsK ICAgc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwID0gdGd0LT5kZXZpY2VfZGVz Y3I7CiAgIHN0cnVjdCBzcGxheV90cmVlX3MgKm1lbV9tYXAgPSAmZGV2aWNlcC0+bWVtX21h cDsKICAgc3RydWN0IHNwbGF5X3RyZWVfa2V5X3MgY3VyX25vZGU7CiAgIGludCBraW5kOwog ICBjb25zdCBib29sIHNob3J0X21hcGtpbmQgPSB0cnVlOwogICBjb25zdCBpbnQgdHlwZW1h c2sgPSBzaG9ydF9tYXBraW5kID8gMHhmZiA6IDB4NzsKQEAgLTQ2NywxNSArNTkxLDE1IEBA IGdvbXBfbWFwX2ZpZWxkc19leGlzdGluZyAoc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0 LAogICBzcGxheV90cmVlX2tleSBuMiA9IHNwbGF5X3RyZWVfbG9va3VwIChtZW1fbWFwLCAm Y3VyX25vZGUpOwogICBraW5kID0gZ2V0X2tpbmQgKHNob3J0X21hcGtpbmQsIGtpbmRzLCBp KTsKICAgaWYgKG4yCiAgICAgICAmJiBuMi0+dGd0ID09IG4tPnRndAogICAgICAgJiYgbjIt Pmhvc3Rfc3RhcnQgLSBuLT5ob3N0X3N0YXJ0ID09IG4yLT50Z3Rfb2Zmc2V0IC0gbi0+dGd0 X29mZnNldCkKICAgICB7CiAgICAgICBnb21wX21hcF92YXJzX2V4aXN0aW5nIChkZXZpY2Vw LCBhcSwgbjIsICZjdXJfbm9kZSwgJnRndC0+bGlzdFtpXSwKLQkJCSAgICAgIGtpbmQgJiB0 eXBlbWFzaywgZmFsc2UsIGNidWYpOworCQkJICAgICAga2luZCAmIHR5cGVtYXNrLCBmYWxz ZSwgY2J1ZiwgcmVmY291bnRfc2V0KTsKICAgICAgIHJldHVybjsKICAgICB9CiAgIGlmIChz aXplc1tpXSA9PSAwKQogICAgIHsKICAgICAgIGlmIChjdXJfbm9kZS5ob3N0X3N0YXJ0ID4g KHVpbnRwdHJfdCkgaG9zdGFkZHJzW2ZpcnN0IC0gMV0pCiAJewogCSAgY3VyX25vZGUuaG9z dF9zdGFydC0tOwpAQCAtNDgzLDI3ICs2MDcsMjcgQEAgZ29tcF9tYXBfZmllbGRzX2V4aXN0 aW5nIChzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QsCiAJICBjdXJfbm9kZS5ob3N0X3N0 YXJ0Kys7CiAJICBpZiAobjIKIAkgICAgICAmJiBuMi0+dGd0ID09IG4tPnRndAogCSAgICAg ICYmIG4yLT5ob3N0X3N0YXJ0IC0gbi0+aG9zdF9zdGFydAogCQkgPT0gbjItPnRndF9vZmZz ZXQgLSBuLT50Z3Rfb2Zmc2V0KQogCSAgICB7CiAJICAgICAgZ29tcF9tYXBfdmFyc19leGlz dGluZyAoZGV2aWNlcCwgYXEsIG4yLCAmY3VyX25vZGUsICZ0Z3QtPmxpc3RbaV0sCi0JCQkJ ICAgICAga2luZCAmIHR5cGVtYXNrLCBmYWxzZSwgY2J1Zik7CisJCQkJICAgICAga2luZCAm IHR5cGVtYXNrLCBmYWxzZSwgY2J1ZiwgcmVmY291bnRfc2V0KTsKIAkgICAgICByZXR1cm47 CiAJICAgIH0KIAl9CiAgICAgICBjdXJfbm9kZS5ob3N0X2VuZCsrOwogICAgICAgbjIgPSBz cGxheV90cmVlX2xvb2t1cCAobWVtX21hcCwgJmN1cl9ub2RlKTsKICAgICAgIGN1cl9ub2Rl Lmhvc3RfZW5kLS07CiAgICAgICBpZiAobjIKIAkgICYmIG4yLT50Z3QgPT0gbi0+dGd0CiAJ ICAmJiBuMi0+aG9zdF9zdGFydCAtIG4tPmhvc3Rfc3RhcnQgPT0gbjItPnRndF9vZmZzZXQg LSBuLT50Z3Rfb2Zmc2V0KQogCXsKIAkgIGdvbXBfbWFwX3ZhcnNfZXhpc3RpbmcgKGRldmlj ZXAsIGFxLCBuMiwgJmN1cl9ub2RlLCAmdGd0LT5saXN0W2ldLAotCQkJCSAga2luZCAmIHR5 cGVtYXNrLCBmYWxzZSwgY2J1Zik7CisJCQkJICBraW5kICYgdHlwZW1hc2ssIGZhbHNlLCBj YnVmLCByZWZjb3VudF9zZXQpOwogCSAgcmV0dXJuOwogCX0KICAgICB9CiAgIGdvbXBfbXV0 ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7CiAgIGdvbXBfZmF0YWwgKCJUcnlpbmcgdG8g bWFwIGludG8gZGV2aWNlIFslcC4uJXApIHN0cnVjdHVyZSBlbGVtZW50IHdoZW4gIgogCSAg ICAgICJvdGhlciBtYXBwZWQgZWxlbWVudHMgZnJvbSB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2Vy ZW4ndCBtYXBwZWQgIgogCSAgICAgICJ0b2dldGhlciB3aXRoIGl0IiwgKHZvaWQgKikgY3Vy X25vZGUuaG9zdF9zdGFydCwKQEAgLTY2NywxOSArNzkxLDIxIEBAIGdvbXBfbWFwX3ZhbCAo c3RydWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0LCB2b2lkICoqaG9zdGFkZHJzLCBzaXplX3Qg aSkKIH0KIAogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkg c3RydWN0IHRhcmdldF9tZW1fZGVzYyAqCiBnb21wX21hcF92YXJzX2ludGVybmFsIChzdHJ1 Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsCiAJCQlzdHJ1Y3QgZ29hY2NfYXN5bmNx dWV1ZSAqYXEsIHNpemVfdCBtYXBudW0sCiAJCQl2b2lkICoqaG9zdGFkZHJzLCB2b2lkICoq ZGV2YWRkcnMsIHNpemVfdCAqc2l6ZXMsCiAJCQl2b2lkICpraW5kcywgYm9vbCBzaG9ydF9t YXBraW5kLAorCQkJaHRhYl90ICpyZWZjb3VudF9zZXQsCiAJCQllbnVtIGdvbXBfbWFwX3Zh cnNfa2luZCBwcmFnbWFfa2luZCkKIHsKICAgc2l6ZV90IGksIHRndF9hbGlnbiwgdGd0X3Np emUsIG5vdF9mb3VuZF9jbnQgPSAwOwogICBib29sIGhhc19maXJzdHByaXZhdGUgPSBmYWxz ZTsKICAgYm9vbCBoYXNfYWx3YXlzX3B0cnNldCA9IGZhbHNlOworICBib29sIG9wZW5tcF9w ID0gKHByYWdtYV9raW5kICYgR09NUF9NQVBfVkFSU19PUEVOQUNDKSA9PSAwOwogICBjb25z dCBpbnQgcnNoaWZ0ID0gc2hvcnRfbWFwa2luZCA/IDggOiAzOwogICBjb25zdCBpbnQgdHlw ZW1hc2sgPSBzaG9ydF9tYXBraW5kID8gMHhmZiA6IDB4NzsKICAgc3RydWN0IHNwbGF5X3Ry ZWVfcyAqbWVtX21hcCA9ICZkZXZpY2VwLT5tZW1fbWFwOwogICBzdHJ1Y3Qgc3BsYXlfdHJl ZV9rZXlfcyBjdXJfbm9kZTsKICAgc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0CiAgICAg PSBnb21wX21hbGxvYyAoc2l6ZW9mICgqdGd0KSArIHNpemVvZiAodGd0LT5saXN0WzBdKSAq IG1hcG51bSk7CiAgIHRndC0+bGlzdF9jb3VudCA9IG1hcG51bTsKQEAgLTgwOSwxNSArOTM1 LDE1IEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBnb21wX2RldmljZV9kZXNj ciAqZGV2aWNlcCwKIAkJCQkJICAgc2l6ZXNbaV0pOwogCQl9CiAJICAgICAgaS0tOwogCSAg ICAgIGNvbnRpbnVlOwogCSAgICB9CiAJICBmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBp KyspCiAJICAgIGdvbXBfbWFwX2ZpZWxkc19leGlzdGluZyAodGd0LCBhcSwgbiwgZmlyc3Qs IGksIGhvc3RhZGRycywKLQkJCQkgICAgICBzaXplcywga2luZHMsIE5VTEwpOworCQkJCSAg ICAgIHNpemVzLCBraW5kcywgTlVMTCwgcmVmY291bnRfc2V0KTsKIAkgIGktLTsKIAkgIGNv bnRpbnVlOwogCX0KICAgICAgIGVsc2UgaWYgKChraW5kICYgdHlwZW1hc2spID09IEdPTVBf TUFQX0FMV0FZU19QT0lOVEVSKQogCXsKIAkgIHRndC0+bGlzdFtpXS5rZXkgPSBOVUxMOwog CSAgdGd0LT5saXN0W2ldLm9mZnNldCA9IE9GRlNFVF9QT0lOVEVSOwpAQCAtOTA1LDE1ICsx MDMxLDE2IEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBnb21wX2RldmljZV9k ZXNjciAqZGV2aWNlcCwKIAkJICAgIHsKIAkJICAgICAgaGFzX2Fsd2F5c19wdHJzZXQgPSB0 cnVlOwogCQkgICAgICArK2Fsd2F5c190b19jbnQ7CiAJCSAgICB9CiAJCX0KIAkgICAgfQog CSAgZ29tcF9tYXBfdmFyc19leGlzdGluZyAoZGV2aWNlcCwgYXEsIG4sICZjdXJfbm9kZSwg JnRndC0+bGlzdFtpXSwKLQkJCQkgIGtpbmQgJiB0eXBlbWFzaywgYWx3YXlzX3RvX2NudCA+ IDAsIE5VTEwpOworCQkJCSAga2luZCAmIHR5cGVtYXNrLCBhbHdheXNfdG9fY250ID4gMCwg TlVMTCwKKwkJCQkgIHJlZmNvdW50X3NldCk7CiAJICBpICs9IGFsd2F5c190b19jbnQ7CiAJ fQogICAgICAgZWxzZQogCXsKIAkgIHRndC0+bGlzdFtpXS5rZXkgPSBOVUxMOwogCiAJICBp ZiAoKGtpbmQgJiB0eXBlbWFzaykgPT0gR09NUF9NQVBfSUZfUFJFU0VOVCkKQEAgLTEwMTgs MTQgKzExNDUsMTUgQEAgZ29tcF9tYXBfdmFyc19pbnRlcm5hbCAoc3RydWN0IGdvbXBfZGV2 aWNlX2Rlc2NyICpkZXZpY2VwLAogICBpZiAobm90X2ZvdW5kX2NudCB8fCBoYXNfZmlyc3Rw cml2YXRlIHx8IGhhc19hbHdheXNfcHRyc2V0KQogICAgIHsKICAgICAgIGlmIChub3RfZm91 bmRfY250KQogCXRndC0+YXJyYXkgPSBnb21wX21hbGxvYyAobm90X2ZvdW5kX2NudCAqIHNp emVvZiAoKnRndC0+YXJyYXkpKTsKICAgICAgIHNwbGF5X3RyZWVfbm9kZSBhcnJheSA9IHRn dC0+YXJyYXk7CiAgICAgICBzaXplX3QgaiwgZmllbGRfdGd0X29mZnNldCA9IDAsIGZpZWxk X3RndF9jbGVhciA9IEZJRUxEX1RHVF9FTVBUWTsKICAgICAgIHVpbnRwdHJfdCBmaWVsZF90 Z3RfYmFzZSA9IDA7CisgICAgICBzcGxheV90cmVlX2tleSBmaWVsZF90Z3Rfc3RydWN0ZWxl bV9maXJzdCA9IE5VTEw7CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXBudW07IGkrKykK IAlpZiAoaGFzX2Fsd2F5c19wdHJzZXQKIAkgICAgJiYgdGd0LT5saXN0W2ldLmtleQogCSAg ICAmJiAoZ2V0X2tpbmQgKHNob3J0X21hcGtpbmQsIGtpbmRzLCBpKSAmIHR5cGVtYXNrKQog CSAgICAgICA9PSBHT01QX01BUF9UT19QU0VUKQogCSAgewpAQCAtMTA2MCwxNiArMTE4OCwx NSBAQCBnb21wX21hcF92YXJzX2ludGVybmFsIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3Ig KmRldmljZXAsCiAJCSAgewogCQkgICAgaWYgKCoodm9pZCAqKikgaG9zdGFkZHJzW2pdID09 IE5VTEwpCiAJCSAgICAgIHRndC0+bGlzdFtpXS5oYXNfbnVsbF9wdHJfYXNzb2MgPSB0cnVl OwogCQkgICAgdGd0LT5saXN0W2pdLmtleSA9IGs7CiAJCSAgICB0Z3QtPmxpc3Rbal0uY29w eV9mcm9tID0gZmFsc2U7CiAJCSAgICB0Z3QtPmxpc3Rbal0uYWx3YXlzX2NvcHlfZnJvbSA9 IGZhbHNlOwogCQkgICAgdGd0LT5saXN0W2pdLmlzX2F0dGFjaCA9IGZhbHNlOwotCQkgICAg aWYgKGstPnJlZmNvdW50ICE9IFJFRkNPVU5UX0lORklOSVRZKQotCQkgICAgICBrLT5yZWZj b3VudCsrOworCQkgICAgZ29tcF9pbmNyZW1lbnRfcmVmY291bnQgKGssIHJlZmNvdW50X3Nl dCk7CiAJCSAgICBnb21wX21hcF9wb2ludGVyIChrLT50Z3QsIGFxLAogCQkJCSAgICAgICh1 aW50cHRyX3QpICoodm9pZCAqKikgaG9zdGFkZHJzW2pdLAogCQkJCSAgICAgIGstPnRndF9v ZmZzZXQgKyAoKHVpbnRwdHJfdCkgaG9zdGFkZHJzW2pdCiAJCQkJCQkgICAgICAgLSBrLT5o b3N0X3N0YXJ0KSwKIAkJCQkgICAgICBzaXplc1tqXSwgY2J1ZnApOwogCQkgIH0KIAkgICAg ICB9CkBAIC0xMTQ5LDIxICsxMjc2LDIyIEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0 cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwKIAkJCQktICh1aW50cHRyX3QpIGhv c3RhZGRyc1tpXTsKIAkJICAgIHRndF9zaXplID0gKHRndF9zaXplICsgYWxpZ24gLSAxKSAm IH4oYWxpZ24gLSAxKTsKIAkJICAgIHRndF9zaXplICs9ICh1aW50cHRyX3QpIGhvc3RhZGRy c1tmaXJzdF0KIAkJCQktICh1aW50cHRyX3QpIGhvc3RhZGRyc1tpXTsKIAkJICAgIGZpZWxk X3RndF9iYXNlID0gKHVpbnRwdHJfdCkgaG9zdGFkZHJzW2ZpcnN0XTsKIAkJICAgIGZpZWxk X3RndF9vZmZzZXQgPSB0Z3Rfc2l6ZTsKIAkJICAgIGZpZWxkX3RndF9jbGVhciA9IGxhc3Q7 CisJCSAgICBmaWVsZF90Z3Rfc3RydWN0ZWxlbV9maXJzdCA9IE5VTEw7CiAJCSAgICB0Z3Rf c2l6ZSArPSBjdXJfbm9kZS5ob3N0X2VuZAogCQkJCS0gKHVpbnRwdHJfdCkgaG9zdGFkZHJz W2ZpcnN0XTsKIAkJICAgIGNvbnRpbnVlOwogCQkgIH0KIAkJZm9yIChpID0gZmlyc3Q7IGkg PD0gbGFzdDsgaSsrKQogCQkgIGdvbXBfbWFwX2ZpZWxkc19leGlzdGluZyAodGd0LCBhcSwg biwgZmlyc3QsIGksIGhvc3RhZGRycywKLQkJCQkJICAgIHNpemVzLCBraW5kcywgY2J1ZnAp OworCQkJCQkgICAgc2l6ZXMsIGtpbmRzLCBjYnVmcCwgcmVmY291bnRfc2V0KTsKIAkJaS0t OwogCQljb250aW51ZTsKIAkgICAgICBjYXNlIEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSOgog CQljdXJfbm9kZS5ob3N0X3N0YXJ0ID0gKHVpbnRwdHJfdCkgaG9zdGFkZHJzW2ldOwogCQlj dXJfbm9kZS5ob3N0X2VuZCA9IGN1cl9ub2RlLmhvc3Rfc3RhcnQgKyBzaXplb2YgKHZvaWQg Kik7CiAJCW4gPSBzcGxheV90cmVlX2xvb2t1cCAobWVtX21hcCwgJmN1cl9ub2RlKTsKIAkJ aWYgKG4gPT0gTlVMTApAQCAtMTIzMiwxNSArMTM2MCwxNiBAQCBnb21wX21hcF92YXJzX2lu dGVybmFsIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsCiAJICAgIGlmICgh R09NUF9NQVBfUE9JTlRFUl9QIChraW5kICYgdHlwZW1hc2spKQogCSAgICAgIGstPmhvc3Rf ZW5kID0gay0+aG9zdF9zdGFydCArIHNpemVzW2ldOwogCSAgICBlbHNlCiAJICAgICAgay0+ aG9zdF9lbmQgPSBrLT5ob3N0X3N0YXJ0ICsgc2l6ZW9mICh2b2lkICopOwogCSAgICBzcGxh eV90cmVlX2tleSBuID0gc3BsYXlfdHJlZV9sb29rdXAgKG1lbV9tYXAsIGspOwogCSAgICBp ZiAobiAmJiBuLT5yZWZjb3VudCAhPSBSRUZDT1VOVF9MSU5LKQogCSAgICAgIGdvbXBfbWFw X3ZhcnNfZXhpc3RpbmcgKGRldmljZXAsIGFxLCBuLCBrLCAmdGd0LT5saXN0W2ldLAotCQkJ CSAgICAgIGtpbmQgJiB0eXBlbWFzaywgZmFsc2UsIGNidWZwKTsKKwkJCQkgICAgICBraW5k ICYgdHlwZW1hc2ssIGZhbHNlLCBjYnVmcCwKKwkJCQkgICAgICByZWZjb3VudF9zZXQpOwog CSAgICBlbHNlCiAJICAgICAgewogCQlrLT5hdXggPSBOVUxMOwogCQlpZiAobiAmJiBuLT5y ZWZjb3VudCA9PSBSRUZDT1VOVF9MSU5LKQogCQkgIHsKIAkJICAgIC8qIFJlcGxhY2UgdGFy Z2V0IGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgd2l0aCB0YXJnZXQgYWRkcmVzcwogCQkgICAg ICAgb2YgbWFwcGVkIG9iamVjdCBpbiB0aGUgc3BsYXkgdHJlZS4gICovCkBAIC0xMjQ4LDE4 ICsxMzc3LDQyIEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBnb21wX2Rldmlj ZV9kZXNjciAqZGV2aWNlcCwKIAkJICAgIGstPmF1eAogCQkgICAgICA9IGdvbXBfbWFsbG9j X2NsZWFyZWQgKHNpemVvZiAoc3RydWN0IHNwbGF5X3RyZWVfYXV4KSk7CiAJCSAgICBrLT5h dXgtPmxpbmtfa2V5ID0gbjsKIAkJICB9CiAJCXNpemVfdCBhbGlnbiA9IChzaXplX3QpIDEg PDwgKGtpbmQgPj4gcnNoaWZ0KTsKIAkJdGd0LT5saXN0W2ldLmtleSA9IGs7CiAJCWstPnRn dCA9IHRndDsKKwkJay0+cmVmY291bnQgPSAxOworCQlrLT5keW5hbWljX3JlZmNvdW50ID0g MDsKIAkJaWYgKGZpZWxkX3RndF9jbGVhciAhPSBGSUVMRF9UR1RfRU1QVFkpCiAJCSAgewog CQkgICAgay0+dGd0X29mZnNldCA9IGstPmhvc3Rfc3RhcnQgLSBmaWVsZF90Z3RfYmFzZQog CQkJCSAgICArIGZpZWxkX3RndF9vZmZzZXQ7CisJCSAgICBpZiAob3Blbm1wX3ApCisJCSAg ICAgIHsKKwkJCWstPnJlZmNvdW50ID0gUkVGQ09VTlRfU1RSVUNURUxFTTsKKwkJCWlmIChm aWVsZF90Z3Rfc3RydWN0ZWxlbV9maXJzdCA9PSBOVUxMKQorCQkJICB7CisJCQkgICAgLyog U2V0IHRvIGZpcnN0IHN0cnVjdHVyZSBlbGVtZW50IG9mIHNlcXVlbmNlLiAgKi8KKwkJCSAg ICBrLT5yZWZjb3VudCB8PSBSRUZDT1VOVF9TVFJVQ1RFTEVNX0ZMQUdfRklSU1Q7CisJCQkg ICAgay0+c3RydWN0ZWxlbV9yZWZjb3VudCA9IDE7CisJCQkgICAgZmllbGRfdGd0X3N0cnVj dGVsZW1fZmlyc3QgPSBrOworCQkJICB9CisJCQllbHNlCisJCQkgIC8qIFBvaW50IHRvIHJl ZmNvdW50IG9mIGxlYWRpbmcgZWxlbWVudCwgYnV0IGRvIG5vdAorCQkJICAgICBpbmNyZW1l bnQgYWdhaW4uICAqLworCQkJICBrLT5zdHJ1Y3RlbGVtX3JlZmNvdW50X3B0cgorCQkJICAg ID0gJmZpZWxkX3RndF9zdHJ1Y3RlbGVtX2ZpcnN0LT5zdHJ1Y3RlbGVtX3JlZmNvdW50Owor CisJCQlpZiAoaSA9PSBmaWVsZF90Z3RfY2xlYXIpCisJCQkgIHsKKwkJCSAgICBrLT5yZWZj b3VudCB8PSBSRUZDT1VOVF9TVFJVQ1RFTEVNX0ZMQUdfTEFTVDsKKwkJCSAgICBmaWVsZF90 Z3Rfc3RydWN0ZWxlbV9maXJzdCA9IE5VTEw7CisJCQkgIH0KKwkJICAgICAgfQogCQkgICAg aWYgKGkgPT0gZmllbGRfdGd0X2NsZWFyKQogCQkgICAgICBmaWVsZF90Z3RfY2xlYXIgPSBG SUVMRF9UR1RfRU1QVFk7CiAJCSAgfQogCQllbHNlCiAJCSAgewogCQkgICAgdGd0X3NpemUg PSAodGd0X3NpemUgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpOwogCQkgICAgay0+dGd0 X29mZnNldCA9IHRndF9zaXplOwpAQCAtMTI2NywxNiArMTQyMCwxNCBAQCBnb21wX21hcF92 YXJzX2ludGVybmFsIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsCiAJCSAg fQogCQl0Z3QtPmxpc3RbaV0uY29weV9mcm9tID0gR09NUF9NQVBfQ09QWV9GUk9NX1AgKGtp bmQgJiB0eXBlbWFzayk7CiAJCXRndC0+bGlzdFtpXS5hbHdheXNfY29weV9mcm9tCiAJCSAg PSBHT01QX01BUF9BTFdBWVNfRlJPTV9QIChraW5kICYgdHlwZW1hc2spOwogCQl0Z3QtPmxp c3RbaV0uaXNfYXR0YWNoID0gZmFsc2U7CiAJCXRndC0+bGlzdFtpXS5vZmZzZXQgPSAwOwog CQl0Z3QtPmxpc3RbaV0ubGVuZ3RoID0gay0+aG9zdF9lbmQgLSBrLT5ob3N0X3N0YXJ0Owot CQlrLT5yZWZjb3VudCA9IDE7Ci0JCWstPmR5bmFtaWNfcmVmY291bnQgPSAwOwogCQl0Z3Qt PnJlZmNvdW50Kys7CiAJCWFycmF5LT5sZWZ0ID0gTlVMTDsKIAkJYXJyYXktPnJpZ2h0ID0g TlVMTDsKIAkJc3BsYXlfdHJlZV9pbnNlcnQgKG1lbV9tYXAsIGFycmF5KTsKIAkJc3dpdGNo IChraW5kICYgdHlwZW1hc2spCiAJCSAgewogCQkgIGNhc2UgR09NUF9NQVBfQUxMT0M6CkBA IC0xMzI0LDE2ICsxNDc1LDIyIEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBn b21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwKIAkJCWVsc2UKIAkJCSAgewogCQkJICAgIHRn dC0+bGlzdFtqXS5rZXkgPSBrOwogCQkJICAgIHRndC0+bGlzdFtqXS5jb3B5X2Zyb20gPSBm YWxzZTsKIAkJCSAgICB0Z3QtPmxpc3Rbal0uYWx3YXlzX2NvcHlfZnJvbSA9IGZhbHNlOwog CQkJICAgIHRndC0+bGlzdFtqXS5pc19hdHRhY2ggPSBmYWxzZTsKIAkJCSAgICB0Z3QtPmxp c3RbaV0uaGFzX251bGxfcHRyX2Fzc29jIHw9ICEoKih2b2lkICoqKSBob3N0YWRkcnNbal0p OwotCQkJICAgIGlmIChrLT5yZWZjb3VudCAhPSBSRUZDT1VOVF9JTkZJTklUWSkKLQkJCSAg ICAgIGstPnJlZmNvdW50Kys7CisJCQkgICAgLyogRm9yIE9wZW5NUCwgdGhlIHVzZSBvZiBy ZWZjb3VudF9zZXRzIGNhdXNlcworCQkJICAgICAgIGVycm9ycyBpZiB3ZSBzZXQgay0+cmVm Y291bnQgPSAxIGFib3ZlIGJ1dCBhbHNvCisJCQkgICAgICAgaW5jcmVtZW50IGl0IGFnYWlu IGhlcmUsIGZvciBkZWNyZW1lbnRpbmcgd2lsbAorCQkJICAgICAgIG5vdCBwcm9wZXJseSBt YXRjaCwgc2luY2Ugd2UgZGVjcmVtZW50IG9ubHkgb25jZQorCQkJICAgICAgIGZvciBlYWNo IGtleSdzIHJlZmNvdW50LiBUaGVyZWZvcmUgYXZvaWQgdGhpcworCQkJICAgICAgIGluY3Jl bWVudCBmb3IgT3Blbk1QIGNvbnN0cnVjdHMuICAqLworCQkJICAgIGlmICghb3Blbm1wX3Ap CisJCQkgICAgICBnb21wX2luY3JlbWVudF9yZWZjb3VudCAoaywgcmVmY291bnRfc2V0KTsK IAkJCSAgICBnb21wX21hcF9wb2ludGVyICh0Z3QsIGFxLAogCQkJCQkgICAgICAodWludHB0 cl90KSAqKHZvaWQgKiopIGhvc3RhZGRyc1tqXSwKIAkJCQkJICAgICAgay0+dGd0X29mZnNl dAogCQkJCQkgICAgICArICgodWludHB0cl90KSBob3N0YWRkcnNbal0KIAkJCQkJCSAtIGst Pmhvc3Rfc3RhcnQpLAogCQkJCQkgICAgICBzaXplc1tqXSwgY2J1ZnApOwogCQkJICB9CkBA IC0xNDIyLDMyICsxNTc5LDQ5IEBAIGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKHN0cnVjdCBn b21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwKICAgICAgIHRndCA9IE5VTEw7CiAgICAgfQog CiAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7CiAgIHJldHVybiB0Z3Q7 CiB9CiAKLWF0dHJpYnV0ZV9oaWRkZW4gc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqCitzdGF0 aWMgc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqCiBnb21wX21hcF92YXJzIChzdHJ1Y3QgZ29t cF9kZXZpY2VfZGVzY3IgKmRldmljZXAsIHNpemVfdCBtYXBudW0sCiAJICAgICAgIHZvaWQg Kipob3N0YWRkcnMsIHZvaWQgKipkZXZhZGRycywgc2l6ZV90ICpzaXplcywgdm9pZCAqa2lu ZHMsCi0JICAgICAgIGJvb2wgc2hvcnRfbWFwa2luZCwgZW51bSBnb21wX21hcF92YXJzX2tp bmQgcHJhZ21hX2tpbmQpCisJICAgICAgIGJvb2wgc2hvcnRfbWFwa2luZCwgaHRhYl90ICpy ZWZjb3VudF9zZXQsCisJICAgICAgIGVudW0gZ29tcF9tYXBfdmFyc19raW5kIHByYWdtYV9r aW5kKQogewotICByZXR1cm4gZ29tcF9tYXBfdmFyc19pbnRlcm5hbCAoZGV2aWNlcCwgTlVM TCwgbWFwbnVtLCBob3N0YWRkcnMsIGRldmFkZHJzLAotCQkJCSBzaXplcywga2luZHMsIHNo b3J0X21hcGtpbmQsIHByYWdtYV9raW5kKTsKKyAgLyogVGhpcyBtYW5hZ2VtZW50IG9mIGEg bG9jYWwgcmVmY291bnRfc2V0IGlzIGZvciBjb252ZW5pZW5jZSBvZiBjYWxsZXJzCisgICAg IHdobyBkbyBub3Qgc2hhcmUgYSByZWZjb3VudF9zZXQgb3ZlciBtdWx0aXBsZSBtYXAvdW5t YXAgdXNlcy4gICovCisgIGh0YWJfdCBsb2NhbF9yZWZjb3VudF9zZXQgPSBOVUxMOworICBp ZiAocmVmY291bnRfc2V0ID09IE5VTEwpCisgICAgeworICAgICAgbG9jYWxfcmVmY291bnRf c2V0ID0gaHRhYl9jcmVhdGUgKG1hcG51bSk7CisgICAgICByZWZjb3VudF9zZXQgPSAmbG9j YWxfcmVmY291bnRfc2V0OworICAgIH0KKworICBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0 Z3Q7CisgIHRndCA9IGdvbXBfbWFwX3ZhcnNfaW50ZXJuYWwgKGRldmljZXAsIE5VTEwsIG1h cG51bSwgaG9zdGFkZHJzLCBkZXZhZGRycywKKwkJCQlzaXplcywga2luZHMsIHNob3J0X21h cGtpbmQsIHJlZmNvdW50X3NldCwKKwkJCQlwcmFnbWFfa2luZCk7CisgIGlmIChsb2NhbF9y ZWZjb3VudF9zZXQpCisgICAgaHRhYl9mcmVlIChsb2NhbF9yZWZjb3VudF9zZXQpOworCisg IHJldHVybiB0Z3Q7CiB9CiAKIGF0dHJpYnV0ZV9oaWRkZW4gc3RydWN0IHRhcmdldF9tZW1f ZGVzYyAqCi1nb21wX21hcF92YXJzX2FzeW5jIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3Ig KmRldmljZXAsCi0JCSAgICAgc3RydWN0IGdvYWNjX2FzeW5jcXVldWUgKmFxLCBzaXplX3Qg bWFwbnVtLAotCQkgICAgIHZvaWQgKipob3N0YWRkcnMsIHZvaWQgKipkZXZhZGRycywgc2l6 ZV90ICpzaXplcywKLQkJICAgICB2b2lkICpraW5kcywgYm9vbCBzaG9ydF9tYXBraW5kLAot CQkgICAgIGVudW0gZ29tcF9tYXBfdmFyc19raW5kIHByYWdtYV9raW5kKQorZ29hY2NfbWFw X3ZhcnMgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwKKwkJc3RydWN0IGdv YWNjX2FzeW5jcXVldWUgKmFxLCBzaXplX3QgbWFwbnVtLAorCQl2b2lkICoqaG9zdGFkZHJz LCB2b2lkICoqZGV2YWRkcnMsIHNpemVfdCAqc2l6ZXMsCisJCXZvaWQgKmtpbmRzLCBib29s IHNob3J0X21hcGtpbmQsCisJCWVudW0gZ29tcF9tYXBfdmFyc19raW5kIHByYWdtYV9raW5k KQogewogICByZXR1cm4gZ29tcF9tYXBfdmFyc19pbnRlcm5hbCAoZGV2aWNlcCwgYXEsIG1h cG51bSwgaG9zdGFkZHJzLCBkZXZhZGRycywKLQkJCQkgc2l6ZXMsIGtpbmRzLCBzaG9ydF9t YXBraW5kLCBwcmFnbWFfa2luZCk7CisJCQkJIHNpemVzLCBraW5kcywgc2hvcnRfbWFwa2lu ZCwgTlVMTCwKKwkJCQkgR09NUF9NQVBfVkFSU19PUEVOQUNDIHwgcHJhZ21hX2tpbmQpOwog fQogCiBzdGF0aWMgdm9pZAogZ29tcF91bm1hcF90Z3QgKHN0cnVjdCB0YXJnZXRfbWVtX2Rl c2MgKnRndCkKIHsKICAgLyogRGVhbGxvY2F0ZSBvbiB0YXJnZXQgdGhlIHRndC0+dGd0X3N0 YXJ0IC4uIHRndC0+dGd0X2VuZCByZWdpb24uICAqLwogICBpZiAodGd0LT50Z3RfZW5kKQpA QCAtMTQ3NywzMCArMTY1MSw2NCBAQCBnb21wX3VucmVmX3RndCAodm9pZCAqcHRyKQogCiBz dGF0aWMgdm9pZAogZ29tcF91bnJlZl90Z3Rfdm9pZCAodm9pZCAqcHRyKQogewogICAodm9p ZCkgZ29tcF91bnJlZl90Z3QgKHB0cik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1 dGVfXygoYWx3YXlzX2lubGluZSkpIGJvb2wKLWdvbXBfcmVtb3ZlX3Zhcl9pbnRlcm5hbCAo c3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwLCBzcGxheV90cmVlX2tleSBrLAot CQkJICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEpCitzdGF0aWMgdm9pZAorZ29tcF9y ZW1vdmVfc3BsYXlfdHJlZV9rZXkgKHNwbGF5X3RyZWUgc3AsIHNwbGF5X3RyZWVfa2V5IGsp CiB7Ci0gIGJvb2wgaXNfdGd0X3VubWFwcGVkID0gZmFsc2U7Ci0gIHNwbGF5X3RyZWVfcmVt b3ZlICgmZGV2aWNlcC0+bWVtX21hcCwgayk7CisgIHNwbGF5X3RyZWVfcmVtb3ZlIChzcCwg ayk7CiAgIGlmIChrLT5hdXgpCiAgICAgewogICAgICAgaWYgKGstPmF1eC0+bGlua19rZXkp Ci0Jc3BsYXlfdHJlZV9pbnNlcnQgKCZkZXZpY2VwLT5tZW1fbWFwLAotCQkJICAgKHNwbGF5 X3RyZWVfbm9kZSkgay0+YXV4LT5saW5rX2tleSk7CisJc3BsYXlfdHJlZV9pbnNlcnQgKHNw LCAoc3BsYXlfdHJlZV9ub2RlKSBrLT5hdXgtPmxpbmtfa2V5KTsKICAgICAgIGlmIChrLT5h dXgtPmF0dGFjaF9jb3VudCkKIAlmcmVlIChrLT5hdXgtPmF0dGFjaF9jb3VudCk7CiAgICAg ICBmcmVlIChrLT5hdXgpOwogICAgICAgay0+YXV4ID0gTlVMTDsKICAgICB9Cit9CisKK3N0 YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGJvb2wKK2dvbXBf cmVtb3ZlX3Zhcl9pbnRlcm5hbCAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2Vw LCBzcGxheV90cmVlX2tleSBrLAorCQkJICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEp Cit7CisgIGJvb2wgaXNfdGd0X3VubWFwcGVkID0gZmFsc2U7CisKKyAgaWYgKFJFRkNPVU5U X1NUUlVDVEVMRU1fUCAoay0+cmVmY291bnQpKQorICAgIHsKKyAgICAgIGlmIChSRUZDT1VO VF9TVFJVQ1RFTEVNX0ZJUlNUX1AgKGstPnJlZmNvdW50KSA9PSBmYWxzZSkKKwkvKiBJbmZl ciB0aGUgc3BsYXlfdHJlZV9rZXkgb2YgdGhlIGZpcnN0IHN0cnVjdGVsZW0ga2V5IHVzaW5n IHRoZQorCSAgIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHN0cnVjdGxlbWVfcmVmY291bnQuICAq LworCWsgPSAoc3BsYXlfdHJlZV9rZXkpICgoY2hhciAqKSBrLT5zdHJ1Y3RlbGVtX3JlZmNv dW50X3B0cgorCQkJICAgICAgLSBvZmZzZXRvZiAoc3RydWN0IHNwbGF5X3RyZWVfa2V5X3Ms CisJCQkJCSAgc3RydWN0ZWxlbV9yZWZjb3VudCkpOworICAgICAgYXNzZXJ0IChSRUZDT1VO VF9TVFJVQ1RFTEVNX0ZJUlNUX1AgKGstPnJlZmNvdW50KSk7CisKKyAgICAgIC8qIFRoZSBh cnJheSBjcmVhdGVkIGJ5IGdvbXBfbWFwX3ZhcnMgaXMgYW4gYXJyYXkgb2Ygc3BsYXlfdHJl ZV9ub2RlcywKKwkgd2l0aCB0aGUgc3BsYXlfdHJlZV9rZXlzIGVtYmVkZGVkIGluc2lkZS4g ICovCisgICAgICBzcGxheV90cmVlX25vZGUgbm9kZSA9CisJKHNwbGF5X3RyZWVfbm9kZSkg KChjaGFyICopIGsKKwkJCSAgIC0gb2Zmc2V0b2YgKHN0cnVjdCBzcGxheV90cmVlX25vZGVf cywga2V5KSk7CisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICAvKiBTdGFydGluZyBmcm9t IHRoZSBfRklSU1Qga2V5LCBhbmQgY29udGludWUgZm9yIGFsbCBmb2xsb3dpbmcKKwkgICAg IHNpYmxpbmcga2V5cy4gICovCisJICBnb21wX3JlbW92ZV9zcGxheV90cmVlX2tleSAoJmRl dmljZXAtPm1lbV9tYXAsIGspOworCSAgaWYgKFJFRkNPVU5UX1NUUlVDVEVMRU1fTEFTVF9Q IChrLT5yZWZjb3VudCkpCisJICAgIGJyZWFrOworCSAgZWxzZQorCSAgICBrID0gJigrK25v ZGUpLT5rZXk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIGdvbXBfcmVtb3ZlX3NwbGF5X3Ry ZWVfa2V5ICgmZGV2aWNlcC0+bWVtX21hcCwgayk7CisKICAgaWYgKGFxKQogICAgIGRldmlj ZXAtPm9wZW5hY2MuYXN5bmMucXVldWVfY2FsbGJhY2tfZnVuYyAoYXEsIGdvbXBfdW5yZWZf dGd0X3ZvaWQsCiAJCQkJCQkodm9pZCAqKSBrLT50Z3QpOwogICBlbHNlCiAgICAgaXNfdGd0 X3VubWFwcGVkID0gZ29tcF91bnJlZl90Z3QgKCh2b2lkICopIGstPnRndCk7CiAgIHJldHVy biBpc190Z3RfdW5tYXBwZWQ7CiB9CkBAIC0xNTI2LDE1ICsxNzM0LDE1IEBAIGdvbXBfcmVt b3ZlX3Zhcl9hc3luYyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwLCBzcGxh eV90cmVlX2tleSBrLAogCiAvKiBVbm1hcCB2YXJpYWJsZXMgZGVzY3JpYmVkIGJ5IFRHVC4g IElmIERPX0NPUFlGUk9NIGlzIHRydWUsIGNvcHkgcmVsZXZhbnQKICAgIHZhcmlhYmxlcyBi YWNrIGZyb20gZGV2aWNlIHRvIGhvc3Q6IGlmIGl0IGlzIGZhbHNlLCBpdCBpcyBhc3N1bWVk IHRoYXQgdGhpcwogICAgaGFzIGJlZW4gZG9uZSBhbHJlYWR5LiAgKi8KIAogc3RhdGljIGlu bGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgdm9pZAogZ29tcF91bm1hcF92 YXJzX2ludGVybmFsIChzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QsIGJvb2wgZG9fY29w eWZyb20sCi0JCQkgIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcSkKKwkJCSAgaHRhYl90 ICpyZWZjb3VudF9zZXQsIHN0cnVjdCBnb2FjY19hc3luY3F1ZXVlICphcSkKIHsKICAgc3Ry dWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpkZXZpY2VwID0gdGd0LT5kZXZpY2VfZGVzY3I7CiAK ICAgaWYgKHRndC0+bGlzdF9jb3VudCA9PSAwKQogICAgIHsKICAgICAgIGZyZWUgKHRndCk7 CiAgICAgICByZXR1cm47CkBAIC0xNTY5LDMxICsxNzc3LDI1IEBAIGdvbXBfdW5tYXBfdmFy c19pbnRlcm5hbCAoc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqdGd0LCBib29sIGRvX2NvcHlm cm9tLAogCWNvbnRpbnVlOwogCiAgICAgICAvKiBPcGVuQUNDICdhdHRhY2gnLydkZXRhY2gn IGRvZXNuJ3QgYWZmZWN0IHN0cnVjdHVyZWQvZHluYW1pYyByZWZlcmVuY2UKIAkgY291bnRz ICgnbi0+cmVmY291bnQnLCAnbi0+ZHluYW1pY19yZWZjb3VudCcpLiAgKi8KICAgICAgIGlm ICh0Z3QtPmxpc3RbaV0uaXNfYXR0YWNoKQogCWNvbnRpbnVlOwogCi0gICAgICBib29sIGRv X3VubWFwID0gZmFsc2U7Ci0gICAgICBpZiAoay0+cmVmY291bnQgPiAxICYmIGstPnJlZmNv dW50ICE9IFJFRkNPVU5UX0lORklOSVRZKQotCWstPnJlZmNvdW50LS07Ci0gICAgICBlbHNl IGlmIChrLT5yZWZjb3VudCA9PSAxKQotCXsKLQkgIGstPnJlZmNvdW50LS07Ci0JICBkb191 bm1hcCA9IHRydWU7Ci0JfQorICAgICAgYm9vbCBkb19jb3B5LCBkb19yZW1vdmU7CisgICAg ICBnb21wX2RlY3JlbWVudF9yZWZjb3VudCAoaywgcmVmY291bnRfc2V0LCBmYWxzZSwgJmRv X2NvcHksICZkb19yZW1vdmUpOwogCi0gICAgICBpZiAoKGRvX3VubWFwICYmIGRvX2NvcHlm cm9tICYmIHRndC0+bGlzdFtpXS5jb3B5X2Zyb20pCisgICAgICBpZiAoKGRvX2NvcHkgJiYg ZG9fY29weWZyb20gJiYgdGd0LT5saXN0W2ldLmNvcHlfZnJvbSkKIAkgIHx8IHRndC0+bGlz dFtpXS5hbHdheXNfY29weV9mcm9tKQogCWdvbXBfY29weV9kZXYyaG9zdCAoZGV2aWNlcCwg YXEsCiAJCQkgICAgKHZvaWQgKikgKGstPmhvc3Rfc3RhcnQgKyB0Z3QtPmxpc3RbaV0ub2Zm c2V0KSwKIAkJCSAgICAodm9pZCAqKSAoay0+dGd0LT50Z3Rfc3RhcnQgKyBrLT50Z3Rfb2Zm c2V0CiAJCQkJICAgICAgKyB0Z3QtPmxpc3RbaV0ub2Zmc2V0KSwKIAkJCSAgICB0Z3QtPmxp c3RbaV0ubGVuZ3RoKTsKLSAgICAgIGlmIChkb191bm1hcCkKKyAgICAgIGlmIChkb19yZW1v dmUpCiAJewogCSAgc3RydWN0IHRhcmdldF9tZW1fZGVzYyAqa190Z3QgPSBrLT50Z3Q7CiAJ ICBib29sIGlzX3RndF91bm1hcHBlZCA9IGdvbXBfcmVtb3ZlX3ZhciAoZGV2aWNlcCwgayk7 CiAJICAvKiBJdCB3b3VsZCBiZSBiYWQgaWYgVEdUIGdvdCB1bm1hcHBlZCB3aGlsZSB3ZSdy ZSBzdGlsbCBpdGVyYXRpbmcKIAkgICAgIG92ZXIgaXRzIExJU1RfQ09VTlQsIGFuZCBhbHNv IGV4cGVjdCB0byB1c2UgaXQgaW4gdGhlIGZvbGxvd2luZwogCSAgICAgY29kZS4gICovCiAJ ICBhc3NlcnQgKCFpc190Z3RfdW5tYXBwZWQKQEAgLTE2MDYsMjUgKzE4MDgsMzggQEAgZ29t cF91bm1hcF92YXJzX2ludGVybmFsIChzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QsIGJv b2wgZG9fY29weWZyb20sCiAJCQkJCQkodm9pZCAqKSB0Z3QpOwogICBlbHNlCiAgICAgZ29t cF91bnJlZl90Z3QgKCh2b2lkICopIHRndCk7CiAKICAgZ29tcF9tdXRleF91bmxvY2sgKCZk ZXZpY2VwLT5sb2NrKTsKIH0KIAotYXR0cmlidXRlX2hpZGRlbiB2b2lkCi1nb21wX3VubWFw X3ZhcnMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRndCwgYm9vbCBkb19jb3B5ZnJvbSkK K3N0YXRpYyB2b2lkCitnb21wX3VubWFwX3ZhcnMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2Mg KnRndCwgYm9vbCBkb19jb3B5ZnJvbSwKKwkJIGh0YWJfdCAqcmVmY291bnRfc2V0KQogewot ICBnb21wX3VubWFwX3ZhcnNfaW50ZXJuYWwgKHRndCwgZG9fY29weWZyb20sIE5VTEwpOwor ICAvKiBUaGlzIG1hbmFnZW1lbnQgb2YgYSBsb2NhbCByZWZjb3VudF9zZXQgaXMgZm9yIGNv bnZlbmllbmNlIG9mIGNhbGxlcnMKKyAgICAgd2hvIGRvIG5vdCBzaGFyZSBhIHJlZmNvdW50 X3NldCBvdmVyIG11bHRpcGxlIG1hcC91bm1hcCB1c2VzLiAgKi8KKyAgaHRhYl90IGxvY2Fs X3JlZmNvdW50X3NldCA9IE5VTEw7CisgIGlmIChyZWZjb3VudF9zZXQgPT0gTlVMTCkKKyAg ICB7CisgICAgICBsb2NhbF9yZWZjb3VudF9zZXQgPSBodGFiX2NyZWF0ZSAodGd0LT5saXN0 X2NvdW50KTsKKyAgICAgIHJlZmNvdW50X3NldCA9ICZsb2NhbF9yZWZjb3VudF9zZXQ7Cisg ICAgfQorCisgIGdvbXBfdW5tYXBfdmFyc19pbnRlcm5hbCAodGd0LCBkb19jb3B5ZnJvbSwg cmVmY291bnRfc2V0LCBOVUxMKTsKKworICBpZiAobG9jYWxfcmVmY291bnRfc2V0KQorICAg IGh0YWJfZnJlZSAobG9jYWxfcmVmY291bnRfc2V0KTsKIH0KIAogYXR0cmlidXRlX2hpZGRl biB2b2lkCi1nb21wX3VubWFwX3ZhcnNfYXN5bmMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2Mg KnRndCwgYm9vbCBkb19jb3B5ZnJvbSwKLQkJICAgICAgIHN0cnVjdCBnb2FjY19hc3luY3F1 ZXVlICphcSkKK2dvYWNjX3VubWFwX3ZhcnMgKHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRn dCwgYm9vbCBkb19jb3B5ZnJvbSwKKwkJICBzdHJ1Y3QgZ29hY2NfYXN5bmNxdWV1ZSAqYXEp CiB7Ci0gIGdvbXBfdW5tYXBfdmFyc19pbnRlcm5hbCAodGd0LCBkb19jb3B5ZnJvbSwgYXEp OworICBnb21wX3VubWFwX3ZhcnNfaW50ZXJuYWwgKHRndCwgZG9fY29weWZyb20sIE5VTEws IGFxKTsKIH0KIAogc3RhdGljIHZvaWQKIGdvbXBfdXBkYXRlIChzdHJ1Y3QgZ29tcF9kZXZp Y2VfZGVzY3IgKmRldmljZXAsIHNpemVfdCBtYXBudW0sIHZvaWQgKipob3N0YWRkcnMsCiAJ ICAgICBzaXplX3QgKnNpemVzLCB2b2lkICpraW5kcywgYm9vbCBzaG9ydF9tYXBraW5kKQog ewogICBzaXplX3QgaTsKQEAgLTIxMjYsMjAgKzIzNDEsMjMgQEAgR09NUF90YXJnZXQgKGlu dCBkZXZpY2UsIHZvaWQgKCpmbikgKHZvaWQgKiksIGNvbnN0IHZvaWQgKnVudXNlZCwKICAg aWYgKGRldmljZXAgPT0gTlVMTAogICAgICAgfHwgIShkZXZpY2VwLT5jYXBhYmlsaXRpZXMg JiBHT01QX09GRkxPQURfQ0FQX09QRU5NUF80MDApCiAgICAgICAvKiBBbGwgc2hhcmVkIG1l bW9yeSBkZXZpY2VzIHNob3VsZCB1c2UgdGhlIEdPTVBfdGFyZ2V0X2V4dCBmdW5jdGlvbi4g ICovCiAgICAgICB8fCBkZXZpY2VwLT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQ X1NIQVJFRF9NRU0KICAgICAgIHx8ICEoZm5fYWRkciA9IGdvbXBfZ2V0X3RhcmdldF9mbl9h ZGRyIChkZXZpY2VwLCBmbikpKQogICAgIHJldHVybiBnb21wX3RhcmdldF9mYWxsYmFjayAo Zm4sIGhvc3RhZGRycywgZGV2aWNlcCk7CiAKKyAgaHRhYl90IHJlZmNvdW50X3NldCA9IGh0 YWJfY3JlYXRlIChtYXBudW0pOwogICBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3RfdmFy cwogICAgID0gZ29tcF9tYXBfdmFycyAoZGV2aWNlcCwgbWFwbnVtLCBob3N0YWRkcnMsIE5V TEwsIHNpemVzLCBraW5kcywgZmFsc2UsCi0JCSAgICAgR09NUF9NQVBfVkFSU19UQVJHRVQp OworCQkgICAgICZyZWZjb3VudF9zZXQsIEdPTVBfTUFQX1ZBUlNfVEFSR0VUKTsKICAgZGV2 aWNlcC0+cnVuX2Z1bmMgKGRldmljZXAtPnRhcmdldF9pZCwgZm5fYWRkciwgKHZvaWQgKikg dGd0X3ZhcnMtPnRndF9zdGFydCwKIAkJICAgICBOVUxMKTsKLSAgZ29tcF91bm1hcF92YXJz ICh0Z3RfdmFycywgdHJ1ZSk7CisgIGh0YWJfY2xlYXIgKHJlZmNvdW50X3NldCk7CisgIGdv bXBfdW5tYXBfdmFycyAodGd0X3ZhcnMsIHRydWUsICZyZWZjb3VudF9zZXQpOworICBodGFi X2ZyZWUgKHJlZmNvdW50X3NldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50 CiBjbGVhcl91bnN1cHBvcnRlZF9mbGFncyAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpk ZXZpY2VwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAgIC8qIElmIHdlIGNhbm5vdCBydW4g YXN5bmNocm9ub3VzbHksIHNpbXBseSBpZ25vcmUgbm93YWl0LiAgKi8KICAgaWYgKGRldmlj ZXAgIT0gTlVMTCAmJiBkZXZpY2VwLT5hc3luY19ydW5fZnVuYyA9PSBOVUxMKQpAQCAtMjI2 NSwxNCArMjQ4MywxNiBAQCBHT01QX3RhcmdldF9leHQgKGludCBkZXZpY2UsIHZvaWQgKCpm bikgKHZvaWQgKiksIHNpemVfdCBtYXBudW0sCiAJICAgIH0KIAl9CiAgICAgICBnb21wX3Rh cmdldF9mYWxsYmFjayAoZm4sIGhvc3RhZGRycywgZGV2aWNlcCk7CiAgICAgICByZXR1cm47 CiAgICAgfQogCiAgIHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRndF92YXJzOworICBodGFi X3QgcmVmY291bnRfc2V0ID0gTlVMTDsKKwogICBpZiAoZGV2aWNlcC0+Y2FwYWJpbGl0aWVz ICYgR09NUF9PRkZMT0FEX0NBUF9TSEFSRURfTUVNKQogICAgIHsKICAgICAgIGlmICghZnBj X2RvbmUpCiAJewogCSAgY2FsY3VsYXRlX2ZpcnN0cHJpdmF0ZV9yZXF1aXJlbWVudHMgKG1h cG51bSwgc2l6ZXMsIGtpbmRzLAogCQkJCQkgICAgICAgJnRndF9hbGlnbiwgJnRndF9zaXpl KTsKIAkgIGlmICh0Z3RfYWxpZ24pCkBAIC0yMjgxLDIxICsyNTAxLDI5IEBAIEdPTVBfdGFy Z2V0X2V4dCAoaW50IGRldmljZSwgdm9pZCAoKmZuKSAodm9pZCAqKSwgc2l6ZV90IG1hcG51 bSwKIAkgICAgICBjb3B5X2ZpcnN0cHJpdmF0ZV9kYXRhICh0Z3QsIG1hcG51bSwgaG9zdGFk ZHJzLCBzaXplcywga2luZHMsCiAJCQkJICAgICAgdGd0X2FsaWduLCB0Z3Rfc2l6ZSk7CiAJ ICAgIH0KIAl9CiAgICAgICB0Z3RfdmFycyA9IE5VTEw7CiAgICAgfQogICBlbHNlCi0gICAg dGd0X3ZhcnMgPSBnb21wX21hcF92YXJzIChkZXZpY2VwLCBtYXBudW0sIGhvc3RhZGRycywg TlVMTCwgc2l6ZXMsIGtpbmRzLAotCQkJICAgICAgdHJ1ZSwgR09NUF9NQVBfVkFSU19UQVJH RVQpOworICAgIHsKKyAgICAgIHJlZmNvdW50X3NldCA9IGh0YWJfY3JlYXRlIChtYXBudW0p OworICAgICAgdGd0X3ZhcnMgPSBnb21wX21hcF92YXJzIChkZXZpY2VwLCBtYXBudW0sIGhv c3RhZGRycywgTlVMTCwgc2l6ZXMsIGtpbmRzLAorCQkJCXRydWUsICZyZWZjb3VudF9zZXQs IEdPTVBfTUFQX1ZBUlNfVEFSR0VUKTsKKyAgICB9CiAgIGRldmljZXAtPnJ1bl9mdW5jIChk ZXZpY2VwLT50YXJnZXRfaWQsIGZuX2FkZHIsCiAJCSAgICAgdGd0X3ZhcnMgPyAodm9pZCAq KSB0Z3RfdmFycy0+dGd0X3N0YXJ0IDogaG9zdGFkZHJzLAogCQkgICAgIGFyZ3MpOwogICBp ZiAodGd0X3ZhcnMpCi0gICAgZ29tcF91bm1hcF92YXJzICh0Z3RfdmFycywgdHJ1ZSk7Cisg ICAgeworICAgICAgaHRhYl9jbGVhciAocmVmY291bnRfc2V0KTsKKyAgICAgIGdvbXBfdW5t YXBfdmFycyAodGd0X3ZhcnMsIHRydWUsICZyZWZjb3VudF9zZXQpOworICAgIH0KKyAgaWYg KHJlZmNvdW50X3NldCkKKyAgICBodGFiX2ZyZWUgKHJlZmNvdW50X3NldCk7CiB9CiAKIC8q IEhvc3QgZmFsbGJhY2sgZm9yIEdPTVBfdGFyZ2V0X2RhdGF7LF9leHR9IHJvdXRpbmVzLiAg Ki8KIAogc3RhdGljIHZvaWQKIGdvbXBfdGFyZ2V0X2RhdGFfZmFsbGJhY2sgKHN0cnVjdCBn b21wX2RldmljZV9kZXNjciAqZGV2aWNlcCkKIHsKQEAgLTIzMTAsMTUgKzI1MzgsMTUgQEAg Z29tcF90YXJnZXRfZGF0YV9mYWxsYmFjayAoc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2NyICpk ZXZpY2VwKQogICAgIHsKICAgICAgIC8qIEV2ZW4gd2hlbiBkb2luZyBhIGhvc3QgZmFsbGJh Y2ssIGlmIHRoZXJlIGFyZSBhbnkgYWN0aXZlCiAgICAgICAgICAjcHJhZ21hIG9tcCB0YXJn ZXQgZGF0YSBjb25zdHJ1Y3RzLCBuZWVkIHRvIHJlbWVtYmVyIHRoZQogICAgICAgICAgbmV3 ICNwcmFnbWEgb21wIHRhcmdldCBkYXRhLCBvdGhlcndpc2UgR09NUF90YXJnZXRfZW5kX2Rh dGEKICAgICAgICAgIHdvdWxkIGdldCBvdXQgb2Ygc3luYy4gICovCiAgICAgICBzdHJ1Y3Qg dGFyZ2V0X21lbV9kZXNjICp0Z3QKIAk9IGdvbXBfbWFwX3ZhcnMgKE5VTEwsIDAsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIGZhbHNlLAotCQkJIEdPTVBfTUFQX1ZBUlNfREFUQSk7CisJ CQkgTlVMTCwgR09NUF9NQVBfVkFSU19EQVRBKTsKICAgICAgIHRndC0+cHJldiA9IGljdi0+ dGFyZ2V0X2RhdGE7CiAgICAgICBpY3YtPnRhcmdldF9kYXRhID0gdGd0OwogICAgIH0KIH0K IAogdm9pZAogR09NUF90YXJnZXRfZGF0YSAoaW50IGRldmljZSwgY29uc3Qgdm9pZCAqdW51 c2VkLCBzaXplX3QgbWFwbnVtLApAQCAtMjMyOSwxNSArMjU1NywxNSBAQCBHT01QX3Rhcmdl dF9kYXRhIChpbnQgZGV2aWNlLCBjb25zdCB2b2lkICp1bnVzZWQsIHNpemVfdCBtYXBudW0s CiAgIGlmIChkZXZpY2VwID09IE5VTEwKICAgICAgIHx8ICEoZGV2aWNlcC0+Y2FwYWJpbGl0 aWVzICYgR09NUF9PRkZMT0FEX0NBUF9PUEVOTVBfNDAwKQogICAgICAgfHwgKGRldmljZXAt PmNhcGFiaWxpdGllcyAmIEdPTVBfT0ZGTE9BRF9DQVBfU0hBUkVEX01FTSkpCiAgICAgcmV0 dXJuIGdvbXBfdGFyZ2V0X2RhdGFfZmFsbGJhY2sgKGRldmljZXApOwogCiAgIHN0cnVjdCB0 YXJnZXRfbWVtX2Rlc2MgKnRndAogICAgID0gZ29tcF9tYXBfdmFycyAoZGV2aWNlcCwgbWFw bnVtLCBob3N0YWRkcnMsIE5VTEwsIHNpemVzLCBraW5kcywgZmFsc2UsCi0JCSAgICAgR09N UF9NQVBfVkFSU19EQVRBKTsKKwkJICAgICBOVUxMLCBHT01QX01BUF9WQVJTX0RBVEEpOwog ICBzdHJ1Y3QgZ29tcF90YXNrX2ljdiAqaWN2ID0gZ29tcF9pY3YgKHRydWUpOwogICB0Z3Qt PnByZXYgPSBpY3YtPnRhcmdldF9kYXRhOwogICBpY3YtPnRhcmdldF9kYXRhID0gdGd0Owog fQogCiB2b2lkCiBHT01QX3RhcmdldF9kYXRhX2V4dCAoaW50IGRldmljZSwgc2l6ZV90IG1h cG51bSwgdm9pZCAqKmhvc3RhZGRycywKQEAgLTIzNDgsMjkgKzI1NzYsMjkgQEAgR09NUF90 YXJnZXRfZGF0YV9leHQgKGludCBkZXZpY2UsIHNpemVfdCBtYXBudW0sIHZvaWQgKipob3N0 YWRkcnMsCiAgIGlmIChkZXZpY2VwID09IE5VTEwKICAgICAgIHx8ICEoZGV2aWNlcC0+Y2Fw YWJpbGl0aWVzICYgR09NUF9PRkZMT0FEX0NBUF9PUEVOTVBfNDAwKQogICAgICAgfHwgZGV2 aWNlcC0+Y2FwYWJpbGl0aWVzICYgR09NUF9PRkZMT0FEX0NBUF9TSEFSRURfTUVNKQogICAg IHJldHVybiBnb21wX3RhcmdldF9kYXRhX2ZhbGxiYWNrIChkZXZpY2VwKTsKIAogICBzdHJ1 Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QKICAgICA9IGdvbXBfbWFwX3ZhcnMgKGRldmljZXAs IG1hcG51bSwgaG9zdGFkZHJzLCBOVUxMLCBzaXplcywga2luZHMsIHRydWUsCi0JCSAgICAg R09NUF9NQVBfVkFSU19EQVRBKTsKKwkJICAgICBOVUxMLCBHT01QX01BUF9WQVJTX0RBVEEp OwogICBzdHJ1Y3QgZ29tcF90YXNrX2ljdiAqaWN2ID0gZ29tcF9pY3YgKHRydWUpOwogICB0 Z3QtPnByZXYgPSBpY3YtPnRhcmdldF9kYXRhOwogICBpY3YtPnRhcmdldF9kYXRhID0gdGd0 OwogfQogCiB2b2lkCiBHT01QX3RhcmdldF9lbmRfZGF0YSAodm9pZCkKIHsKICAgc3RydWN0 IGdvbXBfdGFza19pY3YgKmljdiA9IGdvbXBfaWN2IChmYWxzZSk7CiAgIGlmIChpY3YtPnRh cmdldF9kYXRhKQogICAgIHsKICAgICAgIHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRndCA9 IGljdi0+dGFyZ2V0X2RhdGE7CiAgICAgICBpY3YtPnRhcmdldF9kYXRhID0gdGd0LT5wcmV2 OwotICAgICAgZ29tcF91bm1hcF92YXJzICh0Z3QsIHRydWUpOworICAgICAgZ29tcF91bm1h cF92YXJzICh0Z3QsIHRydWUsIE5VTEwpOwogICAgIH0KIH0KIAogdm9pZAogR09NUF90YXJn ZXRfdXBkYXRlIChpbnQgZGV2aWNlLCBjb25zdCB2b2lkICp1bnVzZWQsIHNpemVfdCBtYXBu dW0sCiAJCSAgICB2b2lkICoqaG9zdGFkZHJzLCBzaXplX3QgKnNpemVzLCB1bnNpZ25lZCBj aGFyICpraW5kcykKIHsKQEAgLTI0NjEsMTUgKzI2ODksMTYgQEAgR09NUF90YXJnZXRfdXBk YXRlX2V4dCAoaW50IGRldmljZSwgc2l6ZV90IG1hcG51bSwgdm9pZCAqKmhvc3RhZGRycywK ICAgICB9CiAKICAgZ29tcF91cGRhdGUgKGRldmljZXAsIG1hcG51bSwgaG9zdGFkZHJzLCBz aXplcywga2luZHMsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZAogZ29tcF9leGl0X2RhdGEg KHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwgc2l6ZV90IG1hcG51bSwKLQkJ dm9pZCAqKmhvc3RhZGRycywgc2l6ZV90ICpzaXplcywgdW5zaWduZWQgc2hvcnQgKmtpbmRz KQorCQl2b2lkICoqaG9zdGFkZHJzLCBzaXplX3QgKnNpemVzLCB1bnNpZ25lZCBzaG9ydCAq a2luZHMsCisJCWh0YWJfdCAqcmVmY291bnRfc2V0KQogewogICBjb25zdCBpbnQgdHlwZW1h c2sgPSAweGZmOwogICBzaXplX3QgaTsKICAgZ29tcF9tdXRleF9sb2NrICgmZGV2aWNlcC0+ bG9jayk7CiAgIGlmIChkZXZpY2VwLT5zdGF0ZSA9PSBHT01QX0RFVklDRV9GSU5BTElaRUQp CiAgICAgewogICAgICAgZ29tcF9tdXRleF91bmxvY2sgKCZkZXZpY2VwLT5sb2NrKTsKQEAg LTI0ODUsMTQgKzI3MTQsMTcgQEAgZ29tcF9leGl0X2RhdGEgKHN0cnVjdCBnb21wX2Rldmlj ZV9kZXNjciAqZGV2aWNlcCwgc2l6ZV90IG1hcG51bSwKIAlzcGxheV90cmVlX2tleSBuID0g c3BsYXlfdHJlZV9sb29rdXAgKCZkZXZpY2VwLT5tZW1fbWFwLCAmY3VyX25vZGUpOwogCiAJ aWYgKG4pCiAJICBnb21wX2RldGFjaF9wb2ludGVyIChkZXZpY2VwLCBOVUxMLCBuLCAodWlu dHB0cl90KSBob3N0YWRkcnNbaV0sCiAJCQkgICAgICAgZmFsc2UsIE5VTEwpOwogICAgICAg fQogCisgIGludCBucm12YXJzID0gMDsKKyAgc3BsYXlfdHJlZV9rZXkgcmVtb3ZlX3ZhcnNb bWFwbnVtXTsKKwogICBmb3IgKGkgPSAwOyBpIDwgbWFwbnVtOyBpKyspCiAgICAgewogICAg ICAgc3RydWN0IHNwbGF5X3RyZWVfa2V5X3MgY3VyX25vZGU7CiAgICAgICB1bnNpZ25lZCBj aGFyIGtpbmQgPSBraW5kc1tpXSAmIHR5cGVtYXNrOwogICAgICAgc3dpdGNoIChraW5kKQog CXsKIAljYXNlIEdPTVBfTUFQX0ZST006CkBAIC0yNTA2LDQxICsyNzM4LDU0IEBAIGdvbXBf ZXhpdF9kYXRhIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsIHNpemVfdCBt YXBudW0sCiAJICBzcGxheV90cmVlX2tleSBrID0gKGtpbmQgPT0gR09NUF9NQVBfREVMRVRF X1pFUk9fTEVOX0FSUkFZX1NFQ1RJT04KIAkJCSAgICAgIHx8IGtpbmQgPT0gR09NUF9NQVBf WkVST19MRU5fQVJSQVlfU0VDVElPTikKIAkgICAgPyBnb21wX21hcF8wbGVuX2xvb2t1cCAo JmRldmljZXAtPm1lbV9tYXAsICZjdXJfbm9kZSkKIAkgICAgOiBzcGxheV90cmVlX2xvb2t1 cCAoJmRldmljZXAtPm1lbV9tYXAsICZjdXJfbm9kZSk7CiAJICBpZiAoIWspCiAJICAgIGNv bnRpbnVlOwogCi0JICBpZiAoay0+cmVmY291bnQgPiAwICYmIGstPnJlZmNvdW50ICE9IFJF RkNPVU5UX0lORklOSVRZKQotCSAgICBrLT5yZWZjb3VudC0tOwotCSAgaWYgKChraW5kID09 IEdPTVBfTUFQX0RFTEVURQotCSAgICAgICB8fCBraW5kID09IEdPTVBfTUFQX0RFTEVURV9a RVJPX0xFTl9BUlJBWV9TRUNUSU9OKQotCSAgICAgICYmIGstPnJlZmNvdW50ICE9IFJFRkNP VU5UX0lORklOSVRZKQotCSAgICBrLT5yZWZjb3VudCA9IDA7CisJICBib29sIGRlbGV0ZV9w ID0gKGtpbmQgPT0gR09NUF9NQVBfREVMRVRFCisJCQkgICB8fCBraW5kID09IEdPTVBfTUFQ X0RFTEVURV9aRVJPX0xFTl9BUlJBWV9TRUNUSU9OKTsKKwkgIGJvb2wgZG9fY29weSwgZG9f cmVtb3ZlOworCSAgZ29tcF9kZWNyZW1lbnRfcmVmY291bnQgKGssIHJlZmNvdW50X3NldCwg ZGVsZXRlX3AsICZkb19jb3B5LAorCQkJCSAgICZkb19yZW1vdmUpOwogCi0JICBpZiAoKGtp bmQgPT0gR09NUF9NQVBfRlJPTSAmJiBrLT5yZWZjb3VudCA9PSAwKQorCSAgaWYgKChraW5k ID09IEdPTVBfTUFQX0ZST00gJiYgZG9fY29weSkKIAkgICAgICB8fCBraW5kID09IEdPTVBf TUFQX0FMV0FZU19GUk9NKQogCSAgICBnb21wX2NvcHlfZGV2Mmhvc3QgKGRldmljZXAsIE5V TEwsICh2b2lkICopIGN1cl9ub2RlLmhvc3Rfc3RhcnQsCiAJCQkJKHZvaWQgKikgKGstPnRn dC0+dGd0X3N0YXJ0ICsgay0+dGd0X29mZnNldAogCQkJCQkgICsgY3VyX25vZGUuaG9zdF9z dGFydAogCQkJCQkgIC0gay0+aG9zdF9zdGFydCksCiAJCQkJY3VyX25vZGUuaG9zdF9lbmQg LSBjdXJfbm9kZS5ob3N0X3N0YXJ0KTsKLQkgIGlmIChrLT5yZWZjb3VudCA9PSAwKQotCSAg ICBnb21wX3JlbW92ZV92YXIgKGRldmljZXAsIGspOworCisJICAvKiBTdHJ1Y3R1cmUgZWxl bWVudHMgbGlzdHMgYXJlIHJlbW92ZWQgYWx0b2dldGhlciBhdCBvbmNlLCB3aGljaAorCSAg ICAgbWF5IGNhdXNlIGltbWVkaWF0ZSBkZWFsbG9jYXRpb24gb2YgdGhlIHRhcmdldF9tZW1f ZGVzYywgY2F1c2luZworCSAgICAgZXJyb3JzIGlmIHdlIHN0aWxsIGhhdmUgZm9sbG93aW5n IGVsZW1lbnQgc2libGluZ3MgdG8gY29weSBiYWNrLgorCSAgICAgV2hpbGUgd2UncmUgYXQg aXQsIGl0IGFsc28gc2VlbXMgbW9yZSBkaXNjaXBsaW5lZCB0byBzaW1wbHkKKwkgICAgIHF1 ZXVlIGFsbCByZW1vdmFscyB0b2dldGhlciBmb3IgcHJvY2Vzc2luZyBiZWxvdy4KKworCSAg ICAgU3RydWN0dXJlZCBibG9jayB1bm1hcHBpbmcgKGkuZS4gZ29tcF91bm1hcF92YXJzX2lu dGVybmFsKSBzaG91bGQKKwkgICAgIG5vdCBoYXZlIHRoaXMgcHJvYmxlbSwgc2luY2UgdGhl eSBtYWludGFpbiBhbiBhZGRpdGlvbmFsCisJICAgICB0Z3QtPnJlZmNvdW50ID0gMSByZWZl cmVuY2UgdG8gdGhlIHRhcmdldF9tZW1fZGVzYyB0byBzdGFydCB3aXRoLgorCSAgKi8KKwkg IGlmIChkb19yZW1vdmUpCisJICAgIHJlbW92ZV92YXJzW25ybXZhcnMrK10gPSBrOwogCSAg YnJlYWs7CiAKIAljYXNlIEdPTVBfTUFQX0RFVEFDSDoKIAkgIGJyZWFrOwogCWRlZmF1bHQ6 CiAJICBnb21wX211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOwogCSAgZ29tcF9mYXRh bCAoIkdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweCUuMngi LAogCQkgICAgICBraW5kKTsKIAl9CiAgICAgfQogCisgIGZvciAoaW50IGkgPSAwOyBpIDwg bnJtdmFyczsgaSsrKQorICAgIGdvbXBfcmVtb3ZlX3ZhciAoZGV2aWNlcCwgcmVtb3ZlX3Zh cnNbaV0pOworCiAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmZGV2aWNlcC0+bG9jayk7CiB9CiAK IHZvaWQKIEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSAoaW50IGRldmljZSwgc2l6ZV90 IG1hcG51bSwgdm9pZCAqKmhvc3RhZGRycywKIAkJCSAgICAgc2l6ZV90ICpzaXplcywgdW5z aWduZWQgc2hvcnQgKmtpbmRzLAogCQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQg KipkZXBlbmQpCkBAIC0yNjEyLDQ4ICsyODU3LDUzIEBAIEdPTVBfdGFyZ2V0X2VudGVyX2V4 aXRfZGF0YSAoaW50IGRldmljZSwgc2l6ZV90IG1hcG51bSwgdm9pZCAqKmhvc3RhZGRycywK IAkgIGlmICh0aHItPnRhc2stPnRhc2tncm91cC0+d29ya3NoYXJlCiAJICAgICAgJiYgdGhy LT50YXNrLT50YXNrZ3JvdXAtPnByZXYKIAkgICAgICAmJiB0aHItPnRhc2stPnRhc2tncm91 cC0+cHJldi0+Y2FuY2VsbGVkKQogCSAgICByZXR1cm47CiAJfQogICAgIH0KIAorICBodGFi X3QgcmVmY291bnRfc2V0ID0gaHRhYl9jcmVhdGUgKG1hcG51bSk7CisKICAgLyogVGhlIHZh cmlhYmxlcyBhcmUgbWFwcGVkIHNlcGFyYXRlbHkgc3VjaCB0aGF0IHRoZXkgY2FuIGJlIHJl bGVhc2VkCiAgICAgIGluZGVwZW5kZW50bHkuICAqLwogICBzaXplX3QgaSwgajsKICAgaWYg KChmbGFncyAmIEdPTVBfVEFSR0VUX0ZMQUdfRVhJVF9EQVRBKSA9PSAwKQogICAgIGZvciAo aSA9IDA7IGkgPCBtYXBudW07IGkrKykKICAgICAgIGlmICgoa2luZHNbaV0gJiAweGZmKSA9 PSBHT01QX01BUF9TVFJVQ1QpCiAJewogCSAgZ29tcF9tYXBfdmFycyAoZGV2aWNlcCwgc2l6 ZXNbaV0gKyAxLCAmaG9zdGFkZHJzW2ldLCBOVUxMLCAmc2l6ZXNbaV0sCi0JCQkgJmtpbmRz W2ldLCB0cnVlLCBHT01QX01BUF9WQVJTX0VOVEVSX0RBVEEpOworCQkJICZraW5kc1tpXSwg dHJ1ZSwgJnJlZmNvdW50X3NldCwKKwkJCSBHT01QX01BUF9WQVJTX0VOVEVSX0RBVEEpOwog CSAgaSArPSBzaXplc1tpXTsKIAl9CiAgICAgICBlbHNlIGlmICgoa2luZHNbaV0gJiAweGZm KSA9PSBHT01QX01BUF9UT19QU0VUKQogCXsKIAkgIGZvciAoaiA9IGkgKyAxOyBqIDwgbWFw bnVtOyBqKyspCiAJICAgIGlmICghR09NUF9NQVBfUE9JTlRFUl9QIChnZXRfa2luZCAodHJ1 ZSwga2luZHMsIGopICYgMHhmZikKIAkJJiYgIUdPTVBfTUFQX0FMV0FZU19QT0lOVEVSX1Ag KGdldF9raW5kICh0cnVlLCBraW5kcywgaikgJiAweGZmKSkKIAkgICAgICBicmVhazsKIAkg IGdvbXBfbWFwX3ZhcnMgKGRldmljZXAsIGotaSwgJmhvc3RhZGRyc1tpXSwgTlVMTCwgJnNp emVzW2ldLAotCQkJICZraW5kc1tpXSwgdHJ1ZSwgR09NUF9NQVBfVkFSU19FTlRFUl9EQVRB KTsKKwkJCSAma2luZHNbaV0sIHRydWUsICZyZWZjb3VudF9zZXQsCisJCQkgR09NUF9NQVBf VkFSU19FTlRFUl9EQVRBKTsKIAkgIGkgKz0gaiAtIGkgLSAxOwogCX0KICAgICAgIGVsc2Ug aWYgKGkgKyAxIDwgbWFwbnVtICYmIChraW5kc1tpICsgMV0gJiAweGZmKSA9PSBHT01QX01B UF9BVFRBQ0gpCiAJewogCSAgLyogQW4gYXR0YWNoIG9wZXJhdGlvbiBtdXN0IGJlIHByb2Nl c3NlZCB0b2dldGhlciB3aXRoIHRoZSBtYXBwZWQKIAkgICAgIGJhc2UtcG9pbnRlciBsaXN0 IGl0ZW0uICAqLwogCSAgZ29tcF9tYXBfdmFycyAoZGV2aWNlcCwgMiwgJmhvc3RhZGRyc1tp XSwgTlVMTCwgJnNpemVzW2ldLCAma2luZHNbaV0sCi0JCQkgdHJ1ZSwgR09NUF9NQVBfVkFS U19FTlRFUl9EQVRBKTsKKwkJCSB0cnVlLCAmcmVmY291bnRfc2V0LCBHT01QX01BUF9WQVJT X0VOVEVSX0RBVEEpOwogCSAgaSArPSAxOwogCX0KICAgICAgIGVsc2UKIAlnb21wX21hcF92 YXJzIChkZXZpY2VwLCAxLCAmaG9zdGFkZHJzW2ldLCBOVUxMLCAmc2l6ZXNbaV0sICZraW5k c1tpXSwKLQkJICAgICAgIHRydWUsIEdPTVBfTUFQX1ZBUlNfRU5URVJfREFUQSk7CisJCSAg ICAgICB0cnVlLCAmcmVmY291bnRfc2V0LCBHT01QX01BUF9WQVJTX0VOVEVSX0RBVEEpOwog ICBlbHNlCi0gICAgZ29tcF9leGl0X2RhdGEgKGRldmljZXAsIG1hcG51bSwgaG9zdGFkZHJz LCBzaXplcywga2luZHMpOworICAgIGdvbXBfZXhpdF9kYXRhIChkZXZpY2VwLCBtYXBudW0s IGhvc3RhZGRycywgc2l6ZXMsIGtpbmRzLCAmcmVmY291bnRfc2V0KTsKKyAgaHRhYl9mcmVl IChyZWZjb3VudF9zZXQpOwogfQogCiBib29sCiBnb21wX3RhcmdldF90YXNrX2ZuICh2b2lk ICpkYXRhKQogewogICBzdHJ1Y3QgZ29tcF90YXJnZXRfdGFzayAqdHRhc2sgPSAoc3RydWN0 IGdvbXBfdGFyZ2V0X3Rhc2sgKikgZGF0YTsKICAgc3RydWN0IGdvbXBfZGV2aWNlX2Rlc2Ny ICpkZXZpY2VwID0gdHRhc2stPmRldmljZXA7CkBAIC0yNjcwLDI5ICsyOTIwLDI5IEBAIGdv bXBfdGFyZ2V0X3Rhc2tfZm4gKHZvaWQgKmRhdGEpCiAJICBnb21wX3RhcmdldF9mYWxsYmFj ayAodHRhc2stPmZuLCB0dGFzay0+aG9zdGFkZHJzLCBkZXZpY2VwKTsKIAkgIHJldHVybiBm YWxzZTsKIAl9CiAKICAgICAgIGlmICh0dGFzay0+c3RhdGUgPT0gR09NUF9UQVJHRVRfVEFT S19GSU5JU0hFRCkKIAl7CiAJICBpZiAodHRhc2stPnRndCkKLQkgICAgZ29tcF91bm1hcF92 YXJzICh0dGFzay0+dGd0LCB0cnVlKTsKKwkgICAgZ29tcF91bm1hcF92YXJzICh0dGFzay0+ dGd0LCB0cnVlLCBOVUxMKTsKIAkgIHJldHVybiBmYWxzZTsKIAl9CiAKICAgICAgIHZvaWQg KmFjdHVhbF9hcmd1bWVudHM7CiAgICAgICBpZiAoZGV2aWNlcC0+Y2FwYWJpbGl0aWVzICYg R09NUF9PRkZMT0FEX0NBUF9TSEFSRURfTUVNKQogCXsKIAkgIHR0YXNrLT50Z3QgPSBOVUxM OwogCSAgYWN0dWFsX2FyZ3VtZW50cyA9IHR0YXNrLT5ob3N0YWRkcnM7CiAJfQogICAgICAg ZWxzZQogCXsKIAkgIHR0YXNrLT50Z3QgPSBnb21wX21hcF92YXJzIChkZXZpY2VwLCB0dGFz ay0+bWFwbnVtLCB0dGFzay0+aG9zdGFkZHJzLAogCQkJCSAgICAgIE5VTEwsIHR0YXNrLT5z aXplcywgdHRhc2stPmtpbmRzLCB0cnVlLAotCQkJCSAgICAgIEdPTVBfTUFQX1ZBUlNfVEFS R0VUKTsKKwkJCQkgICAgICBOVUxMLCBHT01QX01BUF9WQVJTX1RBUkdFVCk7CiAJICBhY3R1 YWxfYXJndW1lbnRzID0gKHZvaWQgKikgdHRhc2stPnRndC0+dGd0X3N0YXJ0OwogCX0KICAg ICAgIHR0YXNrLT5zdGF0ZSA9IEdPTVBfVEFSR0VUX1RBU0tfUkVBRFlfVE9fUlVOOwogCiAg ICAgICBhc3NlcnQgKGRldmljZXAtPmFzeW5jX3J1bl9mdW5jKTsKICAgICAgIGRldmljZXAt PmFzeW5jX3J1bl9mdW5jIChkZXZpY2VwLT50YXJnZXRfaWQsIGZuX2FkZHIsIGFjdHVhbF9h cmd1bWVudHMsCiAJCQkgICAgICAgdHRhc2stPmFyZ3MsICh2b2lkICopIHR0YXNrKTsKQEAg LTI3MDMsMjkgKzI5NTMsMzUgQEAgZ29tcF90YXJnZXRfdGFza19mbiAodm9pZCAqZGF0YSkK IAkgICB8fCBkZXZpY2VwLT5jYXBhYmlsaXRpZXMgJiBHT01QX09GRkxPQURfQ0FQX1NIQVJF RF9NRU0pCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIHNpemVfdCBpOwogICBpZiAodHRhc2st PmZsYWdzICYgR09NUF9UQVJHRVRfRkxBR19VUERBVEUpCiAgICAgZ29tcF91cGRhdGUgKGRl dmljZXAsIHR0YXNrLT5tYXBudW0sIHR0YXNrLT5ob3N0YWRkcnMsIHR0YXNrLT5zaXplcywK IAkJIHR0YXNrLT5raW5kcywgdHJ1ZSk7Ci0gIGVsc2UgaWYgKCh0dGFzay0+ZmxhZ3MgJiBH T01QX1RBUkdFVF9GTEFHX0VYSVRfREFUQSkgPT0gMCkKLSAgICBmb3IgKGkgPSAwOyBpIDwg dHRhc2stPm1hcG51bTsgaSsrKQotICAgICAgaWYgKCh0dGFzay0+a2luZHNbaV0gJiAweGZm KSA9PSBHT01QX01BUF9TVFJVQ1QpCi0JewotCSAgZ29tcF9tYXBfdmFycyAoZGV2aWNlcCwg dHRhc2stPnNpemVzW2ldICsgMSwgJnR0YXNrLT5ob3N0YWRkcnNbaV0sCi0JCQkgTlVMTCwg JnR0YXNrLT5zaXplc1tpXSwgJnR0YXNrLT5raW5kc1tpXSwgdHJ1ZSwKLQkJCSBHT01QX01B UF9WQVJTX0VOVEVSX0RBVEEpOwotCSAgaSArPSB0dGFzay0+c2l6ZXNbaV07Ci0JfQotICAg ICAgZWxzZQotCWdvbXBfbWFwX3ZhcnMgKGRldmljZXAsIDEsICZ0dGFzay0+aG9zdGFkZHJz W2ldLCBOVUxMLCAmdHRhc2stPnNpemVzW2ldLAotCQkgICAgICAgJnR0YXNrLT5raW5kc1tp XSwgdHJ1ZSwgR09NUF9NQVBfVkFSU19FTlRFUl9EQVRBKTsKICAgZWxzZQotICAgIGdvbXBf ZXhpdF9kYXRhIChkZXZpY2VwLCB0dGFzay0+bWFwbnVtLCB0dGFzay0+aG9zdGFkZHJzLCB0 dGFzay0+c2l6ZXMsCi0JCSAgICB0dGFzay0+a2luZHMpOworICAgIHsKKyAgICAgIGh0YWJf dCByZWZjb3VudF9zZXQgPSBodGFiX2NyZWF0ZSAodHRhc2stPm1hcG51bSk7CisgICAgICBp ZiAoKHR0YXNrLT5mbGFncyAmIEdPTVBfVEFSR0VUX0ZMQUdfRVhJVF9EQVRBKSA9PSAwKQor CWZvciAoaSA9IDA7IGkgPCB0dGFzay0+bWFwbnVtOyBpKyspCisJICBpZiAoKHR0YXNrLT5r aW5kc1tpXSAmIDB4ZmYpID09IEdPTVBfTUFQX1NUUlVDVCkKKwkgICAgeworCSAgICAgIGdv bXBfbWFwX3ZhcnMgKGRldmljZXAsIHR0YXNrLT5zaXplc1tpXSArIDEsICZ0dGFzay0+aG9z dGFkZHJzW2ldLAorCQkJICAgICBOVUxMLCAmdHRhc2stPnNpemVzW2ldLCAmdHRhc2stPmtp bmRzW2ldLCB0cnVlLAorCQkJICAgICAmcmVmY291bnRfc2V0LCBHT01QX01BUF9WQVJTX0VO VEVSX0RBVEEpOworCSAgICAgIGkgKz0gdHRhc2stPnNpemVzW2ldOworCSAgICB9CisJICBl bHNlCisJICAgIGdvbXBfbWFwX3ZhcnMgKGRldmljZXAsIDEsICZ0dGFzay0+aG9zdGFkZHJz W2ldLCBOVUxMLCAmdHRhc2stPnNpemVzW2ldLAorCQkJICAgJnR0YXNrLT5raW5kc1tpXSwg dHJ1ZSwgJnJlZmNvdW50X3NldCwKKwkJCSAgIEdPTVBfTUFQX1ZBUlNfRU5URVJfREFUQSk7 CisgICAgICBlbHNlCisJZ29tcF9leGl0X2RhdGEgKGRldmljZXAsIHR0YXNrLT5tYXBudW0s IHR0YXNrLT5ob3N0YWRkcnMsIHR0YXNrLT5zaXplcywKKwkJCXR0YXNrLT5raW5kcywgJnJl ZmNvdW50X3NldCk7CisgICAgICBodGFiX2ZyZWUgKHJlZmNvdW50X3NldCk7CisgICAgfQog ICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQKIEdPTVBfdGVhbXMgKHVuc2lnbmVkIGludCBu dW1fdGVhbXMsIHVuc2lnbmVkIGludCB0aHJlYWRfbGltaXQpCiB7CiAgIGlmICh0aHJlYWRf bGltaXQpCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi9yZWZjb3VudC0xLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi9yZWZjb3VudC0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjViN2MzMTQwNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5jLWMrKy1jb21tb24vcmVmY291bnQtMS5jCkBAIC0wLDAgKzEsNTIgQEAKKyNp bmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50IG1haW4gKHZvaWQp Cit7CisgIGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0g b21wX2dldF9pbml0aWFsX2RldmljZSAoKTsKKworICBpZiAoZCA8IDAgfHwgZCA+PSBvbXBf Z2V0X251bV9kZXZpY2VzICgpKQorICAgIGQgPSBpZDsKKworICB1bnNpZ25lZCBpbnQgYSA9 IDB4Y2RjZGNkY2Q7CisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCAodG86 YSkKKworICBhID0gMHhhYmFiYWJhYjsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25l ZCBjaGFyICopICZhOworICB1bnNpZ25lZCBjaGFyICpxID0gcCArIDI7CisKKyAgI3ByYWdt YSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwIChhbGxvYzpwWzoxXSwgcVs6MV0pCisKKyAg aWYgKCFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZhLCBkKSkKKyAgICBhYm9ydCAoKTsKKyAg aWYgKCFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZwWzBdLCBkKSkKKyAgICBhYm9ydCAoKTsK KyAgaWYgKCFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZxWzBdLCBkKSkKKyAgICBhYm9ydCAo KTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAocmVsZWFzZTphKQor CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmYSwgZCkpCisgICAgYWJvcnQgKCk7 CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcFswXSwgZCkpCisgICAgYWJvcnQg KCk7CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcVswXSwgZCkpCisgICAgYWJv cnQgKCk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAgKGZyb206cVs6 MV0pCisKKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJmEsIGQpKQorICAgIGFib3J0 ICgpOworICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcFswXSwgZCkpCisgICAgYWJv cnQgKCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZxWzBdLCBkKSkKKyAgICBh Ym9ydCAoKTsKKworICBpZiAocVswXSAhPSAweGNkKQorICAgIGFib3J0ICgpOworICBpZiAo cFswXSAhPSAweGFiKQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVs ZW0tMS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0 LWVsZW0tMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNDlk OGMxMmMwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy1jKystY29tbW9uL3N0cnVjdC1lbGVtLTEuYwpAQCAtMCwwICsxLDI5IEBACisjaW5jbHVk ZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0cnVjdCBTCit7CisgIGludCBh LCBiOworfTsKK3R5cGVkZWYgc3RydWN0IFMgUzsKKworaW50IG1haW4gKHZvaWQpCit7Cisg IGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0gb21wX2dl dF9pbml0aWFsX2RldmljZSAoKTsKKworICBpZiAoZCA8IDAgfHwgZCA+PSBvbXBfZ2V0X251 bV9kZXZpY2VzICgpKQorICAgIGQgPSBpZDsKKworICBTIHM7CisgICNwcmFnbWEgb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcCAoYWxsb2M6IHMuYSwgcy5iKQorICAjcHJhZ21hIG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcCAocmVsZWFzZTogcy5iKQorCisgIC8qIE9wZW5NUCA1LjAg c3RydWN0dXJlIGVsZW1lbnQgbWFwcGluZyBydWxlcyBkZXNjcmliZSB0aGF0IGVsZW1lbnRz IG9mIHNhbWUKKyAgICAgc3RydWN0dXJlIHZhcmlhYmxlIHNob3VsZCBhbGxvY2F0ZS9kZWFs bG9jYXRlIGluIGEgdW5pZm9ybSBmYXNoaW9uLCBzbworICAgICAicy5hIiBzaG91bGQgYmUg cmVtb3ZlZCB0b2dldGhlciBieSBhYm92ZSAnZXhpdCBkYXRhJy4gICovCisgIGlmIChvbXBf dGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmEsIGQpKQorICAgIGFib3J0ICgpOworCisgIHJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1j b21tb24vc3RydWN0LWVsZW0tMi5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMr Ky1jb21tb24vc3RydWN0LWVsZW0tMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi41NTVjNmUzZThlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3N0cnVjdC1lbGVtLTIuYwpAQCAtMCwwICsx LDQ0IEBACisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0cnVj dCBTCit7CisgIGludCBhLCBiLCBjLCBkOworfTsKK3R5cGVkZWYgc3RydWN0IFMgUzsKKwor aW50IG1haW4gKHZvaWQpCit7CisgIGludCBkID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAo KTsKKyAgaW50IGlkID0gb21wX2dldF9pbml0aWFsX2RldmljZSAoKTsKKworICBpZiAoZCA8 IDAgfHwgZCA+PSBvbXBfZ2V0X251bV9kZXZpY2VzICgpKQorICAgIGQgPSBpZDsKKworICBT IHM7CisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCAoYWxsb2M6IHMuYSwg cy5iLCBzLmMsIHMuZCkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwIChh bGxvYzogcy5jKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9j OiBzLmIsIHMuZCkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwIChhbGxv Yzogcy5hLCBzLmMsIHMuYikKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cCAocmVsZWFzZTogcy5hKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAo cmVsZWFzZTogcy5kKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAocmVs ZWFzZTogcy5jKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAocmVsZWFz ZTogcy5iKQorCisgIC8qIE9wZW5NUCA1LjAgc3RydWN0dXJlIGVsZW1lbnQgbWFwcGluZyBy dWxlcyBkZXNjcmliZSB0aGF0IGVsZW1lbnRzIG9mIHNhbWUKKyAgICAgc3RydWN0dXJlIHZh cmlhYmxlIHNob3VsZCBhbGxvY2F0ZS9kZWFsbG9jYXRlIGluIGEgdW5pZm9ybSBmYXNoaW9u LCBzbworICAgICBhbGwgZWxlbWVudHMgb2YgJ3MnIHNob3VsZCBiZSByZW1vdmVkIHRvZ2V0 aGVyIGJ5IGFib3ZlICdleGl0IGRhdGEncy4gICovCisgIGlmIChvbXBfdGFyZ2V0X2lzX3By ZXNlbnQgKCZzLCBkKSkKKyAgICBhYm9ydCAoKTsKKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJl c2VudCAoJnMuYSwgZCkpCisgICAgYWJvcnQgKCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3By ZXNlbnQgKCZzLmIsIGQpKQorICAgIGFib3J0ICgpOworICBpZiAob21wX3RhcmdldF9pc19w cmVzZW50ICgmcy5jLCBkKSkKKyAgICBhYm9ydCAoKTsKKyAgaWYgKG9tcF90YXJnZXRfaXNf cHJlc2VudCAoJnMuZCwgZCkpCisgICAgYWJvcnQgKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRp ZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9zdHJ1 Y3QtZWxlbS0zLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9z dHJ1Y3QtZWxlbS0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjQ4NTBlYWJkODc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVsZW0tMy5jCkBAIC0wLDAgKzEsNjMgQEAKKyNp bmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RydWN0IFMKK3sKKyAg aW50IGEsIGIsIGMsIGQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgUyBTOworCitpbnQgbWFpbiAo dm9pZCkKK3sKKyAgaW50IGQgPSBvbXBfZ2V0X2RlZmF1bHRfZGV2aWNlICgpOworICBpbnQg aWQgPSBvbXBfZ2V0X2luaXRpYWxfZGV2aWNlICgpOworCisgIGlmIChkIDwgMCB8fCBkID49 IG9tcF9nZXRfbnVtX2RldmljZXMgKCkpCisgICAgZCA9IGlkOworCisgIFMgczsKKworICAj cHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9jOiBzKQorICAjcHJhZ21h IG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9jOiBzKQorCisgICNwcmFnbWEgb21w IHRhcmdldCBleGl0IGRhdGEgbWFwIChyZWxlYXNlOiBzLmEpCisgICNwcmFnbWEgb21wIHRh cmdldCBleGl0IGRhdGEgbWFwIChyZWxlYXNlOiBzLmIpCisKKyAgLyogT3Blbk1QIDUuMCBz dHJ1Y3R1cmUgZWxlbWVudCBtYXBwaW5nIHJ1bGVzIGRlc2NyaWJlIHRoYXQgZWxlbWVudHMg b2Ygc2FtZQorICAgICBzdHJ1Y3R1cmUgdmFyaWFibGUgc2hvdWxkIGFsbG9jYXRlL2RlYWxs b2NhdGUgaW4gYSB1bmlmb3JtIGZhc2hpb24sIHNvCisgICAgIGFsbCBlbGVtZW50cyBvZiAn cycgc2hvdWxkIGJlIHJlbW92ZWQgdG9nZXRoZXIgYnkgYWJvdmUgJ2V4aXQgZGF0YSdzLiAg Ki8KKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMsIGQpKQorICAgIGFib3J0ICgp OworICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKSkKKyAgICBhYm9ydCAo KTsKKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYiwgZCkpCisgICAgYWJvcnQg KCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmMsIGQpKQorICAgIGFib3J0 ICgpOworICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5kLCBkKSkKKyAgICBhYm9y dCAoKTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9jOiBz LmEsIHMuYikKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwIChhbGxvYzog cy5hKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9jOiBzLmIp CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAgKHJlbGVhc2U6IHMpCisg ICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwIChyZWxlYXNlOiBzKQorICAjcHJh Z21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcCAocmVsZWFzZTogcykKKworICAvKiBPcGVu TVAgNS4wIHN0cnVjdHVyZSBlbGVtZW50IG1hcHBpbmcgcnVsZXMgZGVzY3JpYmUgdGhhdCBl bGVtZW50cyBvZiBzYW1lCisgICAgIHN0cnVjdHVyZSB2YXJpYWJsZSBzaG91bGQgYWxsb2Nh dGUvZGVhbGxvY2F0ZSBpbiBhIHVuaWZvcm0gZmFzaGlvbiwgc28KKyAgICAgYWxsIGVsZW1l bnRzIG9mICdzJyBzaG91bGQgYmUgcmVtb3ZlZCB0b2dldGhlciBieSBhYm92ZSAnZXhpdCBk YXRhJ3MuICAqLworICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcywgZCkpCisgICAg YWJvcnQgKCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmEsIGQpKQorICAg IGFib3J0ICgpOworICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5iLCBkKSkKKyAg ICBhYm9ydCAoKTsKKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYywgZCkpCisg ICAgYWJvcnQgKCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmQsIGQpKQor ICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVsZW0tNC5jIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVsZW0tNC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTBmYmY4N2MwMgotLS0gL2Rl di9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL3N0 cnVjdC1lbGVtLTQuYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSA8b21wLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisKK3N0cnVjdCBTCit7CisgIGludCBhLCBiLCBjLCBkLCBlOwor fTsKK3R5cGVkZWYgc3RydWN0IFMgUzsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGludCBk ID0gb21wX2dldF9kZWZhdWx0X2RldmljZSAoKTsKKyAgaW50IGlkID0gb21wX2dldF9pbml0 aWFsX2RldmljZSAoKTsKKworICBpZiAoZCA8IDAgfHwgZCA+PSBvbXBfZ2V0X251bV9kZXZp Y2VzICgpKQorICAgIGQgPSBpZDsKKworICBTIHMgPSB7IDEsIDIsIDMsIDQsIDUgfTsKKyAg I3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwICh0bzpzKQorCisgIGludCAqcCA9 ICZzLmI7CisgIGludCAqcSA9ICZzLmQ7CisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcCAoYWxsb2M6IHBbOjFdLCBxWzoxXSkKKworICBzLmIgPSA4ODsKKyAgcy5kID0g OTk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAgKHJlbGVhc2U6IHMp CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcywgZCkpCisgICAgYWJvcnQgKCk7 CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcFswXSwgZCkpCisgICAgYWJvcnQg KCk7CisgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcVswXSwgZCkpCisgICAgYWJv cnQgKCk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAgKGZyb206IHFb OjFdKQorICBpZiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcywgZCkpCisgICAgYWJvcnQg KCk7CisgIGlmIChvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZwWzBdLCBkKSkKKyAgICBhYm9y dCAoKTsKKyAgaWYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnFbMF0sIGQpKQorICAgIGFi b3J0ICgpOworCisgIGlmIChxWzBdICE9IDQpCisgICAgYWJvcnQgKCk7CisgIGlmIChwWzBd ICE9IDg4KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVsZW0tNS5j IGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc3RydWN0LWVsZW0t NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MTRjMzAxMjBl NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKyst Y29tbW9uL3N0cnVjdC1lbGVtLTUuYwpAQCAtMCwwICsxLDIwIEBACisvKiB7IGRnLWRvIHJ1 biB9ICovCisKK3N0cnVjdCBTCit7CisgIGludCBhLCBiLCBjOworfTsKK3R5cGVkZWYgc3Ry dWN0IFMgUzsKKworaW50IG1haW4gKHZvaWQpCit7CisgIFMgczsKKyAgI3ByYWdtYSBvbXAg dGFyZ2V0IGRhdGEgbWFwIChhbGxvYzogcy5hLCBzLmMpCisgIHsKKyAgICAjcHJhZ21hIG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKGFsbG9jOiBzLmIpCisgIH0KKworICByZXR1cm4g MDsKK30KKy8qIHsgZGctb3V0cHV0ICJUcnlpbmcgdG8gbWFwIGludG8gZGV2aWNlIFxcXFtc WzAtOWEtZkEtRnhYXF0rLi5cWzAtOWEtZkEtRnhYXF0rXFxcKSBzdHJ1Y3R1cmUgZWxlbWVu dCB3aGVuIG90aGVyIG1hcHBlZCBlbGVtZW50cyBmcm9tIHRoZSBzYW1lIHN0cnVjdHVyZSB3 ZXJlbid0IG1hcHBlZCB0b2dldGhlciB3aXRoIGl0IiB9ICovCisvKiB7IGRnLXNob3VsZGZh aWwgIiIgfSAqLwo= --------------3DFD981472C4A9F2DE5DC58E--