From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yinghai Lu Subject: Re: mpt2sas regression: can not add disk... Date: Tue, 6 Dec 2011 16:15:27 -0800 Message-ID: References: <7863850E8C98C748980632D9D3B7C19911968B8AE5@inbmail02.lsi.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=20cf303f6d4cef0eec04b3757217 Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: "Nandigama, Nagalakshmi" , James Bottomley , "Rafael J. Wysocki" Cc: "linux-scsi-owner@vger.kernel.org" , James Bottomley , "linux-scsi@vger.kernel.org" , Linux Kernel Mailing List List-Id: linux-scsi@vger.kernel.org --20cf303f6d4cef0eec04b3757217 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Mon, Nov 28, 2011 at 12:00 PM, Yinghai Lu wrote: > On Sun, Nov 27, 2011 at 10:09 PM, Nandigama, Nagalakshmi > wrote: >> Yinghai Lu, >> >> Please set the driver logging level to 0x421F8 (echo 0x421F8 > /sys/modu= le/mpt2sas/parameters/logging_level) and the scsi logging level to 0x180000= F1 (echo 0x180000F1 > /proc/sys/dev/scsi/logging_level) and recreate the is= sue and provide the var/log/message >> > > please check two print out... James, one week passed, did not hear anything from the original author. Can you revert offending commit ? it is 921cd8024b908f8f49f772c8d3a02381b4db2ed2 and several related commits after that. please check attached reverting patch that i used locally. Thanks Yinghai --20cf303f6d4cef0eec04b3757217 Content-Type: text/x-patch; charset=US-ASCII; name="revert_mpt2sas_fast_load.patch" Content-Disposition: attachment; filename="revert_mpt2sas_fast_load.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvvl1zup2 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVy cy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggYmVkYTA0YS4uODEyMDljYSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVy cy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTgxLDE1ICs4MSw2IEBAIHN0YXRpYyBp bnQgbWlzc2luZ19kZWxheVsyXSA9IHstMSwgLTF9OwogbW9kdWxlX3BhcmFtX2FycmF5KG1pc3Np bmdfZGVsYXksIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1pc3NpbmdfZGVsYXks ICIgZGV2aWNlIG1pc3NpbmcgZGVsYXkgLCBpbyBtaXNzaW5nIGRlbGF5Iik7CiAKLXN0YXRpYyBp bnQgbXB0MnNhc19md2ZhdWx0X2RlYnVnOwotTU9EVUxFX1BBUk1fREVTQyhtcHQyc2FzX2Z3ZmF1 bHRfZGVidWcsICIgZW5hYmxlIGRldGVjdGlvbiBvZiBmaXJtd2FyZSBmYXVsdCAiCi0JImFuZCBo YWx0IGZpcm13YXJlIC0gKGRlZmF1bHQ9MCkiKTsKLQotc3RhdGljIGludCBkaXNhYmxlX2Rpc2Nv dmVyeSA9IC0xOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfZGlzY292ZXJ5LCBpbnQsIDApOwotTU9E VUxFX1BBUk1fREVTQyhkaXNhYmxlX2Rpc2NvdmVyeSwgIiBkaXNhYmxlIGRpc2NvdmVyeSAiKTsK LQotCiAvKiBkaWFnX2J1ZmZlcl9lbmFibGUgaXMgYml0d2lzZQogICogYml0IDAgc2V0ID0gVFJB Q0UKICAqIGJpdCAxIHNldCA9IFNOQVBTSE9UCkBAIC0xMDIsNiArOTMsMTQgQEAgbW9kdWxlX3Bh cmFtKGRpYWdfYnVmZmVyX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlhZ19i dWZmZXJfZW5hYmxlLCAiIHBvc3QgZGlhZyBidWZmZXJzICIKICAgICAiKFRSQUNFPTEvU05BUFNI T1Q9Mi9FWFRFTkRFRD00L2RlZmF1bHQ9MCkiKTsKIAorc3RhdGljIGludCBtcHQyc2FzX2Z3ZmF1 bHRfZGVidWc7CitNT0RVTEVfUEFSTV9ERVNDKG1wdDJzYXNfZndmYXVsdF9kZWJ1ZywgIiBlbmFi bGUgZGV0ZWN0aW9uIG9mIGZpcm13YXJlIGZhdWx0ICIKKyAgICAiYW5kIGhhbHQgZmlybXdhcmUg LSAoZGVmYXVsdD0wKSIpOworCitzdGF0aWMgaW50IGRpc2FibGVfZGlzY292ZXJ5ID0gLTE7Citt b2R1bGVfcGFyYW0oZGlzYWJsZV9kaXNjb3ZlcnksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVND KGRpc2FibGVfZGlzY292ZXJ5LCAiIGRpc2FibGUgZGlzY292ZXJ5ICIpOworCiAvKioKICAqIF9z Y3NpaF9zZXRfZndmYXVsdF9kZWJ1ZyAtIGdsb2JhbCBzZXR0aW5nIG9mIGlvYy0+ZndmYXVsdF9k ZWJ1Zy4KICAqCkBAIC02OTIsNyArNjkxLDYgQEAgbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1Q VDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKIAkJbWVtY3B5KGlv Yy0+YmFzZV9jbWRzLnJlcGx5LCBtcGlfcmVwbHksIG1waV9yZXBseS0+TXNnTGVuZ3RoKjQpOwog CX0KIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7Ci0KIAljb21w bGV0ZSgmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJcmV0dXJuIDE7CiB9CkBAIC0zNDcyLDU4ICsz NDcwLDYgQEAgX2Jhc2Vfc2VuZF9pb2NfaW5pdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2Ms IGludCBzbGVlcF9mbGFnKQogfQogCiAvKioKLSAqIG1wdDJzYXNfcG9ydF9lbmFibGVfZG9uZSAt IGNvbW1hbmQgY29tcGxldGlvbiByb3V0aW5lIGZvciBwb3J0IGVuYWJsZQotICogQGlvYzogcGVy IGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAot ICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCi0gKiBA cmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKLSAqCi0gKiBSZXR1 cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAotICog ICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KLSAqLwot dTgKLW1wdDJzYXNfcG9ydF9lbmFibGVfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2Ms IHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAotCXUzMiByZXBseSkKLXsKLQlNUEkyRGVmYXVsdFJl cGx5X3QgKm1waV9yZXBseTsKLQl1MTYgaW9jX3N0YXR1czsKLQotCW1waV9yZXBseSA9IG1wdDJz YXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwotCWlmIChtcGlfcmVwbHkg JiYgbXBpX3JlcGx5LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSykKLQkJcmV0 dXJuIDE7Ci0KLQlpZiAoaW9jLT5wb3J0X2VuYWJsZV9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9O T1RfVVNFRCkKLQkJcmV0dXJuIDE7Ci0KLQlpb2MtPnBvcnRfZW5hYmxlX2NtZHMuc3RhdHVzIHw9 IE1QVDJfQ01EX0NPTVBMRVRFOwotCWlmIChtcGlfcmVwbHkpIHsKLQkJaW9jLT5wb3J0X2VuYWJs ZV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVBMWV9WQUxJRDsKLQkJbWVtY3B5KGlvYy0+cG9y dF9lbmFibGVfY21kcy5yZXBseSwgbXBpX3JlcGx5LAotCQkgICAgbXBpX3JlcGx5LT5Nc2dMZW5n dGgqNCk7Ci0JfQotCWlvYy0+cG9ydF9lbmFibGVfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BF TkRJTkc7Ci0KLQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5JT0NTdGF0dXMp ICYgTVBJMl9JT0NTVEFUVVNfTUFTSzsKLQotCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RB VFVTX1NVQ0NFU1MpCi0JCWlvYy0+cG9ydF9lbmFibGVfZmFpbGVkID0gMTsKLQotCWlmIChpb2Mt PmlzX2RyaXZlcl9sb2FkaW5nKSB7Ci0JCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVT X1NVQ0NFU1MpIHsKLQkJCW1wdDJzYXNfcG9ydF9lbmFibGVfY29tcGxldGUoaW9jKTsKLQkJCXJl dHVybiAxOwotCQl9IGVsc2UgewotCQkJaW9jLT5zdGFydF9zY2FuX2ZhaWxlZCA9IGlvY19zdGF0 dXM7Ci0JCQlpb2MtPnN0YXJ0X3NjYW4gPSAwOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JY29t cGxldGUoJmlvYy0+cG9ydF9lbmFibGVfY21kcy5kb25lKTsKLQlyZXR1cm4gMTsKLX0KLQotCi0v KioKICAqIF9iYXNlX3NlbmRfcG9ydF9lbmFibGUgLSBzZW5kIHBvcnRfZW5hYmxlKGRpc2NvdmVy eSBzdHVmZikgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNs ZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUApAQCAtMzUzNCwxNTEgKzM0ODAsNjcgQEAg c3RhdGljIGludAogX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVS ICppb2MsIGludCBzbGVlcF9mbGFnKQogewogCU1waTJQb3J0RW5hYmxlUmVxdWVzdF90ICptcGlf cmVxdWVzdDsKLQlNcGkyUG9ydEVuYWJsZVJlcGx5X3QgKm1waV9yZXBseTsKKwl1MzIgaW9jX3N0 YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CiAJaW50IHIgPSAwOwogCXUxNiBzbWlkOwot CXUxNiBpb2Nfc3RhdHVzOwogCiAJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgcG9y dCBlbmFibGUgISFcbiIsIGlvYy0+bmFtZSk7CiAKLQlpZiAoaW9jLT5wb3J0X2VuYWJsZV9jbWRz LnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKKwlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVz ICYgTVBUMl9DTURfUEVORElORykgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaW50 ZXJuYWwgY29tbWFuZCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5j X18pOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9z bWlkKGlvYywgaW9jLT5wb3J0X2VuYWJsZV9jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2Vf Z2V0X3NtaWQoaW9jLCBpb2MtPmJhc2VfY2JfaWR4KTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRr KE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAg aW9jLT5uYW1lLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlvYy0+cG9y dF9lbmFibGVfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9QRU5ESU5HOworCWlvYy0+YmFzZV9jbWRz LnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CiAJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2Vf Z2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwotCWlvYy0+cG9ydF9lbmFibGVfY21kcy5zbWlkID0g c21pZDsKKwlpb2MtPmJhc2VfY21kcy5zbWlkID0gc21pZDsKIAltZW1zZXQobXBpX3JlcXVlc3Qs IDAsIHNpemVvZihNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5j dGlvbiA9IE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFCTEU7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0g MDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQlpbml0X2NvbXBsZXRp b24oJmlvYy0+cG9ydF9lbmFibGVfY21kcy5kb25lKTsKIAltcHQyc2FzX2Jhc2VfcHV0X3NtaWRf ZGVmYXVsdChpb2MsIHNtaWQpOwotCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZpb2MtPnBvcnRfZW5hYmxlX2NtZHMuZG9uZSwKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+ YmFzZV9jbWRzLmRvbmUpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0 KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICAzMDAqSFopOwotCWlmICghKGlvYy0+cG9ydF9l bmFibGVfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKKwlpZiAoIShpb2MtPmJh c2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNf RVJSX0ZNVCAiJXM6IHRpbWVvdXRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKIAkJ X2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCiAJCSAgICBzaXplb2YoTXBpMlBvcnRFbmFibGVS ZXF1ZXN0X3QpLzQpOwotCQlpZiAoaW9jLT5wb3J0X2VuYWJsZV9jbWRzLnN0YXR1cyAmIE1QVDJf Q01EX1JFU0VUKQorCQlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQp CiAJCQlyID0gLUVGQVVMVDsKIAkJZWxzZQogCQkJciA9IC1FVElNRTsKIAkJZ290byBvdXQ7Ci0J fQotCW1waV9yZXBseSA9IGlvYy0+cG9ydF9lbmFibGVfY21kcy5yZXBseTsKKwl9IGVsc2UKKwkJ ZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGNvbXBsZXRlXG4i LAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCi0JaW9jX3N0YXR1cyA9IGxlMTZfdG9f Y3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSAmIE1QSTJfSU9DU1RBVFVTX01BU0s7Ci0JaWYgKGlv Y19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgewotCQlwcmludGsoTVBUMlNBU19F UlJfRk1UICIlczogZmFpbGVkIHdpdGggKGlvY19zdGF0dXM9MHglMDh4KVxuIiwKLQkJICAgIGlv Yy0+bmFtZSwgX19mdW5jX18sIGlvY19zdGF0dXMpOworCWlvY19zdGF0ZSA9IF9iYXNlX3dhaXRf b25faW9jc3RhdGUoaW9jLCBNUEkyX0lPQ19TVEFURV9PUEVSQVRJT05BTCwKKwkgICAgNjAsIHNs ZWVwX2ZsYWcpOworCWlmIChpb2Nfc3RhdGUpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAi JXM6IGZhaWxlZCBnb2luZyB0byBvcGVyYXRpb25hbCBzdGF0ZSAiCisJCSAgICAiIChpb2Nfc3Rh dGU9MHgleClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sIGlvY19zdGF0ZSk7CiAJCXIgPSAtRUZB VUxUOwotCQlnb3RvIG91dDsKIAl9CiAgb3V0OgotCWlvYy0+cG9ydF9lbmFibGVfY21kcy5zdGF0 dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicG9ydCBl bmFibGU6ICVzXG4iLCBpb2MtPm5hbWUsICgociA9PSAwKSA/Ci0JICAgICJTVUNDRVNTIiA6ICJG QUlMRUQiKSk7CisJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CisJ cHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInBvcnQgZW5hYmxlOiAlc1xuIiwKKwkgICAgaW9jLT5u YW1lLCAoKHIgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpOwogCXJldHVybiByOwogfQog CiAvKioKLSAqIG1wdDJzYXNfcG9ydF9lbmFibGUgLSBpbml0aWF0ZSBmaXJtd2FyZSBkaXNjb3Zl cnkgKGRvbid0IHdhaXQgZm9yIHJlcGx5KQotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0g KgotICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KLSAqLwot aW50Ci1tcHQyc2FzX3BvcnRfZW5hYmxlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKLXsK LQlNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7Ci0JdTE2IHNtaWQ7Ci0KLQlw cmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2VuZGluZyBwb3J0IGVuYWJsZSAhIVxuIiwgaW9jLT5u YW1lKTsKLQotCWlmIChpb2MtPnBvcnRfZW5hYmxlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVO RElORykgewotCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogaW50ZXJuYWwgY29tbWFuZCBh bHJlYWR5IGluIHVzZVxuIiwKLQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwotCQlyZXR1cm4g LUVBR0FJTjsKLQl9Ci0KLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5w b3J0X2VuYWJsZV9jYl9pZHgpOwotCWlmICghc21pZCkgewotCQlwcmludGsoTVBUMlNBU19FUlJf Rk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCi0JCSAgICBpb2MtPm5hbWUsIF9f ZnVuY19fKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaW9jLT5wb3J0X2VuYWJsZV9jbWRz LnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7Ci0JbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2Vf Z2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwotCWlvYy0+cG9ydF9lbmFibGVfY21kcy5zbWlkID0g c21pZDsKLQltZW1zZXQobXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyUG9ydEVuYWJsZVJlcXVl c3RfdCkpOwotCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUE9SVF9FTkFC TEU7Ci0KLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwotCXJldHVy biAwOwotfQotCi0vKioKLSAqIF9iYXNlX2RldGVybWluZV93YWl0X29uX2Rpc2NvdmVyeSAtIGRl c3Bvc2l0aW9uCi0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqCi0gKiBEZWNpZGUgd2hl dGhlciB0byB3YWl0IG9uIGRpc2NvdmVyeSB0byBjb21wbGV0ZS4gVXNlZCB0byBlaXRoZXIKLSAq IGxvY2F0ZSBib290IGRldmljZSwgb3IgcmVwb3J0IHZvbHVtZXMgYWhlYWQgb2YgcGh5c2ljYWwg ZGV2aWNlcy4KLSAqCi0gKiBSZXR1cm5zIDEgZm9yIHdhaXQsIDAgZm9yIGRvbid0IHdhaXQKLSAq Lwotc3RhdGljIGludAotX2Jhc2VfZGV0ZXJtaW5lX3dhaXRfb25fZGlzY292ZXJ5KHN0cnVjdCBN UFQyU0FTX0FEQVBURVIgKmlvYykKLXsKLQkvKiBXZSB3YWl0IGZvciBkaXNjb3ZlcnkgdG8gY29t cGxldGUgaWYgSVIgZmlybXdhcmUgaXMgbG9hZGVkLgotCSAqIFRoZSBzYXMgdG9wb2xvZ3kgZXZl bnRzIGFycml2ZSBiZWZvcmUgUEQgZXZlbnRzLCBzbyB3ZSBuZWVkIHRpbWUgdG8KLQkgKiB0dXJu IG9uIHRoZSBiaXQgaW4gaW9jLT5wZF9oYW5kbGVzIHRvIGluZGljYXRlIFBECi0JICogQWxzbywg aXQgbWF5YmUgcmVxdWlyZWQgdG8gcmVwb3J0IFZvbHVtZXMgYWhlYWQgb2YgcGh5c2ljYWwKLQkg KiBkZXZpY2VzIHdoZW4gTVBJMl9JT0NQQUdFOF9JUkZMQUdTX0xPV19WT0xVTUVfTUFQUElORyBp cyBzZXQuCi0JICovCi0JaWYgKGlvYy0+aXJfZmlybXdhcmUpCi0JCXJldHVybiAxOwotCi0JLyog aWYgbm8gQmlvcywgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgKi8KLQlpZiAoIWlvYy0+Ymlv c19wZzMuQmlvc1ZlcnNpb24pCi0JCXJldHVybiAwOwotCi0JLyogQmlvcyBpcyBwcmVzZW50LCB0 aGVuIHdlIGRyb3AgZG93biBoZXJlLgotCSAqCi0JICogSWYgdGhlcmUgYW55IGVudHJpZXMgaW4g dGhlIEJpb3MgUGFnZSAyLCB0aGVuIHdlIHdhaXQKLQkgKiBmb3IgZGlzY292ZXJ5IHRvIGNvbXBs ZXRlLgotCSAqLwotCi0JLyogQ3VycmVudCBCb290IERldmljZSAqLwotCWlmICgoaW9jLT5iaW9z X3BnMi5DdXJyZW50Qm9vdERldmljZUZvcm0gJgotCSAgICBNUEkyX0JJT1NQQUdFMl9GT1JNX01B U0spID09Ci0JICAgIE1QSTJfQklPU1BBR0UyX0ZPUk1fTk9fREVWSUNFX1NQRUNJRklFRCAmJgot CS8qIFJlcXVlc3QgQm9vdCBEZXZpY2UgKi8KLQkgICAoaW9jLT5iaW9zX3BnMi5SZXFCb290RGV2 aWNlRm9ybSAmCi0JICAgIE1QSTJfQklPU1BBR0UyX0ZPUk1fTUFTSykgPT0KLQkgICAgTVBJMl9C SU9TUEFHRTJfRk9STV9OT19ERVZJQ0VfU1BFQ0lGSUVEICYmCi0JLyogQWx0ZXJuYXRlIFJlcXVl c3QgQm9vdCBEZXZpY2UgKi8KLQkgICAoaW9jLT5iaW9zX3BnMi5SZXFBbHRCb290RGV2aWNlRm9y bSAmCi0JICAgIE1QSTJfQklPU1BBR0UyX0ZPUk1fTUFTSykgPT0KLQkgICAgTVBJMl9CSU9TUEFH RTJfRk9STV9OT19ERVZJQ0VfU1BFQ0lGSUVEKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwot fQotCi0KLS8qKgogICogX2Jhc2VfdW5tYXNrX2V2ZW50cyAtIHR1cm4gb24gbm90aWZpY2F0aW9u IGZvciB0aGlzIGV2ZW50CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBldmVudDog ZmlybXdhcmUgZXZlbnQKQEAgLTQxMDAsNyArMzk2Miw2IEBAIF9iYXNlX21ha2VfaW9jX29wZXJh dGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiAgc2tp cF9pbml0X3JlcGx5X3Bvc3RfaG9zdF9pbmRleDoKIAogCV9iYXNlX3VubWFza19pbnRlcnJ1cHRz KGlvYyk7Ci0KIAlyID0gX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgc2xlZXBfZmxhZyk7 CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtNDEwOCwxOCArMzk2OSw3IEBAIF9iYXNlX21ha2Vf aW9jX29wZXJhdGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2Zs YWcpCiAJaWYgKHNsZWVwX2ZsYWcgPT0gQ0FOX1NMRUVQKQogCQlfYmFzZV9zdGF0aWNfY29uZmln X3BhZ2VzKGlvYyk7CiAKLQotCWlmIChpb2MtPmlzX2RyaXZlcl9sb2FkaW5nKSB7Ci0KLQotCi0J CWlvYy0+d2FpdF9mb3JfZGlzY292ZXJ5X3RvX2NvbXBsZXRlID0KLQkJICAgIF9iYXNlX2RldGVy bWluZV93YWl0X29uX2Rpc2NvdmVyeShpb2MpOwotCQlyZXR1cm4gcjsgLyogc2Nhbl9zdGFydCBh bmQgc2Nhbl9maW5pc2hlZCBzdXBwb3J0ICovCi0JfQotCi0KLQlpZiAoaW9jLT53YWl0X2Zvcl9k aXNjb3ZlcnlfdG9fY29tcGxldGUgJiYgaW9jLT5pc193YXJwZHJpdmUpIHsKKwlpZiAoaW9jLT53 YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSAmJiBpb2MtPmlzX3dhcnBkcml2ZSkgewog CQlpZiAoaW9jLT5tYW51X3BnMTAuT0VNSWRlbnRpZmllciAgPT0gMHg4MCkgewogCQkJaGlkZV9m bGFnID0gKHU4KSAoaW9jLT5tYW51X3BnMTAuT0VNU3BlY2lmaWNGbGFnczAgJgogCQkJICAgIE1G R19QQUdFMTBfSElERV9TU0RTX01BU0spOwpAQCAtNDEyOCw2ICszOTc4LDEzIEBAIF9iYXNlX21h a2VfaW9jX29wZXJhdGlvbmFsKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVw X2ZsYWcpCiAJCX0KIAl9CiAKKwlpZiAoaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21w bGV0ZSkgeworCQlpZiAoZGlhZ19idWZmZXJfZW5hYmxlICE9IDApCisJCQltcHQyc2FzX2VuYWJs ZV9kaWFnX2J1ZmZlcihpb2MsIGRpYWdfYnVmZmVyX2VuYWJsZSk7CisJCWlmIChkaXNhYmxlX2Rp c2NvdmVyeSA+IDApCisJCQlyZXR1cm4gcjsKKwl9CisKIAlyID0gX2Jhc2Vfc2VuZF9wb3J0X2Vu YWJsZShpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTQyNjQsMTAg KzQxMjEsNiBAQCBtcHQyc2FzX2Jhc2VfYXR0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlv YykKIAlpb2MtPmJhc2VfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tF Uk5FTCk7CiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAKLQkv KiBwb3J0X2VuYWJsZSBjb21tYW5kIGJpdHMgKi8KLQlpb2MtPnBvcnRfZW5hYmxlX2NtZHMucmVw bHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwotCWlvYy0+cG9ydF9lbmFi bGVfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKLQogCS8qIHRyYW5zcG9ydCBpbnRl cm5hbCBjb21tYW5kIGJpdHMgKi8KIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnJlcGx5ID0ga3phbGxv Yyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1 cyA9IE1QVDJfQ01EX05PVF9VU0VEOwpAQCAtNDMwOSw2ICs0MTYyLDggQEAgbXB0MnNhc19iYXNl X2F0dGFjaChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiAJCWdvdG8gb3V0X2ZyZWVfcmVz b3VyY2VzOwogCX0KIAorCWluaXRfY29tcGxldGlvbigmaW9jLT5zaG9zdF9yZWNvdmVyeV9kb25l KTsKKwogCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7 IGkrKykKIAkJaW9jLT5ldmVudF9tYXNrc1tpXSA9IC0xOwogCkBAIC00MzMxLDYgKzQxODYsNyBA QCBtcHQyc2FzX2Jhc2VfYXR0YWNoKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIAkJX2Jh c2VfdXBkYXRlX21pc3NpbmdfZGVsYXkoaW9jLCBtaXNzaW5nX2RlbGF5WzBdLAogCQkgICAgbWlz c2luZ19kZWxheVsxXSk7CiAKKwltcHQyc2FzX2Jhc2Vfc3RhcnRfd2F0Y2hkb2coaW9jKTsKIAly ZXR1cm4gMDsKIAogIG91dF9mcmVlX3Jlc291cmNlczoKQEAgLTQzNDgsNyArNDIwNCw2IEBAIG1w dDJzYXNfYmFzZV9hdHRhY2goc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQogCWtmcmVlKGlv Yy0+c2NzaWhfY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5jb25maWdfY21kcy5yZXBseSk7CiAJ a2ZyZWUoaW9jLT5iYXNlX2NtZHMucmVwbHkpOwotCWtmcmVlKGlvYy0+cG9ydF9lbmFibGVfY21k cy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5jdGxfY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5jdGxf Y21kcy5zZW5zZSk7CiAJa2ZyZWUoaW9jLT5wZmFjdHMpOwpAQCAtNDM4OCw3ICs0MjQzLDYgQEAg bXB0MnNhc19iYXNlX2RldGFjaChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiAJa2ZyZWUo aW9jLT5jdGxfY21kcy5yZXBseSk7CiAJa2ZyZWUoaW9jLT5jdGxfY21kcy5zZW5zZSk7CiAJa2Zy ZWUoaW9jLT5iYXNlX2NtZHMucmVwbHkpOwotCWtmcmVlKGlvYy0+cG9ydF9lbmFibGVfY21kcy5y ZXBseSk7CiAJa2ZyZWUoaW9jLT50bV9jbWRzLnJlcGx5KTsKIAlrZnJlZShpb2MtPnRyYW5zcG9y dF9jbWRzLnJlcGx5KTsKIAlrZnJlZShpb2MtPnNjc2loX2NtZHMucmVwbHkpOwpAQCAtNDQzMCwy MCArNDI4NCw2IEBAIF9iYXNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAq aW9jLCBpbnQgcmVzZXRfcGhhc2UpCiAJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9j LT5iYXNlX2NtZHMuc21pZCk7CiAJCQljb21wbGV0ZSgmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJ CX0KLQkJaWYgKGlvYy0+cG9ydF9lbmFibGVfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5H KSB7Ci0JCQlpb2MtPnBvcnRfZW5hYmxlX2ZhaWxlZCA9IDE7Ci0JCQlpb2MtPnBvcnRfZW5hYmxl X2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOwotCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21p ZChpb2MsIGlvYy0+cG9ydF9lbmFibGVfY21kcy5zbWlkKTsKLQkJCWlmIChpb2MtPmlzX2RyaXZl cl9sb2FkaW5nKSB7Ci0JCQkJaW9jLT5zdGFydF9zY2FuX2ZhaWxlZCA9Ci0JCQkJICAgIE1QSTJf SU9DU1RBVFVTX0lOVEVSTkFMX0VSUk9SOwotCQkJCWlvYy0+c3RhcnRfc2NhbiA9IDA7Ci0JCQkJ aW9jLT5wb3J0X2VuYWJsZV9jbWRzLnN0YXR1cyA9Ci0JCQkJCQlNUFQyX0NNRF9OT1RfVVNFRDsK LQkJCX0gZWxzZQotCQkJCWNvbXBsZXRlKCZpb2MtPnBvcnRfZW5hYmxlX2NtZHMuZG9uZSk7Ci0K LQkJfQogCQlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7 CiAJCQlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVNFVDsKIAkJCW1wdDJz YXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBpb2MtPmNvbmZpZ19jbWRzLnNtaWQpOwpAQCAtNDUwOSw2 ICs0MzQ5LDcgQEAgbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNB U19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnLAogewogCWludCByOwogCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisJdTggcGVfY29tcGxldGUgPSBpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3Rv X2NvbXBsZXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVz OiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwpAQCAtNDU1NSw4ICs0Mzk2 LDcgQEAgbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQ VEVSICppb2MsIGludCBzbGVlcF9mbGFnLAogCS8qIElmIHRoaXMgaGFyZCByZXNldCBpcyBjYWxs ZWQgd2hpbGUgcG9ydCBlbmFibGUgaXMgYWN0aXZlLCB0aGVuCiAJICogdGhlcmUgaXMgbm8gcmVh c29uIHRvIGNhbGwgbWFrZV9pb2Nfb3BlcmF0aW9uYWwKIAkgKi8KLQlpZiAoaW9jLT5pc19kcml2 ZXJfbG9hZGluZyAmJiBpb2MtPnBvcnRfZW5hYmxlX2ZhaWxlZCkgewotCQlpb2MtPnJlbW92ZV9o b3N0ID0gMTsKKwlpZiAocGVfY29tcGxldGUpIHsKIAkJciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0 OwogCX0KQEAgLTQ1NzAsNiArNDQxMCw3IEBAIG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRs ZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZywKIAlzcGluX2xv Y2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCWlv Yy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX3N0YXR1cyA9IHI7CiAJaW9jLT5zaG9zdF9yZWNvdmVy eSA9IDA7CisJY29tcGxldGUoJmlvYy0+c2hvc3RfcmVjb3ZlcnlfZG9uZSk7CiAJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwog CW11dGV4X3VubG9jaygmaW9jLT5yZXNldF9pbl9wcm9ncmVzc19tdXRleCk7CiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21w dDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggM2MzYmFiYy4uNTkzNTRkYiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21w dDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTY5LDExICs2OSwxMSBAQAogI2RlZmluZSBNUFQyU0FT X0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jw b3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVT Q1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUg TVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjEwLjEwMC4wMC4wMCIKLSNkZWZpbmUgTVBUMlNBU19N QUpPUl9WRVJTSU9OCQkxMAorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDkuMTAw LjAwLjAxIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTA5CiAjZGVmaW5lIE1QVDJT QVNfTUlOT1JfVkVSU0lPTgkJMTAwCiAjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDAK LSNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCisjZGVmaW5lIE1QVDJTQVNfUkVM RUFTRV9WRVJTSU9OCQkwMQogCiAvKgogICogU2V0IE1QVDJTQVNfU0dfREVQVEggdmFsdWUgYmFz ZWQgb24gdXNlciBpbnB1dC4KQEAgLTY1NSwxMiArNjU1LDcgQEAgZW51bSBtdXRleF90eXBlIHsK ICAqIEBpZ25vcmVfbG9naW5mb3M6IGlnbm9yZSBsb2dpbmZvcyBkdXJpbmcgdGFzayBtYW5hZ2Vt ZW50CiAgKiBAcmVtb3ZlX2hvc3Q6IGZsYWcgZm9yIHdoZW4gZHJpdmVyIHVubG9hZHMsIHRvIGF2 b2lkIHNlbmRpbmcgZGV2IHJlc2V0cwogICogQHBjaV9lcnJvcl9yZWNvdmVyeTogZmxhZyB0byBw cmV2ZW50IGlvYyBhY2Nlc3MgdW50aWwgc2xvdCByZXNldCBjb21wbGV0ZXMKLSAqIEB3YWl0X2Zv cl9kaXNjb3ZlcnlfdG9fY29tcGxldGU6IGZsYWcgc2V0IGF0IGRyaXZlciBsb2FkIHRpbWUgd2hl bgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRp bmcgb24gcmVwb3J0aW5nIGRldmljZXMKLSAqIEBpc19kcml2ZXJfbG9hZGluZzogZmxhZyBzZXQg YXQgZHJpdmVyIGxvYWQgdGltZQotICogQHBvcnRfZW5hYmxlX2ZhaWxlZDogZmxhZyBzZXQgd2hl biBwb3J0IGVuYWJsZSBoYXMgZmFpbGVkCi0gKiBAc3RhcnRfc2NhbjogZmxhZyBzZXQgZnJvbSBz Y2FuX3N0YXJ0IGNhbGxiYWNrLCBjbGVhcmVkIGZyb20gX21wdDJzYXNfZndfd29yawotICogQHN0 YXJ0X3NjYW5fZmFpbGVkOiBtZWFucyBwb3J0IGVuYWJsZSBmYWlsZWQsIHJldHVybidzIHRoZSBp b2Nfc3RhdHVzCisgKiBAd2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGU6CiAgKiBAbXNp eF9lbmFibGU6IGZsYWcgaW5kaWNhdGluZyBtc2l4IGlzIGVuYWJsZWQKICAqIEBtc2l4X3ZlY3Rv cl9jb3VudDogbnVtYmVyIG1zaXggdmVjdG9ycwogICogQGNwdV9tc2l4X3RhYmxlOiB0YWJsZSBm b3IgbWFwcGluZyBjcHVzIHRvIG1zaXggaW5kZXgKQEAgLTc5NSwyMCArNzkwLDE1IEBAIHN0cnVj dCBNUFQyU0FTX0FEQVBURVIgewogCXU4CQlzaG9zdF9yZWNvdmVyeTsKIAogCXN0cnVjdCBtdXRl eAlyZXNldF9pbl9wcm9ncmVzc19tdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbglzaG9zdF9yZWNv dmVyeV9kb25lOwogCXNwaW5sb2NrX3QgCWlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrOwogCXU4 CQlpb2NfbGlua19yZXNldF9pbl9wcm9ncmVzczsKLQl1OAkJaW9jX3Jlc2V0X2luX3Byb2dyZXNz X3N0YXR1czsKKwlpbnQJCWlvY19yZXNldF9pbl9wcm9ncmVzc19zdGF0dXM7CiAKIAl1OAkJaWdu b3JlX2xvZ2luZm9zOwogCXU4CQlyZW1vdmVfaG9zdDsKIAl1OAkJcGNpX2Vycm9yX3JlY292ZXJ5 OwotCXU4CQl3YWl0X2Zvcl9kaXNjb3ZlcnlfdG9fY29tcGxldGU7Ci0Jc3RydWN0IGNvbXBsZXRp b24JcG9ydF9lbmFibGVfZG9uZTsKLQl1OAkJaXNfZHJpdmVyX2xvYWRpbmc7Ci0JdTgJCXBvcnRf ZW5hYmxlX2ZhaWxlZDsKLQotCXU4CQlzdGFydF9zY2FuOwotCXUxNgkJc3RhcnRfc2Nhbl9mYWls ZWQ7CisJdTgJCXdhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJdTgJCW1zaXhf ZW5hYmxlOwogCXUxNgkJbXNpeF92ZWN0b3JfY291bnQ7CkBAIC04MjQsMTMgKzgxNCwxMSBAQCBz dHJ1Y3QgTVBUMlNBU19BREFQVEVSIHsKIAl1OAkJc2NzaWhfY2JfaWR4OwogCXU4CQljdGxfY2Jf aWR4OwogCXU4CQliYXNlX2NiX2lkeDsKLQl1OAkJcG9ydF9lbmFibGVfY2JfaWR4OwogCXU4CQlj b25maWdfY2JfaWR4OwogCXU4CQl0bV90cl9jYl9pZHg7CiAJdTgJCXRtX3RyX3ZvbHVtZV9jYl9p ZHg7CiAJdTgJCXRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCBi YXNlX2NtZHM7Ci0Jc3RydWN0IF9pbnRlcm5hbF9jbWQgcG9ydF9lbmFibGVfY21kczsKIAlzdHJ1 Y3QgX2ludGVybmFsX2NtZCB0cmFuc3BvcnRfY21kczsKIAlzdHJ1Y3QgX2ludGVybmFsX2NtZCBz Y3NpaF9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRtX2NtZHM7CkBAIC0xMDEzLDggKzEw MDEsNiBAQCB2b2lkIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodTggY2Jf aWR4KTsKIAogdTggbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9j LCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKICAgICB1MzIgcmVwbHkpOwotdTggbXB0MnNhc19w b3J0X2VuYWJsZV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0J dTggbXNpeF9pbmRleCwJdTMyIHJlcGx5KTsKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfcmVwbHlf dmlydF9hZGRyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyIHBoeXNfYWRkcik7CiAK IHUzMiBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlv YywgaW50IGNvb2tlZCk7CkBAIC0xMDI5LDggKzEwMTUsNiBAQCB2b2lkIG1wdDJzYXNfYmFzZV92 YWxpZGF0ZV9ldmVudF90eXBlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyICpldmVu dF90eQogCiB2b2lkIG1wdDJzYXNfaGFsdF9maXJtd2FyZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVS ICppb2MpOwogCi1pbnQgbXB0MnNhc19wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVS ICppb2MpOwotCiAvKiBzY3NpaCBzaGFyZWQgQVBJICovCiB1OCBtcHQyc2FzX3Njc2loX2V2ZW50 X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKICAg ICB1MzIgcmVwbHkpOwpAQCAtMTA0OCw4ICsxMDMyLDYgQEAgc3RydWN0IF9zYXNfbm9kZSAqbXB0 MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKHN0cnVjdCBNUFQyU0FTX0FE QVAKIHN0cnVjdCBfc2FzX2RldmljZSAqbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlf c2FzX2FkZHJlc3MoCiAgICAgc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2Fk ZHJlc3MpOwogCi12b2lkIG1wdDJzYXNfcG9ydF9lbmFibGVfY29tcGxldGUoc3RydWN0IE1QVDJT QVNfQURBUFRFUiAqaW9jKTsKLQogdm9pZCBtcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoc3Ry dWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpOwogCiAvKiBjb25maWcg c2hhcmVkIEFQSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19j b25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggMzZl YTBiMi4uMmIxMTAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19j b25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0x MzU2LDkgKzEzNTYsNiBAQCBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShzdHJ1Y3Qg TVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBwZF9oYW5kbGUsCiAJTXBpMkNvbmZpZ1JlcGx5X3Qg bXBpX3JlcGx5OwogCWludCByLCBpLCBjb25maWdfcGFnZV9zejsKIAl1MTYgaW9jX3N0YXR1czsK LQlpbnQgY29uZmlnX251bTsKLQl1MTYgZWxlbWVudF90eXBlOwotCXUxNiBwaHlzX2Rpc2tfZGV2 X2hhbmRsZTsKIAogCSp2b2x1bWVfaGFuZGxlID0gMDsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAw LCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwpAQCAtMTM3NCw1MyArMTM3MSwzNSBAQCBt cHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICpp b2MsIHUxNiBwZF9oYW5kbGUsCiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCisJbXBpX3JlcXVlc3Qu UGFnZUFkZHJlc3MgPQorCSAgICBjcHVfdG9fbGUzMihNUEkyX1JBSURfUEdBRF9GT1JNX0FDVElW RV9DT05GSUcpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdF X1JFQURfQ1VSUkVOVDsKIAljb25maWdfcGFnZV9zeiA9IChsZTE2X3RvX2NwdShtcGlfcmVwbHku RXh0UGFnZUxlbmd0aCkgKiA0KTsKIAljb25maWdfcGFnZSA9IGttYWxsb2MoY29uZmlnX3BhZ2Vf c3osIEdGUF9LRVJORUwpOwotCWlmICghY29uZmlnX3BhZ2UpIHsKLQkJciA9IC0xOworCWlmICgh Y29uZmlnX3BhZ2UpCiAJCWdvdG8gb3V0OwotCX0KLQljb25maWdfbnVtID0gMHhmZjsKLQl3aGls ZSAoMSkgewotCQltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGNvbmZpZ19u dW0gKwotCQkgICAgTVBJMl9SQUlEX1BHQURfRk9STV9HRVRfTkVYVF9DT05GSUdOVU0pOwotCQly ID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCQkgICAg TVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAotCQkgICAgY29u ZmlnX3BhZ2Vfc3opOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCQlyID0gLTE7Ci0JCWlvY19z dGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCi0JCSAgICBNUEkyX0lP Q1NUQVRVU19NQVNLOwotCQlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNT KQorCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCisJ ICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAg Y29uZmlnX3BhZ2Vfc3opOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCXIgPSAtMTsKKwlpb2Nf c3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRV U19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpCisJCWdv dG8gb3V0OworCWZvciAoaSA9IDA7IGkgPCBjb25maWdfcGFnZS0+TnVtRWxlbWVudHM7IGkrKykg eworCQlpZiAoKGxlMTZfdG9fY3B1KGNvbmZpZ19wYWdlLT5Db25maWdFbGVtZW50W2ldLkVsZW1l bnRGbGFncykgJgorCQkgICAgTVBJMl9SQUlEQ09ORklHMF9FRkxBR1NfTUFTS19FTEVNRU5UX1RZ UEUpICE9CisJCSAgICBNUEkyX1JBSURDT05GSUcwX0VGTEFHU19WT0xfUEhZU19ESVNLX0VMRU1F TlQpCisJCQljb250aW51ZTsKKwkJaWYgKGxlMTZfdG9fY3B1KGNvbmZpZ19wYWdlLT5Db25maWdF bGVtZW50W2ldLgorCQkgICAgUGh5c0Rpc2tEZXZIYW5kbGUpID09IHBkX2hhbmRsZSkgeworCQkJ KnZvbHVtZV9oYW5kbGUgPSBsZTE2X3RvX2NwdShjb25maWdfcGFnZS0+CisJCQkgICAgQ29uZmln RWxlbWVudFtpXS5Wb2xEZXZIYW5kbGUpOworCQkJciA9IDA7CiAJCQlnb3RvIG91dDsKLQkJZm9y IChpID0gMDsgaSA8IGNvbmZpZ19wYWdlLT5OdW1FbGVtZW50czsgaSsrKSB7Ci0JCQllbGVtZW50 X3R5cGUgPSBsZTE2X3RvX2NwdShjb25maWdfcGFnZS0+Ci0JCQkgICAgQ29uZmlnRWxlbWVudFtp XS5FbGVtZW50RmxhZ3MpICYKLQkJCSAgICBNUEkyX1JBSURDT05GSUcwX0VGTEFHU19NQVNLX0VM RU1FTlRfVFlQRTsKLQkJCWlmIChlbGVtZW50X3R5cGUgPT0KLQkJCSAgICBNUEkyX1JBSURDT05G SUcwX0VGTEFHU19WT0xfUEhZU19ESVNLX0VMRU1FTlQgfHwKLQkJCSAgICBlbGVtZW50X3R5cGUg PT0KLQkJCSAgICBNUEkyX1JBSURDT05GSUcwX0VGTEFHU19PQ0VfRUxFTUVOVCkgewotCQkJCXBo eXNfZGlza19kZXZfaGFuZGxlID0KLQkJCQkgICAgbGUxNl90b19jcHUoY29uZmlnX3BhZ2UtPkNv bmZpZ0VsZW1lbnRbaV0uCi0JCQkJICAgIFBoeXNEaXNrRGV2SGFuZGxlKTsKLQkJCQlpZiAocGh5 c19kaXNrX2Rldl9oYW5kbGUgPT0gcGRfaGFuZGxlKSB7Ci0JCQkJCSp2b2x1bWVfaGFuZGxlID0K LQkJCQkJICAgIGxlMTZfdG9fY3B1KGNvbmZpZ19wYWdlLT4KLQkJCQkJICAgIENvbmZpZ0VsZW1l bnRbaV0uVm9sRGV2SGFuZGxlKTsKLQkJCQkJciA9IDA7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0K LQkJCX0gZWxzZSBpZiAoZWxlbWVudF90eXBlID09Ci0JCQkgICAgTVBJMl9SQUlEQ09ORklHMF9F RkxBR1NfSE9UX1NQQVJFX0VMRU1FTlQpIHsKLQkJCQkqdm9sdW1lX2hhbmRsZSA9IDA7Ci0JCQkJ ciA9IDA7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CiAJCX0KLQkJY29uZmlnX251bSA9IGNvbmZpZ19w YWdlLT5Db25maWdOdW07CiAJfQogIG91dDoKIAlrZnJlZShjb25maWdfcGFnZSk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21w dDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCBhYWJjYjkxLi45YWRiMDEzIDEwMDY0NAotLS0gYS9k cml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQy c2FzL21wdDJzYXNfY3RsLmMKQEAgLTEyMDcsOSArMTIwNyw2IEBAIF9jdGxfZG9fcmVzZXQodm9p ZCBfX3VzZXIgKmFyZykKIAlpZiAoX2N0bF92ZXJpZnlfYWRhcHRlcihrYXJnLmhkci5pb2NfbnVt YmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChpb2Mt PnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5IHx8Ci0JCWlvYy0+aXNf ZHJpdmVyX2xvYWRpbmcpCi0JCXJldHVybiAtRUFHQUlOOwogCWRjdGxwcmludGsoaW9jLCBwcmlu dGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVu Y19fKSk7CiAKQEAgLTIxODEsOCArMjE3OCw3IEBAIF9jdGxfaW9jdGxfbWFpbihzdHJ1Y3QgZmls ZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIAkJICAgICFpb2Mp CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAotCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2Mt PnBjaV9lcnJvcl9yZWNvdmVyeSB8fAotCQkJCWlvYy0+aXNfZHJpdmVyX2xvYWRpbmcpCisJCWlm IChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KQogCQkJcmV0 dXJuIC1FQUdBSU47CiAKIAkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0 Ml9pb2N0bF9jb21tYW5kKSkgewpAQCAtMjMwMSw4ICsyMjk3LDcgQEAgX2N0bF9jb21wYXRfbXB0 X2NvbW1hbmQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBh cmcpCiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZzMyLmhkci5pb2NfbnVtYmVyLCAmaW9j KSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChpb2MtPnNob3N0X3Jl Y292ZXJ5IHx8IGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5IHx8Ci0JCQlpb2MtPmlzX2RyaXZlcl9s b2FkaW5nKQorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5IHx8IGlvYy0+cGNpX2Vycm9yX3JlY292 ZXJ5KQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCW1lbXNldCgma2FyZywgMCwgc2l6ZW9mKHN0cnVj dCBtcHQyX2lvY3RsX2NvbW1hbmQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2Fz L21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpp bmRleCA0ZTA0MWY2Li4xZGExYWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9t cHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5j CkBAIC03MSw5ICs3MSw2IEBAIHN0YXRpYyB2b2lkIF9maXJtd2FyZV9ldmVudF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0YXRpYyB1OCBfc2NzaWhfY2hlY2tfZm9yX3BlbmRp bmdfdG0oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiAKLXN0YXRpYyB2 b2lkIF9zY3NpaF9zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKLXN0YXRpYyBp bnQgX3Njc2loX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVk IGxvbmcgdGltZSk7Ci0KIC8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCiBMSVNUX0hFQUQobXB0MnNh c19pb2NfbGlzdCk7CiAKQEAgLTgyLDcgKzc5LDYgQEAgc3RhdGljIHU4IHNjc2lfaW9fY2JfaWR4 ID0gLTE7CiBzdGF0aWMgdTggdG1fY2JfaWR4ID0gLTE7CiBzdGF0aWMgdTggY3RsX2NiX2lkeCA9 IC0xOwogc3RhdGljIHU4IGJhc2VfY2JfaWR4ID0gLTE7Ci1zdGF0aWMgdTggcG9ydF9lbmFibGVf Y2JfaWR4ID0gLTE7CiBzdGF0aWMgdTggdHJhbnNwb3J0X2NiX2lkeCA9IC0xOwogc3RhdGljIHU4 IHNjc2loX2NiX2lkeCA9IC0xOwogc3RhdGljIHU4IGNvbmZpZ19jYl9pZHggPSAtMTsKQEAgLTEw NywxOCArMTAzLDYgQEAgc3RhdGljIGludCBtYXhfbHVuID0gTVBUMlNBU19NQVhfTFVOOwogbW9k dWxlX3BhcmFtKG1heF9sdW4sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9sdW4sICIg bWF4IGx1biwgZGVmYXVsdD0xNjg5NSAiKTsKIAotLyogZGlhZ19idWZmZXJfZW5hYmxlIGlzIGJp dHdpc2UKLSAqIGJpdCAwIHNldCA9IFRSQUNFCi0gKiBiaXQgMSBzZXQgPSBTTkFQU0hPVAotICog Yml0IDIgc2V0ID0gRVhURU5ERUQKLSAqCi0gKiBFaXRoZXIgYml0IGNhbiBiZSBzZXQsIG9yIGJv dGgKLSAqLwotc3RhdGljIGludCBkaWFnX2J1ZmZlcl9lbmFibGUgPSAtMTsKLW1vZHVsZV9wYXJh bShkaWFnX2J1ZmZlcl9lbmFibGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpYWdfYnVm ZmVyX2VuYWJsZSwgIiBwb3N0IGRpYWcgYnVmZmVycyAiCi0JIihUUkFDRT0xL1NOQVBTSE9UPTIv RVhURU5ERUQ9NC9kZWZhdWx0PTApIik7Ci0KIC8qKgogICogc3RydWN0IHNlbnNlX2luZm8gLSBj b21tb24gc3RydWN0dXJlIGZvciBvYnRhaW5pbmcgc2Vuc2Uga2V5cwogICogQHNrZXk6IHNlbnNl IGtleQpAQCAtMTMzLDggKzExNyw4IEBAIHN0cnVjdCBzZW5zZV9pbmZvIHsKIAogCiAjZGVmaW5l IE1QVDJTQVNfVFVSTl9PTl9GQVVMVF9MRUQgKDB4RkZGQykKLSNkZWZpbmUgTVBUMlNBU19QT1JU X0VOQUJMRV9DT01QTEVURSAoMHhGRkZEKQotI2RlZmluZSBNUFQyU0FTX1JFTU9WRV9VTlJFU1BP TkRJTkdfREVWSUNFUyAoMHhGRkZGKQorI2RlZmluZSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NU X1JFU0VUICgweEZGRkYpCisKIC8qKgogICogc3RydWN0IGZ3X2V2ZW50X3dvcmsgLSBmaXJtd2Fy ZSBldmVudCBzdHJ1Y3QKICAqIEBsaXN0OiBsaW5rIGxpc3QgZnJhbWV3b3JrCkBAIC0zODgsMzQg KzM3MiwzMSBAQCBfc2NzaWhfZ2V0X3Nhc19hZGRyZXNzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIg KmlvYywgdTE2IGhhbmRsZSwKIAlNcGkyU2FzRGV2aWNlUGFnZTBfdCBzYXNfZGV2aWNlX3BnMDsK IAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJdTMyIGlvY19zdGF0dXM7Ci0JKnNhc19h ZGRyZXNzID0gMDsKIAogCWlmIChoYW5kbGUgPD0gaW9jLT5zYXNfaGJhLm51bV9waHlzKSB7CiAJ CSpzYXNfYWRkcmVzcyA9IGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzczsKIAkJcmV0dXJuIDA7Ci0J fQorCX0gZWxzZQorCQkqc2FzX2FkZHJlc3MgPSAwOwogCiAJaWYgKChtcHQyc2FzX2NvbmZpZ19n ZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCiAJICAg IE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBoYW5kbGUpKSkgewotCQlwcmludGso TVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsCi0J CV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1U ICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywg X19MSU5FX18sIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlpb2Nfc3RhdHVz ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRVU19NQVNL OwotCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKLQkJKnNhc19h ZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2RldmljZV9wZzAuU0FTQWRkcmVzcyk7Ci0JCXJldHVy biAwOworCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJ ICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFU VVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJoYW5kbGUoMHglMDR4KSwg aW9jX3N0YXR1cygweCUwNHgpIgorCQkgICAgIlxuZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwg aW9jLT5uYW1lLCBoYW5kbGUsIGlvY19zdGF0dXMsCisJCSAgICAgX19GSUxFX18sIF9fTElORV9f LCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIHdlIGhpdCB0aGlzIGJlY3Vh c2UgdGhlIGdpdmVuIHBhcmVudCBoYW5kbGUgZG9lc24ndCBleGlzdCAqLwotCWlmIChpb2Nfc3Rh dHVzID09IE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCi0JCXJldHVybiAtRU5Y SU87Ci0JLyogZWxzZSBlcnJvciBjYXNlICovCi0JcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiaGFu ZGxlKDB4JTA0eCksIGlvY19zdGF0dXMoMHglMDR4KSwgIgotCSAgICAiZmFpbHVyZSBhdCAlczol ZC8lcygpIVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIGlvY19zdGF0dXMsCi0JICAgICBfX0ZJTEVf XywgX19MSU5FX18sIF9fZnVuY19fKTsKLQlyZXR1cm4gLUVJTzsKKwkqc2FzX2FkZHJlc3MgPSBs ZTY0X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5TQVNBZGRyZXNzKTsKKwlyZXR1cm4gMDsKIH0KIAog LyoqCkBAIC00NDMsMTEgKzQyNCw3IEBAIF9zY3NpaF9kZXRlcm1pbmVfYm9vdF9kZXZpY2Uoc3Ry dWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogCXUxNiBzbG90OwogCiAJIC8qIG9ubHkgcHJvY2Vz cyB0aGlzIGZ1bmN0aW9uIHdoZW4gZHJpdmVyIGxvYWRzICovCi0JaWYgKCFpb2MtPmlzX2RyaXZl cl9sb2FkaW5nKQotCQlyZXR1cm47Ci0KLQkgLyogbm8gQmlvcywgcmV0dXJuIGltbWVkaWF0ZWx5 ICovCi0JaWYgKCFpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uKQorCWlmICghaW9jLT53YWl0X2Zv cl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkKIAkJcmV0dXJuOwogCiAJaWYgKCFpc19yYWlkKSB7 CkBAIC02MTAsMTUgKzU4Nyw4IEBAIF9zY3NpaF9zYXNfZGV2aWNlX2FkZChzdHJ1Y3QgTVBUMlNB U19BREFQVEVSICppb2MsCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNl X2xvY2ssIGZsYWdzKTsKIAogCWlmICghbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoaW9jLCBz YXNfZGV2aWNlLT5oYW5kbGUsCi0JICAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQp KSB7CisJICAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpKQogCQlfc2NzaWhfc2Fz X2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKLQkJfSBlbHNlIGlmICghc2FzX2Rldmlj ZS0+c3RhcmdldCkgewotCQkJaWYgKCFpb2MtPmlzX2RyaXZlcl9sb2FkaW5nKQotCQkJCW1wdDJz YXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywKLQkJCQlzYXNfZGV2aWNlLT5zYXNfYWRkcmVz cywKLQkJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpOwotCQkJX3Njc2loX3Nh c19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7Ci0JCX0KIH0KIAogLyoqCkBAIC0xNDMw LDEwICsxNDAwLDYgQEAgX3Njc2loX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpz ZGV2KQogewogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJ c3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0Owot CXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKLQlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19k ZXZpY2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghc2Rldi0+aG9zdGRhdGEpCiAJ CXJldHVybjsKQEAgLTE0NDEsMTkgKzE0MDcsNiBAQCBfc2NzaWhfc2xhdmVfZGVzdHJveShzdHJ1 Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiAJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXNh c190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CiAJc2FzX3RhcmdldF9wcml2 X2RhdGEtPm51bV9sdW5zLS07Ci0KLQlzaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2 KTsKLQlpb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKLQotCWlmICghKHNhc190YXJnZXRfcHJpdl9k YXRhLT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKSkgewotCQlzcGluX2xvY2tfaXJx c2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJc2FzX2RldmljZSA9IG1wdDJz YXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKLQkJICAgc2FzX3Rh cmdldF9wcml2X2RhdGEtPnNhc19hZGRyZXNzKTsKLQkJaWYgKHNhc19kZXZpY2UpCi0JCQlzYXNf ZGV2aWNlLT5zdGFyZ2V0ID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5z YXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQl9Ci0KIAlrZnJlZShzZGV2LT5ob3N0ZGF0YSk7CiAJ c2Rldi0+aG9zdGRhdGEgPSBOVUxMOwogfQpAQCAtMTY0NSwxMCArMTU5OCw4IEBAIF9zY3NpaF9z ZXRfbGV2ZWwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpy YWlkX2RldmljZSkKICAqIF9zY3NpaF9nZXRfdm9sdW1lX2NhcGFiaWxpdGllcyAtIHZvbHVtZSBj YXBhYmlsaXRpZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNhc19kZXZpY2U6 IHRoZSByYWlkX2RldmljZSBvYmplY3QKLSAqCi0gKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGVs c2UgMQogICovCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogX3Njc2loX2dldF92b2x1bWVfY2Fw YWJpbGl0aWVzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBzdHJ1Y3QgX3JhaWRf ZGV2aWNlICpyYWlkX2RldmljZSkKIHsKQEAgLTE2NjEsMTAgKzE2MTIsOSBAQCBfc2NzaWhfZ2V0 X3ZvbHVtZV9jYXBhYmlsaXRpZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogCiAJaWYg KChtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX3Bkcyhpb2MsIHJhaWRfZGV2aWNlLT5oYW5kbGUs CiAJICAgICZudW1fcGRzKSkgfHwgIW51bV9wZHMpIHsKLQkJZGZhaWxwcmludGsoaW9jLCBwcmlu dGsoTVBUMlNBU19XQVJOX0ZNVAotCQkgICAgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlv Yy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLAotCQkgICAgX19mdW5jX18pKTsKLQkJcmV0dXJu IDE7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIs CisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyZXR1 cm47CiAJfQogCiAJcmFpZF9kZXZpY2UtPm51bV9wZHMgPSBudW1fcGRzOwpAQCAtMTY3MiwxOSAr MTYyMiwxNyBAQCBfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMoc3RydWN0IE1QVDJTQVNf QURBUFRFUiAqaW9jLAogCSAgICBzaXplb2YoTXBpMlJhaWRWb2wwUGh5c0Rpc2tfdCkpOwogCXZv bF9wZzAgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZvbF9wZzApIHsKLQkJZGZh aWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19XQVJOX0ZNVAotCQkgICAgImZhaWx1cmUgYXQg JXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLAotCQkgICAgX19m dW5jX18pKTsKLQkJcmV0dXJuIDE7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUg YXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywg X19mdW5jX18pOworCQlyZXR1cm47CiAJfQogCiAJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcmFp ZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgdm9sX3BnMCwKIAkgICAgIE1QSTJfUkFJRF9W T0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwgc3opKSkgewotCQlk ZmFpbHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX1dBUk5fRk1UCi0JCSAgICAiZmFpbHVyZSBh dCAlczolZC8lcygpIVxuIiwgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICBf X2Z1bmNfXykpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVz KCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsK IAkJa2ZyZWUodm9sX3BnMCk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAJcmFpZF9k ZXZpY2UtPnZvbHVtZV90eXBlID0gdm9sX3BnMC0+Vm9sdW1lVHlwZTsKQEAgLTE3MDQsNyArMTY1 Miw2IEBAIF9zY3NpaF9nZXRfdm9sdW1lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgTVBUMlNBU19BREFQ VEVSICppb2MsCiAJfQogCiAJa2ZyZWUodm9sX3BnMCk7Ci0JcmV0dXJuIDA7CiB9CiAvKioKICAq IF9zY3NpaF9kaXNhYmxlX2RkaW8gLSBEaXNhYmxlIGRpcmVjdCBJL08gZm9yIGFsbCB0aGUgdm9s dW1lcwpAQCAtMTk3NSwyMCArMTkyMiwxMyBAQCBfc2NzaWhfc2xhdmVfY29uZmlndXJlKHN0cnVj dCBzY3NpX2RldmljZSAqc2RldikKIAkJICAgICBzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxl KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFn cyk7CiAJCWlmICghcmFpZF9kZXZpY2UpIHsKLQkJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1Q VDJTQVNfV0FSTl9GTVQKLQkJCSAgICAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgaW9jLT5u YW1lLCBfX0ZJTEVfXywKLQkJCSAgICBfX0xJTkVfXywgX19mdW5jX18pKTsKLQkJCXJldHVybiAx OworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwK KwkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJcmV0 dXJuIDA7CiAJCX0KIAogCQlfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMoaW9jLCByYWlk X2RldmljZSk7CiAKLQkJaWYgKF9zY3NpaF9nZXRfdm9sdW1lX2NhcGFiaWxpdGllcyhpb2MsIHJh aWRfZGV2aWNlKSkgewotCQkJZGZhaWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19XQVJOX0ZN VAotCQkJICAgICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsIF9fRklMRV9f LAotCQkJICAgIF9fTElORV9fLCBfX2Z1bmNfXykpOwotCQkJcmV0dXJuIDE7Ci0JCX0KIAkJLyoK IAkJICogV0FSUERSSVZFOiBJbml0aWFsaXplIHRoZSByZXF1aXJlZCBkYXRhIGZvciBEaXJlY3Qg SU8KIAkJICovCkBAIC0yMDYyLDIyICsyMDAyLDExIEBAIF9zY3NpaF9zbGF2ZV9jb25maWd1cmUo c3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogCWlmIChzYXNfZGV2aWNlKSB7CiAJCWlmIChzYXNf dGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgJgogCQkgICAgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NP TVBPTkVOVCkgewotCQkJaWYgKG1wdDJzYXNfY29uZmlnX2dldF92b2x1bWVfaGFuZGxlKGlvYywK LQkJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsICZzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKSkg ewotCQkJCWRmYWlscHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQKLQkJCQkgICAg ImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwKLQkJCQkgICAgX19GSUxFX18s IF9fTElORV9fLCBfX2Z1bmNfXykpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJaWYgKHNhc19k ZXZpY2UtPnZvbHVtZV9oYW5kbGUgJiYKLQkJCSAgICBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1l X3d3aWQoaW9jLAorCQkJbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV9oYW5kbGUoaW9jLAorCQkJ ICAgIHNhc19kZXZpY2UtPmhhbmRsZSwgJnNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUpOworCQkJ bXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKGlvYywKIAkJCSAgICBzYXNfZGV2aWNlLT52 b2x1bWVfaGFuZGxlLAotCQkJICAgICZzYXNfZGV2aWNlLT52b2x1bWVfd3dpZCkpIHsKLQkJCQlk ZmFpbHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX1dBUk5fRk1UCi0JCQkJICAgICJmYWlsdXJl IGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsCi0JCQkJICAgIF9fRklMRV9fLCBfX0xJTkVf XywgX19mdW5jX18pKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KKwkJCSAgICAmc2FzX2RldmljZS0+ dm9sdW1lX3d3aWQpOwogCQl9CiAJCWlmIChzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmIE1QSTJf U0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpIHsKIAkJCXFkZXB0aCA9IE1QVDJTQVNfU0FTX1FV RVVFX0RFUFRIOwpAQCAtMjEwNiwxMSArMjAzNSw2IEBAIF9zY3NpaF9zbGF2ZV9jb25maWd1cmUo c3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogCiAJCWlmICghc3NwX3RhcmdldCkKIAkJCV9zY3Np aF9kaXNwbGF5X3NhdGFfY2FwYWJpbGl0aWVzKGlvYywgc2FzX2RldmljZSwgc2Rldik7Ci0JfSBl bHNlIHsKLQkJZGZhaWxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19XQVJOX0ZNVAotCQkgICAg ImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9f LAotCQkgICAgX19mdW5jX18pKTsKLQkJcmV0dXJuIDE7CiAJfQogCiAJX3Njc2loX2NoYW5nZV9x dWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOwpAQCAtMjc5MCw0 MyArMjcxNCwyMiBAQCBfc2NzaWhfZndfZXZlbnRfZnJlZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVS ICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrCiAKIAogLyoqCi0gKiBfc2NzaWhfZXJyb3JfcmVj b3ZlcnlfZGVsZXRlX2RldmljZXMgLSByZW1vdmUgZGV2aWNlcyBub3QgcmVzcG9uZGluZworICog X3Njc2loX3F1ZXVlX3Jlc2NhbiAtIHF1ZXVlIGEgdG9wb2xvZ3kgcmVzY2FuIGZyb20gdXNlciBj b250ZXh0CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCiAgKiBSZXR1cm4gbm90aGlu Zy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9lcnJvcl9yZWNvdmVyeV9kZWxldGVfZGV2aWNl cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCitfc2NzaWhfcXVldWVfcmVzY2FuKHN0cnVj dCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIHsKIAlzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZl bnQ7CiAKLQlpZiAoaW9jLT5pc19kcml2ZXJfbG9hZGluZykKLQkJcmV0dXJuOwotCi0JZndfZXZl bnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZndfZXZlbnRfd29yayksIEdGUF9BVE9NSUMpOwot CWlmICghZndfZXZlbnQpCisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxl dGUpCiAJCXJldHVybjsKLQotCWZ3X2V2ZW50LT5ldmVudCA9IE1QVDJTQVNfUkVNT1ZFX1VOUkVT UE9ORElOR19ERVZJQ0VTOwotCWZ3X2V2ZW50LT5pb2MgPSBpb2M7Ci0JX3Njc2loX2Z3X2V2ZW50 X2FkZChpb2MsIGZ3X2V2ZW50KTsKLX0KLQotLyoqCi0gKiBtcHQyc2FzX3BvcnRfZW5hYmxlX2Nv bXBsZXRlIC0gcG9ydCBlbmFibGUgY29tcGxldGVkIChmYWtlIGV2ZW50KQotICogQGlvYzogcGVy IGFkYXB0ZXIgb2JqZWN0Ci0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXZvaWQKLW1wdDJz YXNfcG9ydF9lbmFibGVfY29tcGxldGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQotewot CXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKLQogCWZ3X2V2ZW50ID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IGZ3X2V2ZW50X3dvcmspLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWZ3X2V2ZW50 KQogCQlyZXR1cm47Ci0JZndfZXZlbnQtPmV2ZW50ID0gTVBUMlNBU19QT1JUX0VOQUJMRV9DT01Q TEVURTsKKwlmd19ldmVudC0+ZXZlbnQgPSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VU OwogCWZ3X2V2ZW50LT5pb2MgPSBpb2M7CiAJX3Njc2loX2Z3X2V2ZW50X2FkZChpb2MsIGZ3X2V2 ZW50KTsKIH0KQEAgLTMwNzQsMjcgKzI5NzcsMTQgQEAgX3Njc2loX3RtX3RyX3NlbmQoc3RydWN0 IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQogCU1waTJTQ1NJVGFza01hbmFnZW1l bnRSZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXUxNiBzbWlkOwogCXN0cnVjdCBfc2FzX2Rldmlj ZSAqc2FzX2RldmljZTsKLQlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9k YXRhID0gTlVMTDsKLQl1NjQgc2FzX2FkZHJlc3MgPSAwOworCXN0cnVjdCBNUFQyU0FTX1RBUkdF VCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qg X3RyX2xpc3QgKmRlbGF5ZWRfdHI7Ci0JdTMyIGlvY19zdGF0ZTsKIAotCWlmIChpb2MtPnJlbW92 ZV9ob3N0KSB7Ci0JCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6 IGhvc3QgaGFzIGJlZW4gIgotCQkgICAgInJlbW92ZWQ6IGhhbmRsZSgweCUwNHgpXG4iLCBfX2Z1 bmNfXywgaW9jLT5uYW1lLCBoYW5kbGUpKTsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoaW9jLT5w Y2lfZXJyb3JfcmVjb3ZlcnkpIHsKLQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lO Rk9fRk1UICIlczogaG9zdCBpbiBwY2kgIgotCQkgICAgImVycm9yIHJlY292ZXJ5OiBoYW5kbGUo MHglMDR4KVxuIiwgX19mdW5jX18sIGlvYy0+bmFtZSwKLQkJICAgIGhhbmRsZSkpOwotCQlyZXR1 cm47Ci0JfQotCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsK LQlpZiAoaW9jX3N0YXRlICE9IE1QSTJfSU9DX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCWRld3Rw cmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgaXMgbm90ICIKLQkJ ICAgIm9wZXJhdGlvbmFsOiBoYW5kbGUoMHglMDR4KVxuIiwgX19mdW5jX18sIGlvYy0+bmFtZSwK LQkJICAgaGFuZGxlKSk7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5yZW1vdmVf aG9zdCB8fAorCSAgICBpb2MtPnBjaV9lcnJvcl9yZWNvdmVyeSkgeworCQlkZXd0cHJpbnRrKGlv YywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluICIKKwkJICAgInBy b2dyZXNzIVxuIiwgX19mdW5jX18sIGlvYy0+bmFtZSkpOwogCQlyZXR1cm47CiAJfQogCkBAIC0z MTA4LDE4ICsyOTk4LDEzIEBAIF9zY3NpaF90bV90cl9zZW5kKHN0cnVjdCBNUFQyU0FTX0FEQVBU RVIgKmlvYywgdTE2IGhhbmRsZSkKIAkgICAgIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRh KSB7CiAJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRh dGE7CiAJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKLQkJc2FzX2FkZHJlc3Mg PSBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzczsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQy U0FTX0lORk9fRk1UCisJCSAgICAic2V0dGluZyBkZWxldGUgZmxhZzogaGFuZGxlKDB4JTA0eCks ICIKKwkJICAgICJzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwKKwkJ ICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzKSk7CiAJfQog CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CiAK LQlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEpIHsKLQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhN UFQyU0FTX0lORk9fRk1UICJzZXR0aW5nIGRlbGV0ZSBmbGFnOiAiCi0JCSJoYW5kbGUoMHglMDR4 KSwgc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsCi0JCQkodW5zaWdu ZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7Ci0JCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlv YywgaGFuZGxlKTsKLQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmhhbmRsZSA9IE1QVDJTQVNfSU5W QUxJRF9ERVZJQ0VfSEFORExFOwotCX0KLQogCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRf aHByKGlvYywgaW9jLT50bV90cl9jYl9pZHgpOwogCWlmICghc21pZCkgewogCQlkZWxheWVkX3Ry ID0ga3phbGxvYyhzaXplb2YoKmRlbGF5ZWRfdHIpLCBHRlBfQVRPTUlDKTsKQEAgLTMzMDAsMjEg KzMxODUsMTEgQEAgX3Njc2loX3RtX3RyX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIg KmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVw bHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90 ICptcGlfcmVxdWVzdDsKIAl1MTYgc21pZF9zYXNfY3RybDsKLQl1MzIgaW9jX3N0YXRlOwogCi0J aWYgKGlvYy0+cmVtb3ZlX2hvc3QpIHsKLQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FT X0lORk9fRk1UICIlczogaG9zdCBoYXMgYmVlbiAiCi0JCSAgICJyZW1vdmVkXG4iLCBfX2Z1bmNf XywgaW9jLT5uYW1lKSk7Ci0JCXJldHVybiAxOwotCX0gZWxzZSBpZiAoaW9jLT5wY2lfZXJyb3Jf cmVjb3ZlcnkpIHsKLQkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIl czogaG9zdCBpbiBwY2kgIgotCQkgICAgImVycm9yIHJlY292ZXJ5XG4iLCBfX2Z1bmNfXywgaW9j LT5uYW1lKSk7Ci0JCXJldHVybiAxOwotCX0KLQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0 X2lvY3N0YXRlKGlvYywgMSk7Ci0JaWYgKGlvY19zdGF0ZSAhPSBNUEkyX0lPQ19TVEFURV9PUEVS QVRJT05BTCkgewotCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVz OiBob3N0IGlzIG5vdCAiCi0JCSAgICAib3BlcmF0aW9uYWxcbiIsIF9fZnVuY19fLCBpb2MtPm5h bWUpKTsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPnJlbW92ZV9ob3N0IHx8CisJ ICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KSB7CisJCWRld3RwcmludGsoaW9jLCBwcmludGso TVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gIgorCQkgICAicHJvZ3Jlc3MhXG4i LCBfX2Z1bmNfXywgaW9jLT5uYW1lKSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNTIyNCw3ICs1 MDk5LDcgQEAgX3Njc2loX2FkZF9kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1 MTYgaGFuZGxlLCB1OCBwaHlfbnVtLCB1OCBpc19wZCkKIAkvKiBnZXQgZGV2aWNlIG5hbWUgKi8K IAlzYXNfZGV2aWNlLT5kZXZpY2VfbmFtZSA9IGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRl dmljZU5hbWUpOwogCi0JaWYgKGlvYy0+d2FpdF9mb3JfZGlzY292ZXJ5X3RvX2NvbXBsZXRlKQor CWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKQogCQlfc2NzaWhfc2Fz X2RldmljZV9pbml0X2FkZChpb2MsIHNhc19kZXZpY2UpOwogCWVsc2UKIAkJX3Njc2loX3Nhc19k ZXZpY2VfYWRkKGlvYywgc2FzX2RldmljZSk7CkBAIC01MjYwLDkgKzUxMzUsNiBAQCBfc2NzaWhf cmVtb3ZlX2RldmljZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAJaWYgKHNhc19kZXZp Y2VfYmFja3VwLnN0YXJnZXQgJiYgc2FzX2RldmljZV9iYWNrdXAuc3RhcmdldC0+aG9zdGRhdGEp IHsKIAkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlX2JhY2t1cC5zdGFyZ2V0LT5o b3N0ZGF0YTsKIAkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmRlbGV0ZWQgPSAxOwotCQlfc2NzaWhf dWJsb2NrX2lvX2RldmljZShpb2MsIHNhc19kZXZpY2VfYmFja3VwLmhhbmRsZSk7Ci0JCXNhc190 YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPQotCQkgICAgIE1QVDJTQVNfSU5WQUxJRF9ERVZJQ0Vf SEFORExFOwogCX0KIAogCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgc2FzX2RldmljZV9i YWNrdXAuaGFuZGxlKTsKQEAgLTU0MTYsNyArNTI4OCw3IEBAIF9zY3NpaF9zYXNfdG9wb2xvZ3lf Y2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKIAkJX3Njc2loX3Nhc190 b3BvbG9neV9jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKICNlbmRpZgogCi0J aWYgKGlvYy0+cmVtb3ZlX2hvc3QgfHwgaW9jLT5wY2lfZXJyb3JfcmVjb3ZlcnkpCisJaWYgKGlv Yy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5yZW1vdmVfaG9zdCB8fCBpb2MtPnBjaV9lcnJvcl9y ZWNvdmVyeSkKIAkJcmV0dXJuOwogCiAJaWYgKCFpb2MtPnNhc19oYmEubnVtX3BoeXMpCkBAIC01 NDc3LDkgKzUzNDksNiBAQCBfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChzdHJ1Y3Qg TVBUMlNBU19BREFQVEVSICppb2MsCiAJCXN3aXRjaCAocmVhc29uX2NvZGUpIHsKIAkJY2FzZSBN UEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEOgogCi0JCQlpZiAoaW9jLT5zaG9zdF9y ZWNvdmVyeSkKLQkJCQlicmVhazsKLQogCQkJaWYgKGxpbmtfcmF0ZSA9PSBwcmV2X2xpbmtfcmF0 ZSkKIAkJCQlicmVhazsKIApAQCAtNTQ5Myw5ICs1MzYyLDYgQEAgX3Njc2loX3Nhc190b3BvbG9n eV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogCQkJYnJlYWs7CiAJ CWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX0FEREVEOgogCi0JCQlpZiAoaW9jLT5z aG9zdF9yZWNvdmVyeSkKLQkJCQlicmVhazsKLQogCQkJbXB0MnNhc190cmFuc3BvcnRfdXBkYXRl X2xpbmtzKGlvYywgc2FzX2FkZHJlc3MsCiAJCQkgICAgaGFuZGxlLCBwaHlfbnVtYmVyLCBsaW5r X3JhdGUpOwogCkBAIC01NzU2LDcgKzU2MjIsNyBAQCBicm9hZGNhc3RfYWVuX3JldHJ5OgogCXRl cm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJZm9yIChzbWlkID0gMTsg c21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7Ci0JCWlmIChpb2MtPnNob3N0X3Jl Y292ZXJ5KQorCQlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3Nfc3RhdHVzKQogCQkJZ290 byBvdXQ7CiAJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlm ICghc2NtZCkKQEAgLTU3NzgsNyArNTY0NCw3IEBAIGJyb2FkY2FzdF9hZW5fcmV0cnk6CiAJCWx1 biA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW47CiAJCXF1ZXJ5X2NvdW50Kys7CiAKLQkJaWYg KGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCWlmIChpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19z dGF0dXMpCiAJCQlnb3RvIG91dDsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNj c2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKQEAgLTU4MjAsNyArNTY4Niw3IEBAIGJyb2FkY2FzdF9h ZW5fcmV0cnk6CiAJCQlnb3RvIGJyb2FkY2FzdF9hZW5fcmV0cnk7CiAJCX0KIAotCQlpZiAoaW9j LT5zaG9zdF9yZWNvdmVyeSkKKwkJaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX3N0YXR1 cykKIAkJCWdvdG8gb3V0X25vX2xvY2s7CiAKIAkJciA9IG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0o aW9jLCBoYW5kbGUsIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLApAQCAtNTg1OSw3ICs1NzI1LDcg QEAgYnJvYWRjYXN0X2Flbl9yZXRyeToKIAkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcXVlcnlf Y291bnQsIHRlcm1pbmF0aW9uX2NvdW50KSk7CiAKIAlpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSA9 IDA7Ci0JaWYgKCFpb2MtPnNob3N0X3JlY292ZXJ5KQorCWlmICghaW9jLT5pb2NfcmVzZXRfaW5f cHJvZ3Jlc3Nfc3RhdHVzKQogCQlfc2NzaWhfdWJsb2NrX2lvX2FsbF9kZXZpY2UoaW9jKTsKIAlt dXRleF91bmxvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CiB9CkBAIC01OTIzLDExICs1Nzg5LDgg QEAgX3Njc2loX3JlcHJvYmVfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqbm9f dWxkX2F0dGFjaCkKIHN0YXRpYyB2b2lkCiBfc2NzaWhfcmVwcm9iZV90YXJnZXQoc3RydWN0IHNj c2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgbm9fdWxkX2F0dGFjaCkKIHsKLQlzdHJ1Y3QgTVBUMlNB U19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAq c2FzX3RhcmdldF9wcml2X2RhdGEgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKIAotCWlmIChzdGFyZ2V0 ID09IE5VTEwpCi0JCXJldHVybjsKLQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhv c3RkYXRhOwogCWlmIChub191bGRfYXR0YWNoKQogCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+Zmxh Z3MgfD0gTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVDsKIAllbHNlCkBAIC01OTgyLDcg KzU4NDUsNyBAQCBfc2NzaWhfc2FzX3ZvbHVtZV9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAq aW9jLAogCXJhaWRfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7CiAJcmFpZF9kZXZpY2UtPnd3aWQg PSB3d2lkOwogCV9zY3NpaF9yYWlkX2RldmljZV9hZGQoaW9jLCByYWlkX2RldmljZSk7Ci0JaWYg KCFpb2MtPndhaXRfZm9yX2Rpc2NvdmVyeV90b19jb21wbGV0ZSkgeworCWlmICghaW9jLT53YWl0 X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSkgewogCQlyYyA9IHNjc2lfYWRkX2RldmljZShp b2MtPnNob3N0LCBSQUlEX0NIQU5ORUwsCiAJCSAgICByYWlkX2RldmljZS0+aWQsIDApOwogCQlp ZiAocmMpCkBAIC02MjY0LDEwICs2MTI3LDYgQEAgX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdl X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKIAkJX3Njc2loX3Nhc19pcl9jb25m aWdfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CiAKICNlbmRpZgotCi0JaWYg KGlvYy0+c2hvc3RfcmVjb3ZlcnkpCi0JCXJldHVybjsKLQogCWZvcmVpZ25fY29uZmlnID0gKGxl MzJfdG9fY3B1KGV2ZW50X2RhdGEtPkZsYWdzKSAmCiAJICAgIE1QSTJfRVZFTlRfSVJfQ0hBTkdF X0ZMQUdTX0ZPUkVJR05fQ09ORklHKSA/IDEgOiAwOwogCkBAIC02MzI2LDkgKzYxODUsNiBAQCBf c2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAJ aW50IHJjOwogCU1waTJFdmVudERhdGFJclZvbHVtZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQt PmV2ZW50X2RhdGE7CiAKLQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKLQkJcmV0dXJuOwotCiAJ aWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RB VEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwogCkBAIC02NDExLDkgKzYyNjcsNiBAQCBfc2NzaWhfc2Fz X2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogCU1w aTJFdmVudERhdGFJclBoeXNpY2FsRGlza190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50 X2RhdGE7CiAJdTY0IHNhc19hZGRyZXNzOwogCi0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCi0J CXJldHVybjsKLQogCWlmIChldmVudF9kYXRhLT5SZWFzb25Db2RlICE9IE1QSTJfRVZFTlRfSVJf UEhZU0RJU0tfUkNfU1RBVEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwogCkBAIC02NjU3LDEwICs2NTEw LDEwIEBAIF9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNB U19BREFQVEVSICppb2MpCiAJdTMyIGRldmljZV9pbmZvOwogCXUxNiBzbG90OwogCi0JcHJpbnRr KE1QVDJTQVNfSU5GT19GTVQgInNlYXJjaCBmb3IgZW5kLWRldmljZXM6IHN0YXJ0XG4iLCBpb2Mt Pm5hbWUpOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlc1xuIiwgaW9jLT5uYW1lLCBfX2Z1 bmNfXyk7CiAKIAlpZiAobGlzdF9lbXB0eSgmaW9jLT5zYXNfZGV2aWNlX2xpc3QpKQotCQlnb3Rv IG91dDsKKwkJcmV0dXJuOwogCiAJaGFuZGxlID0gMHhGRkZGOwogCXdoaWxlICghKG1wdDJzYXNf Y29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksCkBAIC02Njc5LDkgKzY1 MzIsNiBAQCBfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfc2FzX2RldmljZXMoc3RydWN0IE1QVDJT QVNfQURBUFRFUiAqaW9jKQogCQlfc2NzaWhfbWFya19yZXNwb25kaW5nX3Nhc19kZXZpY2UoaW9j LCBzYXNfYWRkcmVzcywgc2xvdCwKIAkJICAgIGhhbmRsZSk7CiAJfQotb3V0OgotCXByaW50ayhN UFQyU0FTX0lORk9fRk1UICJzZWFyY2ggZm9yIGVuZC1kZXZpY2VzOiBjb21wbGV0ZVxuIiwKLQkg ICAgaW9jLT5uYW1lKTsKIH0KIAogLyoqCkBAIC02NzU3LDE0ICs2NjA3LDEwIEBAIF9zY3NpaF9z ZWFyY2hfcmVzcG9uZGluZ19yYWlkX2RldmljZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9j KQogCXUxNiBoYW5kbGU7CiAJdTggcGh5c19kaXNrX251bTsKIAotCWlmICghaW9jLT5pcl9maXJt d2FyZSkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlYXJjaCBmb3Ig cmFpZCB2b2x1bWVzOiBzdGFydFxuIiwKLQkgICAgaW9jLT5uYW1lKTsKKwlwcmludGsoTVBUMlNB U19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pOwogCiAJaWYgKGxpc3RfZW1w dHkoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlo YW5kbGUgPSAweEZGRkY7CiAJd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1l X3BnMShpb2MsICZtcGlfcmVwbHksCkBAIC02ODAzLDkgKzY2NDksNiBAQCBfc2NzaWhfc2VhcmNo X3Jlc3BvbmRpbmdfcmFpZF9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIAkJ CXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOwogCQl9CiAJfQotb3V0OgotCXByaW50 ayhNUFQyU0FTX0lORk9fRk1UICJzZWFyY2ggZm9yIHJlc3BvbmRpbmcgcmFpZCB2b2x1bWVzOiAi Ci0JICAgICJjb21wbGV0ZVxuIiwgaW9jLT5uYW1lKTsKIH0KIAogLyoqCkBAIC02ODY1LDEwICs2 NzA4LDEwIEBAIF9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19leHBhbmRlcnMoc3RydWN0IE1QVDJT QVNfQURBUFRFUiAqaW9jKQogCXU2NCBzYXNfYWRkcmVzczsKIAl1MTYgaGFuZGxlOwogCi0JcHJp bnRrKE1QVDJTQVNfSU5GT19GTVQgInNlYXJjaCBmb3IgZXhwYW5kZXJzOiBzdGFydFxuIiwgaW9j LT5uYW1lKTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXNcbiIsIGlvYy0+bmFtZSwgX19m dW5jX18pOwogCiAJaWYgKGxpc3RfZW1wdHkoJmlvYy0+c2FzX2V4cGFuZGVyX2xpc3QpKQotCQln b3RvIG91dDsKKwkJcmV0dXJuOwogCiAJaGFuZGxlID0gMHhGRkZGOwogCXdoaWxlICghKG1wdDJz YXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmZXhwYW5kZXJfcGcw LApAQCAtNjg4Nyw4ICs2NzMwLDYgQEAgX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX2V4cGFuZGVy cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiAJCV9zY3NpaF9tYXJrX3Jlc3BvbmRpbmdf ZXhwYW5kZXIoaW9jLCBzYXNfYWRkcmVzcywgaGFuZGxlKTsKIAl9CiAKLSBvdXQ6Ci0JcHJpbnRr KE1QVDJTQVNfSU5GT19GTVQgInNlYXJjaCBmb3IgZXhwYW5kZXJzOiBjb21wbGV0ZVxuIiwgaW9j LT5uYW1lKTsKIH0KIAogLyoqCkBAIC02OTA0LDggKzY3NDUsNiBAQCBfc2NzaWhfcmVtb3ZlX3Vu cmVzcG9uZGluZ19zYXNfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiAJc3Ry dWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRf ZGV2aWNlLCAqcmFpZF9kZXZpY2VfbmV4dDsKIAotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJy ZW1vdmluZyB1bnJlc3BvbmRpbmcgZGV2aWNlczogc3RhcnRcbiIsCi0JICAgIGlvYy0+bmFtZSk7 CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2FzX2RldmljZSwgc2FzX2RldmljZV9uZXh0 LAogCSAgICAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKQEAgLTY5MjUsOSArNjc2NCw2 IEBAIF9zY3NpaF9yZW1vdmVfdW5yZXNwb25kaW5nX3Nhc19kZXZpY2VzKHN0cnVjdCBNUFQyU0FT X0FEQVBURVIgKmlvYykKIAkJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlKTsK IAl9CiAKLQlpZiAoIWlvYy0+aXJfZmlybXdhcmUpCi0JCWdvdG8gcmV0cnlfZXhwYW5kZXJfc2Vh cmNoOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCByYWlkX2Rldmlj ZV9uZXh0LAogCSAgICAmaW9jLT5yYWlkX2RldmljZV9saXN0LCBsaXN0KSB7CiAJCWlmIChyYWlk X2RldmljZS0+cmVzcG9uZGluZykgewpAQCAtNjk1NCwxNzAgKzY3OTAsNTIgQEAgX3Njc2loX3Jl bW92ZV91bnJlc3BvbmRpbmdfc2FzX2RldmljZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9j KQogCQltcHQyc2FzX2V4cGFuZGVyX3JlbW92ZShpb2MsIHNhc19leHBhbmRlci0+c2FzX2FkZHJl c3MpOwogCQlnb3RvIHJldHJ5X2V4cGFuZGVyX3NlYXJjaDsKIAl9Ci0JcHJpbnRrKE1QVDJTQVNf SU5GT19GTVQgInJlbW92aW5nIHVucmVzcG9uZGluZyBkZXZpY2VzOiBjb21wbGV0ZVxuIiwKLQkg ICAgaW9jLT5uYW1lKTsKLQkvKiB1bmJsb2NrIGRldmljZXMgKi8KLQlfc2NzaWhfdWJsb2NrX2lv X2FsbF9kZXZpY2UoaW9jKTsKLX0KLQotc3RhdGljIHZvaWQKLV9zY3NpaF9yZWZyZXNoX2V4cGFu ZGVyX2xpbmtzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLQlzdHJ1Y3QgX3Nhc19ub2Rl ICpzYXNfZXhwYW5kZXIsIHUxNiBoYW5kbGUpCi17Ci0JTXBpMkV4cGFuZGVyUGFnZTFfdCBleHBh bmRlcl9wZzE7Ci0JTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwotCWludCBpOwotCi0JZm9y IChpID0gMCA7IGkgPCBzYXNfZXhwYW5kZXItPm51bV9waHlzIDsgaSsrKSB7Ci0JCWlmICgobXB0 MnNhc19jb25maWdfZ2V0X2V4cGFuZGVyX3BnMShpb2MsICZtcGlfcmVwbHksCi0JCSAgICAmZXhw YW5kZXJfcGcxLCBpLCBoYW5kbGUpKSkgewotCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFp bHVyZSBhdCAlczolZC8lcygpIVxuIiwKLQkJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJ TkVfXywgX19mdW5jX18pOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbXB0MnNhc190cmFuc3BvcnRf dXBkYXRlX2xpbmtzKGlvYywgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcywKLQkJICAgIGxlMTZf dG9fY3B1KGV4cGFuZGVyX3BnMS5BdHRhY2hlZERldkhhbmRsZSksIGksCi0JCSAgICBleHBhbmRl cl9wZzEuTmVnb3RpYXRlZExpbmtSYXRlID4+IDQpOwotCX0KIH0KIAogLyoqCi0gKiBfc2NzaWhf c2Nhbl9mb3JfZGV2aWNlc19hZnRlcl9yZXNldCAtIHNjYW4gZm9yIGRldmljZXMgYWZ0ZXIgaG9z dCByZXNldAorICogX3Njc2loX2hpZGVfdW5oaWRlX3Nhc19kZXZpY2VzIC0gYWRkL3JlbW92ZSBk ZXZpY2UgdG8vZnJvbSBPUwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgogICogUmV0 dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2Nhbl9mb3JfZGV2aWNlc19h ZnRlcl9yZXNldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCitfc2NzaWhfaGlkZV91bmhp ZGVfc2FzX2RldmljZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQogewotCU1waTJFeHBh bmRlclBhZ2UwX3QgZXhwYW5kZXJfcGcwOwotCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZp Y2VfcGcwOwotCU1waTJSYWlkVm9sUGFnZTFfdCB2b2x1bWVfcGcxOwotCU1waTJSYWlkVm9sUGFn ZTBfdCB2b2x1bWVfcGcwOwotCU1waTJSYWlkUGh5c0Rpc2tQYWdlMF90IHBkX3BnMDsKLQlNcGky RXZlbnRJckNvbmZpZ0VsZW1lbnRfdCBlbGVtZW50OwotCU1waTJDb25maWdSZXBseV90IG1waV9y ZXBseTsKLQl1OCBwaHlzX2Rpc2tfbnVtOwotCXUxNiBpb2Nfc3RhdHVzOwotCXUxNiBoYW5kbGUs IHBhcmVudF9oYW5kbGU7Ci0JdTY0IHNhc19hZGRyZXNzOwotCXN0cnVjdCBfc2FzX2RldmljZSAq c2FzX2RldmljZTsKLQlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9kZXZpY2U7Ci0Jc3RhdGlj IHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOwotCi0JcHJpbnRrKE1QVDJTQVNfSU5G T19GTVQgInNjYW4gZGV2aWNlczogc3RhcnRcbiIsIGlvYy0+bmFtZSk7Ci0KLQlfc2NzaWhfc2Fz X2hvc3RfcmVmcmVzaChpb2MpOwotCi0JLyogZXhwYW5kZXJzICovCi0JaGFuZGxlID0gMHhGRkZG OwotCXdoaWxlICghKG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoaW9jLCAmbXBpX3Jl cGx5LCAmZXhwYW5kZXJfcGcwLAotCSAgICBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0dFVF9O RVhUX0hOREwsIGhhbmRsZSkpKSB7Ci0JCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVw bHkuSU9DU3RhdHVzKSAmCi0JCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOwotCQlpZiAoaW9jX3N0 YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQotCQkJYnJlYWs7Ci0J CWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV4cGFuZGVyX3BnMC5EZXZIYW5kbGUpOwotCQlleHBhbmRl cl9kZXZpY2UgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoCi0J CSAgICBpb2MsIGxlNjRfdG9fY3B1KGV4cGFuZGVyX3BnMC5TQVNBZGRyZXNzKSk7Ci0JCWlmIChl eHBhbmRlcl9kZXZpY2UpCi0JCQlfc2NzaWhfcmVmcmVzaF9leHBhbmRlcl9saW5rcyhpb2MsIGV4 cGFuZGVyX2RldmljZSwKLQkJCSAgICBoYW5kbGUpOwotCQllbHNlCi0JCQlfc2NzaWhfZXhwYW5k ZXJfYWRkKGlvYywgaGFuZGxlKTsKLQl9Ci0KLQlpZiAoIWlvYy0+aXJfZmlybXdhcmUpCi0JCWdv dG8gc2tpcF90b19zYXM7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqc2FzX2Rl dmljZV9uZXh0OwogCi0JLyogcGh5cyBkaXNrICovCi0JcGh5c19kaXNrX251bSA9IDB4RkY7Ci0J d2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3BoeXNfZGlza19wZzAoaW9jLCAmbXBpX3JlcGx5 LAotCSAgICAmcGRfcGcwLCBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9HRVRfTkVYVF9QSFlTRElT S05VTSwKLQkgICAgcGh5c19kaXNrX251bSkpKSB7Ci0JCWlvY19zdGF0dXMgPSBsZTE2X3RvX2Nw dShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCi0JCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOwotCQlp ZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQotCQkJ YnJlYWs7Ci0JCXBoeXNfZGlza19udW0gPSBwZF9wZzAuUGh5c0Rpc2tOdW07Ci0JCWhhbmRsZSA9 IGxlMTZfdG9fY3B1KHBkX3BnMC5EZXZIYW5kbGUpOwotCQlzYXNfZGV2aWNlID0gX3Njc2loX3Nh c19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOwotCQlpZiAoc2FzX2RldmljZSkK LQkJCWNvbnRpbnVlOwotCQlpZiAobXB0MnNhc19jb25maWdfZ2V0X3Nhc19kZXZpY2VfcGcwKGlv YywgJm1waV9yZXBseSwKLQkJICAgICZzYXNfZGV2aWNlX3BnMCwgTVBJMl9TQVNfREVWSUNFX1BH QURfRk9STV9IQU5ETEUsCi0JCSAgICBoYW5kbGUpICE9IDApCi0JCQljb250aW51ZTsKLQkJcGFy ZW50X2hhbmRsZSA9IGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlBhcmVudERldkhhbmRsZSk7 Ci0JCWlmICghX3Njc2loX2dldF9zYXNfYWRkcmVzcyhpb2MsIHBhcmVudF9oYW5kbGUsCi0JCSAg ICAmc2FzX2FkZHJlc3MpKSB7Ci0JCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoaW9j LCBzYXNfYWRkcmVzcywKLQkJCSAgICBoYW5kbGUsIHNhc19kZXZpY2VfcGcwLlBoeU51bSwKLQkJ CSAgICBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSk7Ci0JCQlzZXRfYml0KGhhbmRsZSwgaW9j LT5wZF9oYW5kbGVzKTsKLQkJCV9zY3NpaF9hZGRfZGV2aWNlKGlvYywgaGFuZGxlLCAwLCAxKTsK LQkJfQotCX0KKwlpZiAoIWlvYy0+aXNfd2FycGRyaXZlIHx8IGlvYy0+bWZnX3BnMTBfaGlkZV9m bGFnICE9CisJICAgIE1GR19QQUdFMTBfSElERV9JRl9WT0xfUFJFU0VOVCkKKwkJcmV0dXJuOwog Ci0JLyogdm9sdW1lcyAqLwotCWhhbmRsZSA9IDB4RkZGRjsKLQl3aGlsZSAoIShtcHQyc2FzX2Nv bmZpZ19nZXRfcmFpZF92b2x1bWVfcGcxKGlvYywgJm1waV9yZXBseSwKLQkgICAgJnZvbHVtZV9w ZzEsIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSwgaGFuZGxlKSkp IHsKLQkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKLQkJ ICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7Ci0JCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RB VFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCi0JCQlicmVhazsKLQkJaGFuZGxlID0gbGUxNl90b19j cHUodm9sdW1lX3BnMS5EZXZIYW5kbGUpOwotCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2Rl dmljZV9maW5kX2J5X3d3aWQoaW9jLAotCQkgICAgbGU2NF90b19jcHUodm9sdW1lX3BnMS5XV0lE KSk7Ci0JCWlmIChyYWlkX2RldmljZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobXB0MnNhc19jb25m aWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChpb2MsICZtcGlfcmVwbHksCi0JCSAgICAmdm9sdW1lX3Bn MCwgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFLCBoYW5kbGUsCi0JCSAgICAgc2l6 ZW9mKE1waTJSYWlkVm9sUGFnZTBfdCkpKQotCQkJY29udGludWU7Ci0JCWlmICh2b2x1bWVfcGcw LlZvbHVtZVN0YXRlID09IE1QSTJfUkFJRF9WT0xfU1RBVEVfT1BUSU1BTCB8fAotCQkgICAgdm9s dW1lX3BnMC5Wb2x1bWVTdGF0ZSA9PSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORSB8fAotCQkg ICAgdm9sdW1lX3BnMC5Wb2x1bWVTdGF0ZSA9PSBNUEkyX1JBSURfVk9MX1NUQVRFX0RFR1JBREVE KSB7Ci0JCQltZW1zZXQoJmVsZW1lbnQsIDAsIHNpemVvZihNcGkyRXZlbnRJckNvbmZpZ0VsZW1l bnRfdCkpOwotCQkJZWxlbWVudC5SZWFzb25Db2RlID0gTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNf QURERUQ7Ci0JCQllbGVtZW50LlZvbERldkhhbmRsZSA9IHZvbHVtZV9wZzEuRGV2SGFuZGxlOwot CQkJX3Njc2loX3Nhc192b2x1bWVfYWRkKGlvYywgJmVsZW1lbnQpOworCWlmIChpb2MtPmhpZGVf ZHJpdmVzKSB7CisJCWlmIChfc2NzaWhfZ2V0X251bV92b2x1bWVzKGlvYykpCisJCQlyZXR1cm47 CisJCWlvYy0+aGlkZV9kcml2ZXMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2Fz X2RldmljZSwgc2FzX2RldmljZV9uZXh0LAorCQkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0LCBs aXN0KSB7CisJCQlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgc2FzX2Rldmlj ZS0+aGFuZGxlLAorCQkJCXNhc19kZXZpY2UtPnNhc19hZGRyZXNzX3BhcmVudCkpIHsKKwkJCQlf c2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwkJCX0gZWxzZSBpZiAo IXNhc19kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92 ZShpb2MsCisJCQkJICAgIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkJCSAgICBzYXNfZGV2 aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpOworCQkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShp b2MsIHNhc19kZXZpY2UpOworCQkJfQogCQl9Ci0JfQotCi0gc2tpcF90b19zYXM6Ci0KLQkvKiBz YXMgZGV2aWNlcyAqLwotCWhhbmRsZSA9IDB4RkZGRjsKLQl3aGlsZSAoIShtcHQyc2FzX2NvbmZp Z19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LAotCSAgICAmc2FzX2RldmljZV9w ZzAsIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFLAotCSAgICBoYW5k bGUpKSkgewotCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykg JgotCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKLQkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9J T0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKLQkJCWJyZWFrOwotCQloYW5kbGUgPSBsZTE2 X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5EZXZIYW5kbGUpOwotCQlpZiAoIShfc2NzaWhfaXNfZW5k X2RldmljZSgKLQkJICAgIGxlMzJfdG9fY3B1KHNhc19kZXZpY2VfcGcwLkRldmljZUluZm8pKSkp Ci0JCQljb250aW51ZTsKLQkJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9m aW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKLQkJICAgIGxlNjRfdG9fY3B1KHNhc19kZXZpY2VfcGcw LlNBU0FkZHJlc3MpKTsKLQkJaWYgKHNhc19kZXZpY2UpCi0JCQljb250aW51ZTsKLQkJcGFyZW50 X2hhbmRsZSA9IGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlBhcmVudERldkhhbmRsZSk7Ci0J CWlmICghX3Njc2loX2dldF9zYXNfYWRkcmVzcyhpb2MsIHBhcmVudF9oYW5kbGUsICZzYXNfYWRk cmVzcykpIHsKLQkJCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcyhpb2MsIHNhc19hZGRy ZXNzLCBoYW5kbGUsCi0JCQkgICAgc2FzX2RldmljZV9wZzAuUGh5TnVtLCBNUEkyX1NBU19ORUdf TElOS19SQVRFXzFfNSk7Ci0JCQlfc2NzaWhfYWRkX2RldmljZShpb2MsIGhhbmRsZSwgMCwgMCk7 CisJfSBlbHNlIHsKKwkJaWYgKCFfc2NzaWhfZ2V0X251bV92b2x1bWVzKGlvYykpCisJCQlyZXR1 cm47CisJCWlvYy0+aGlkZV9kcml2ZXMgPSAxOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo c2FzX2RldmljZSwgc2FzX2RldmljZV9uZXh0LAorCQkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0 LCBsaXN0KSB7CisJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsCisJCQkgICAg c2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3Nf cGFyZW50KTsKIAkJfQogCX0KLQotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzY2FuIGRldmlj ZXM6IGNvbXBsZXRlXG4iLCBpb2MtPm5hbWUpOwogfQogCi0KIC8qKgogICogbXB0MnNhc19zY3Np aF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY2FsbGJhY2sgaGFuZGxlciAoZm9yIHNjc2loKQogICog QGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CkBAIC03MTUzLDYgKzY4NzEsNyBAQCBtcHQyc2FzX3Nj c2loX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRf cGhhc2UpCiAJCX0KIAkJX3Njc2loX2Z3X2V2ZW50X2NsZWFudXBfcXVldWUoaW9jKTsKIAkJX3Nj c2loX2ZsdXNoX3J1bm5pbmdfY21kcyhpb2MpOworCQlfc2NzaWhfcXVldWVfcmVzY2FuKGlvYyk7 CiAJCWJyZWFrOwogCWNhc2UgTVBUMl9JT0NfRE9ORV9SRVNFVDoKIAkJZHRtcHJpbnRrKGlvYywg cHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCkBAIC03MTYyLDEzICs2ODgxLDYgQEAgbXB0 MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50 IHJlc2V0X3BoYXNlKQogCQlfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfc2FzX2RldmljZXMoaW9j KTsKIAkJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhpb2MpOwogCQlfc2Nz aWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzKGlvYyk7Ci0JCWlmICghaW9jLT5pc19kcml2 ZXJfbG9hZGluZykgewotCQkJX3Njc2loX3ByZXBfZGV2aWNlX3NjYW4oaW9jKTsKLQkJCV9zY3Np aF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyhpb2MpOwotCQkJX3Njc2loX3NlYXJjaF9y ZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhpb2MpOwotCQkJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5n X2V4cGFuZGVycyhpb2MpOwotCQkJX3Njc2loX2Vycm9yX3JlY292ZXJ5X2RlbGV0ZV9kZXZpY2Vz KGlvYyk7Ci0JCX0KIAkJYnJlYWs7CiAJfQogfQpAQCAtNzE4Niw2ICs2ODk4LDcgQEAgX2Zpcm13 YXJlX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19l dmVudF93b3JrICpmd19ldmVudCA9IGNvbnRhaW5lcl9vZih3b3JrLAogCSAgICBzdHJ1Y3QgZndf ZXZlbnRfd29yaywgZGVsYXllZF93b3JrLndvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJ c3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gZndfZXZlbnQtPmlvYzsKIAogCS8qIHRoZSBx dWV1ZSBpcyBiZWluZyBmbHVzaGVkIHNvIGlnbm9yZSB0aGlzIGV2ZW50ICovCkBAIC03MTk1LDIx ICs2OTA4LDIzIEBAIF9maXJtd2FyZV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7Ci0JY2FzZSBN UFQyU0FTX1JFTU9WRV9VTlJFU1BPTkRJTkdfREVWSUNFUzoKLQkJd2hpbGUgKHNjc2lfaG9zdF9p bl9yZWNvdmVyeShpb2MtPnNob3N0KSkKLQkJCXNzbGVlcCgxKTsKKwlpZiAoZndfZXZlbnQtPmV2 ZW50ID09IE1QVDJTQVNfUkVTQ0FOX0FGVEVSX0hPU1RfUkVTRVQpIHsKKwkJX3Njc2loX2Z3X2V2 ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19y ZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5 KSB7CisJCQlpbml0X2NvbXBsZXRpb24oJmlvYy0+c2hvc3RfcmVjb3ZlcnlfZG9uZSk7CisJCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLAor CQkJICAgIGZsYWdzKTsKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlvYy0+c2hvc3RfcmVjb3Zl cnlfZG9uZSk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2Nf cmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywKKwkJCSAgICBmbGFncyk7CiAJCV9zY3NpaF9yZW1vdmVf dW5yZXNwb25kaW5nX3Nhc19kZXZpY2VzKGlvYyk7Ci0JCV9zY3NpaF9zY2FuX2Zvcl9kZXZpY2Vz X2FmdGVyX3Jlc2V0KGlvYyk7Ci0JCWJyZWFrOwotCWNhc2UgTVBUMlNBU19QT1JUX0VOQUJMRV9D T01QTEVURToKLQkJaW9jLT5zdGFydF9zY2FuID0gMDsKLQotCisJCV9zY3NpaF9oaWRlX3VuaGlk ZV9zYXNfZGV2aWNlcyhpb2MpOworCQlyZXR1cm47CisJfQogCi0JCWRld3RwcmludGsoaW9jLCBw cmludGsoTVBUMlNBU19JTkZPX0ZNVCAicG9ydCBlbmFibGU6IGNvbXBsZXRlICIKLQkJICAgICJm cm9tIHdvcmtlciB0aHJlYWRcbiIsIGlvYy0+bmFtZSkpOwotCQlicmVhazsKKwlzd2l0Y2ggKGZ3 X2V2ZW50LT5ldmVudCkgewogCWNhc2UgTVBUMlNBU19UVVJOX09OX0ZBVUxUX0xFRDoKIAkJX3Nj c2loX3R1cm5fb25fZmF1bHRfbGVkKGlvYywgZndfZXZlbnQtPmRldmljZV9oYW5kbGUpOwogCQli cmVhazsKQEAgLTc0MDYsOCArNzEyMSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBs YXRlIHNjc2loX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkuc2xhdmVfY29uZmlndXJlCQk9IF9zY3Np aF9zbGF2ZV9jb25maWd1cmUsCiAJLnRhcmdldF9kZXN0cm95CQkJPSBfc2NzaWhfdGFyZ2V0X2Rl c3Ryb3ksCiAJLnNsYXZlX2Rlc3Ryb3kJCQk9IF9zY3NpaF9zbGF2ZV9kZXN0cm95LAotCS5zY2Fu X2ZpbmlzaGVkCQkJPSBfc2NzaWhfc2Nhbl9maW5pc2hlZCwKLQkuc2Nhbl9zdGFydAkJCT0gX3Nj c2loX3NjYW5fc3RhcnQsCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gX3Njc2loX2NoYW5nZV9x dWV1ZV9kZXB0aCwKIAkuY2hhbmdlX3F1ZXVlX3R5cGUJCT0gX3Njc2loX2NoYW5nZV9xdWV1ZV90 eXBlLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IF9zY3NpaF9hYm9ydCwKQEAgLTc2NjgsMTIgKzcz ODEsNyBAQCBfc2NzaWhfcHJvYmVfYm9vdF9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIg KmlvYykKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAotCSAvKiBubyBCaW9zLCBy ZXR1cm4gaW1tZWRpYXRlbHkgKi8KLQlpZiAoIWlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24pCi0J CXJldHVybjsKLQogCWRldmljZSA9IE5VTEw7Ci0JaXNfcmFpZCA9IDA7CiAJaWYgKGlvYy0+cmVx X2Jvb3RfZGV2aWNlLmRldmljZSkgewogCQlkZXZpY2UgPSAgaW9jLT5yZXFfYm9vdF9kZXZpY2Uu ZGV2aWNlOwogCQlpc19yYWlkID0gaW9jLT5yZXFfYm9vdF9kZXZpY2UuaXNfcmFpZDsKQEAgLTc3 MDksOSArNzQxNyw4IEBAIF9zY3NpaF9wcm9iZV9ib290X2RldmljZXMoc3RydWN0IE1QVDJTQVNf QURBUFRFUiAqaW9jKQogCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KSkgewog CQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CiAJCX0gZWxzZSBp ZiAoIXNhc19kZXZpY2UtPnN0YXJnZXQpIHsKLQkJCWlmICghaW9jLT5pc19kcml2ZXJfbG9hZGlu ZykKLQkJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19hZGRyZXNzLAot CQkJCQlzYXNfYWRkcmVzc19wYXJlbnQpOworCQkJbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1v dmUoaW9jLCBzYXNfYWRkcmVzcywKKwkJCSAgICBzYXNfYWRkcmVzc19wYXJlbnQpOwogCQkJX3Nj c2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CiAJCX0KIAl9CkBAIC03NzU1 LDI4ICs3NDYyLDIyIEBAIF9zY3NpaF9wcm9iZV9zYXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAq aW9jKQogCS8qIFNBUyBEZXZpY2UgTGlzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShz YXNfZGV2aWNlLCBuZXh0LCAmaW9jLT5zYXNfZGV2aWNlX2luaXRfbGlzdCwKIAkgICAgbGlzdCkg eworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJ bGlzdF9tb3ZlX3RhaWwoJnNhc19kZXZpY2UtPmxpc3QsICZpb2MtPnNhc19kZXZpY2VfbGlzdCk7 CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7 CiAKIAkJaWYgKGlvYy0+aGlkZV9kcml2ZXMpCiAJCQljb250aW51ZTsKIAogCQlpZiAoIW1wdDJz YXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgc2FzX2RldmljZS0+aGFuZGxlLAogCQkgICAgc2Fz X2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KSkgewotCQkJbGlzdF9kZWwoJnNhc19kZXZpY2Ut Pmxpc3QpOwotCQkJa2ZyZWUoc2FzX2RldmljZSk7Ci0JCQljb250aW51ZTsKKwkJCV9zY3NpaF9z YXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOwogCQl9IGVsc2UgaWYgKCFzYXNfZGV2 aWNlLT5zdGFyZ2V0KSB7Ci0JCQlpZiAoIWlvYy0+aXNfZHJpdmVyX2xvYWRpbmcpCi0JCQkJbXB0 MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLAotCQkJCQlzYXNfZGV2aWNlLT5zYXNfYWRk cmVzcywKLQkJCQkJc2FzX2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KTsKLQkJCWxpc3RfZGVs KCZzYXNfZGV2aWNlLT5saXN0KTsKLQkJCWtmcmVlKHNhc19kZXZpY2UpOwotCQkJY29udGludWU7 Ci0KKwkJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywKKwkJCSAgICBzYXNfZGV2 aWNlLT5zYXNfYWRkcmVzcywKKwkJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQp OworCQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CiAJCX0KLQkJ c3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCWxpc3Rf bW92ZV90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOwotCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCX0K IH0KIApAQCAtNzc4OSw3ICs3NDkwLDkgQEAgX3Njc2loX3Byb2JlX3NhcyhzdHJ1Y3QgTVBUMlNB U19BREFQVEVSICppb2MpCiBzdGF0aWMgdm9pZAogX3Njc2loX3Byb2JlX2RldmljZXMoc3RydWN0 IE1QVDJTQVNfQURBUFRFUiAqaW9jKQogewotCXUxNiB2b2x1bWVfbWFwcGluZ19mbGFnczsKKwl1 MTYgdm9sdW1lX21hcHBpbmdfZmxhZ3MgPQorCSAgICBsZTE2X3RvX2NwdShpb2MtPmlvY19wZzgu SVJWb2x1bWVNYXBwaW5nRmxhZ3MpICYKKwkgICAgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX01BU0tf Vk9MVU1FX01BUFBJTkdfTU9ERTsKIAogCWlmICghKGlvYy0+ZmFjdHMuUHJvdG9jb2xGbGFncyAm IE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU0NTSV9JTklUSUFUT1IpKQogCQlyZXR1cm47ICAvKiBy ZXR1cm4gd2hlbiBJT0MgZG9lc24ndCBzdXBwb3J0IGluaXRpYXRvciBtb2RlICovCkBAIC03Nzk3 LDkzICs3NTAwLDE4IEBAIF9zY3NpaF9wcm9iZV9kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBU RVIgKmlvYykKIAlfc2NzaWhfcHJvYmVfYm9vdF9kZXZpY2VzKGlvYyk7CiAKIAlpZiAoaW9jLT5p cl9maXJtd2FyZSkgewotCQl2b2x1bWVfbWFwcGluZ19mbGFncyA9Ci0JCSAgICBsZTE2X3RvX2Nw dShpb2MtPmlvY19wZzguSVJWb2x1bWVNYXBwaW5nRmxhZ3MpICYKLQkJICAgIE1QSTJfSU9DUEFH RThfSVJGTEFHU19NQVNLX1ZPTFVNRV9NQVBQSU5HX01PREU7Ci0JCWlmICh2b2x1bWVfbWFwcGlu Z19mbGFncyA9PQotCQkgICAgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX0xPV19WT0xVTUVfTUFQUElO RykgewotCQkJX3Njc2loX3Byb2JlX3JhaWQoaW9jKTsKKwkJaWYgKCh2b2x1bWVfbWFwcGluZ19m bGFncyAmCisJCSAgICAgTVBJMl9JT0NQQUdFOF9JUkZMQUdTX0hJR0hfVk9MVU1FX01BUFBJTkcp KSB7CiAJCQlfc2NzaWhfcHJvYmVfc2FzKGlvYyk7CisJCQlfc2NzaWhfcHJvYmVfcmFpZChpb2Mp OwogCQl9IGVsc2UgewotCQkJX3Njc2loX3Byb2JlX3Nhcyhpb2MpOwogCQkJX3Njc2loX3Byb2Jl X3JhaWQoaW9jKTsKKwkJCV9zY3NpaF9wcm9iZV9zYXMoaW9jKTsKIAkJfQogCX0gZWxzZQogCQlf c2NzaWhfcHJvYmVfc2FzKGlvYyk7CiB9CiAKLQotLyoqCi0gKiBfc2NzaWhfc2Nhbl9zdGFydCAt IHNjc2kgbGxkIGNhbGxiYWNrIGZvciAuc2Nhbl9zdGFydAotICogQHNob3N0OiBTQ1NJIGhvc3Qg cG9pbnRlcgotICoKLSAqIFRoZSBzaG9zdCBoYXMgdGhlIGFiaWxpdHkgdG8gZGlzY292ZXIgdGFy Z2V0cyBvbiBpdHMgb3duIGluc3RlYWQKLSAqIG9mIHNjYW5uaW5nIHRoZSBlbnRpcmUgYnVzLiAg SW4gb3VyIGltcGxlbWVudGlvbiwgd2Ugd2lsbCBraWNrIG9mZgotICogZmlybXdhcmUgZGlzY292 ZXJ5LgotICovCi1zdGF0aWMgdm9pZAotX3Njc2loX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9z dCAqc2hvc3QpCi17Ci0Jc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihz aG9zdCk7Ci0JaW50IHJjOwotCi0JaWYgKGRpYWdfYnVmZmVyX2VuYWJsZSAhPSAtMSAmJiBkaWFn X2J1ZmZlcl9lbmFibGUgIT0gMCkKLQkJbXB0MnNhc19lbmFibGVfZGlhZ19idWZmZXIoaW9jLCBk aWFnX2J1ZmZlcl9lbmFibGUpOwotCi0JaW9jLT5zdGFydF9zY2FuID0gMTsKLQlyYyA9IG1wdDJz YXNfcG9ydF9lbmFibGUoaW9jKTsKLQotCWlmIChyYyAhPSAwKQotCQlwcmludGsoTVBUMlNBU19J TkZPX0ZNVCAicG9ydCBlbmFibGU6IEZBSUxFRFxuIiwgaW9jLT5uYW1lKTsKLX0KLQotLyoqCi0g KiBfc2NzaWhfc2Nhbl9maW5pc2hlZCAtIHNjc2kgbGxkIGNhbGxiYWNrIGZvciAuc2Nhbl9maW5p c2hlZAotICogQHNob3N0OiBTQ1NJIGhvc3QgcG9pbnRlcgotICogQHRpbWU6IGVsYXBzZWQgdGlt ZSBvZiB0aGUgc2NhbiBpbiBqaWZmaWVzCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNh bGxlZCBwZXJpb2RpY2FsbHkgdW50aWwgaXQgcmV0dXJucyAxIHdpdGggdGhlCi0gKiBzY3NpX2hv c3QgYW5kIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIHNjYW4gaW4gamlmZmllcy4gSW4gb3VyIGlt cGxlbWVudGlvbiwKLSAqIHdlIHdhaXQgZm9yIGZpcm13YXJlIGRpc2NvdmVyeSB0byBjb21wbGV0 ZSwgdGhlbiByZXR1cm4gMS4KLSAqLwotc3RhdGljIGludAotX3Njc2loX3NjYW5fZmluaXNoZWQo c3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGxvbmcgdGltZSkKLXsKLQlzdHJ1Y3Qg TVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKLQotCWlmICh0aW1lID49 ICgzMDAgKiBIWikpIHsKLQkJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VT RUQ7Ci0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwb3J0IGVuYWJsZTogRkFJTEVEIHdpdGgg dGltZW91dCAiCi0JCSAgICAiKHRpbWVvdXQ9MzAwcylcbiIsIGlvYy0+bmFtZSk7Ci0JCWlvYy0+ aXNfZHJpdmVyX2xvYWRpbmcgPSAwOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoaW9jLT5zdGFy dF9zY2FuKQotCQlyZXR1cm4gMDsKLQotCWlmIChpb2MtPnN0YXJ0X3NjYW5fZmFpbGVkKSB7Ci0J CXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwb3J0IGVuYWJsZTogRkFJTEVEIHdpdGggIgotCQkg ICAgIihpb2Nfc3RhdHVzPTB4JTA4eClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zdGFydF9zY2FuX2Zh aWxlZCk7Ci0JCWlvYy0+aXNfZHJpdmVyX2xvYWRpbmcgPSAwOwotCQlpb2MtPndhaXRfZm9yX2Rp c2NvdmVyeV90b19jb21wbGV0ZSA9IDA7Ci0JCWlvYy0+cmVtb3ZlX2hvc3QgPSAxOwotCQlyZXR1 cm4gMTsKLQl9Ci0KLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicG9ydCBlbmFibGU6IFNVQ0NF U1NcbiIsIGlvYy0+bmFtZSk7Ci0JaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9U X1VTRUQ7Ci0KLQlpZiAoaW9jLT53YWl0X2Zvcl9kaXNjb3ZlcnlfdG9fY29tcGxldGUpIHsKLQkJ aW9jLT53YWl0X2Zvcl9kaXNjb3ZlcnlfdG9fY29tcGxldGUgPSAwOwotCQlfc2NzaWhfcHJvYmVf ZGV2aWNlcyhpb2MpOwotCX0KLQltcHQyc2FzX2Jhc2Vfc3RhcnRfd2F0Y2hkb2coaW9jKTsKLQlp b2MtPmlzX2RyaXZlcl9sb2FkaW5nID0gMDsKLQlyZXR1cm4gMTsKLX0KLQotCiAvKioKICAqIF9z Y3NpaF9wcm9iZSAtIGF0dGFjaCBhbmQgYWRkIHNjc2kgaG9zdAogICogQHBkZXY6IFBDSSBkZXZp Y2Ugc3RydWN0CkBAIC03OTIwLDcgKzc1NDgsNiBAQCBfc2NzaWhfcHJvYmUoc3RydWN0IHBjaV9k ZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIAlpb2MtPnRtX2NiX2lk eCA9IHRtX2NiX2lkeDsKIAlpb2MtPmN0bF9jYl9pZHggPSBjdGxfY2JfaWR4OwogCWlvYy0+YmFz ZV9jYl9pZHggPSBiYXNlX2NiX2lkeDsKLQlpb2MtPnBvcnRfZW5hYmxlX2NiX2lkeCA9IHBvcnRf ZW5hYmxlX2NiX2lkeDsKIAlpb2MtPnRyYW5zcG9ydF9jYl9pZHggPSB0cmFuc3BvcnRfY2JfaWR4 OwogCWlvYy0+c2NzaWhfY2JfaWR4ID0gc2NzaWhfY2JfaWR4OwogCWlvYy0+Y29uZmlnX2NiX2lk eCA9IGNvbmZpZ19jYl9pZHg7CkBAIC03OTkzLDE0ICs3NjIwLDE0IEBAIF9zY3NpaF9wcm9iZShz dHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCQln b3RvIG91dF90aHJlYWRfZmFpbDsKIAl9CiAKLQlpb2MtPmlzX2RyaXZlcl9sb2FkaW5nID0gMTsK Kwlpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlID0gMTsKIAlpZiAoKG1wdDJz YXNfYmFzZV9hdHRhY2goaW9jKSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVy ZSBhdCAlczolZC8lcygpIVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9f LCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2F0dGFjaF9mYWlsOwogCX0KIAotCXNjc2lfc2Nhbl9o b3N0KHNob3N0KTsKKwlpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlID0gMDsK IAlpZiAoaW9jLT5pc193YXJwZHJpdmUpIHsKIAkJaWYgKGlvYy0+bWZnX3BnMTBfaGlkZV9mbGFn ID09ICBNRkdfUEFHRTEwX0VYUE9TRV9BTExfRElTS1MpCiAJCQlpb2MtPmhpZGVfZHJpdmVzID0g MDsKQEAgLTgwMjMsNyArNzY1MCw2IEBAIF9zY3NpaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRl diwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogIG91dF90aHJlYWRfZmFpbDoKIAls aXN0X2RlbCgmaW9jLT5saXN0KTsKIAlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKLQlzY3NpX2hv c3RfcHV0KHNob3N0KTsKICBvdXRfYWRkX3Nob3N0X2ZhaWw6CiAJcmV0dXJuIC1FTk9ERVY7CiB9 CkBAIC04MjcwLDggKzc4OTYsNiBAQCBfc2NzaWhfaW5pdCh2b2lkKQogCiAJLyogYmFzZSBpbnRl cm5hbCBjb21tYW5kcyBjYWxsYmFjayBoYW5kbGVyICovCiAJYmFzZV9jYl9pZHggPSBtcHQyc2Fz X2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcihtcHQyc2FzX2Jhc2VfZG9uZSk7Ci0JcG9y dF9lbmFibGVfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIo Ci0JCW1wdDJzYXNfcG9ydF9lbmFibGVfZG9uZSk7CiAKIAkvKiB0cmFuc3BvcnQgaW50ZXJuYWwg Y29tbWFuZHMgY2FsbGJhY2sgaGFuZGxlciAqLwogCXRyYW5zcG9ydF9jYl9pZHggPSBtcHQyc2Fz X2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKQEAgLTgzMjYsNyArNzk1MCw2IEBAIF9z Y3NpaF9leGl0KHZvaWQpCiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihz Y3NpX2lvX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0 bV9jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoYmFzZV9j Yl9pZHgpOwotCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIocG9ydF9lbmFi bGVfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRyYW5z cG9ydF9jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoc2Nz aWhfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGNvbmZp Z19jYl9pZHgpOwo= --20cf303f6d4cef0eec04b3757217--