From mboxrd@z Thu Jan 1 00:00:00 1970 From: adam radford Subject: [PATCH 1/1] 3ware driver update for linux-2.6.12-rc1-bk2 Date: Wed, 23 Mar 2005 14:26:38 -0800 Message-ID: Reply-To: adam radford Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1304_5427962.1111616798708" Received: from wproxy.gmail.com ([64.233.184.202]:286 "EHLO wproxy.gmail.com") by vger.kernel.org with ESMTP id S261467AbVCWW0l (ORCPT ); Wed, 23 Mar 2005 17:26:41 -0500 Received: by wproxy.gmail.com with SMTP id 68so314655wra for ; Wed, 23 Mar 2005 14:26:38 -0800 (PST) Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: James Bottomley , SCSI Mailing List ------=_Part_1304_5427962.1111616798708 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Re-sending this as an attachment due to copy/paste mangling between firefox and gmail. (If anybody knows how to work around this, let me know) The attached patch updates the driver for the 3ware 5/6/7/8000 series to do the following: - Increase max ioctl buffer size to 512 sectors. - Make tw_scsi_queue() return 0 for 'Unknown scsi opcode'. - Fix tw_remove() to free irq handler/unregister_chrdev() before shutting down the card. - Change to new 'change_queue_depth' api (from James). - Fix 'handled=1' ISR usage, remove bogus IRQ check (from Jeff). A smiliar patch for the 9000 series driver will follow shortly, including a PAE fix, and a few other things (that is why I want it to be a separate patch). Signed-off-by: Adam Radford James, Please apply ------=_Part_1304_5427962.1111616798708 Content-Type: application/octet-stream; name="3ware_linux_2.6.12-rc1-bk2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="3ware_linux_2.6.12-rc1-bk2.patch" ZGlmZiAtTmF1ciBsaW51eC0yLjYuMTItcmMxLWJrMS9kcml2ZXJzL3Njc2kvM3cteHh4eC5jIGxp bnV4LTIuNi4xMi1yYzEtYmsyL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKLS0tIGxpbnV4LTIuNi4x Mi1yYzEtYmsxL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMJMjAwNS0wMy0xOCAyMjozNTowMy4wMDAw MDAwMDAgLTA4MDAKKysrIGxpbnV4LTIuNi4xMi1yYzEtYmsyL2RyaXZlcnMvc2NzaS8zdy14eHh4 LmMJMjAwNS0wMy0yMSAxOToxOTozNi4wMDAwMDAwMDAgLTA4MDAKQEAgLTYsNyArNiw3IEBACiAg ICAJCSAgICAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+ CiAgICAgICAgICAgICAgICAgICAgICBCcmFkIFN0cmFuZCA8bGludXhAM3dhcmUuY29tPgogCi0g ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNCAzd2FyZSBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5 OTktMjAwNSAzd2FyZSBJbmMuCiAKICAgIEtlcm5lbCBjb21wYXRpYmxpdHkgQnk6IAlBbmRyZSBI ZWRyaWNrIDxhbmRyZUBzdXNlLmNvbT4KICAgIE5vbi1Db3B5cmlnaHQgKEMpIDIwMDAJQW5kcmUg SGVkcmljayA8YW5kcmVAc3VzZS5jb20+CkBAIC0xODUsNiArMTg1LDEyIEBACiAgICAgICAgICAg ICAgICAgIEZpeCBkYXRhX2J1ZmZlcl9sZW5ndGggdXNhZ2UgaW4gdHdfY2hyZGV2X2lvY3RsKCku CiAgICAgICAgICAgICAgICAgIFVwZGF0ZSBjb250YWN0IGluZm9ybWF0aW9uLgogICAgMS4yNi4w Mi4wMDAgLSBDb252ZXJ0IGRyaXZlciB0byBwY2lfZHJpdmVyIGZvcm1hdC4KKyAgIDEuMjYuMDIu MDAxIC0gSW5jcmVhc2UgbWF4IGlvY3RsIGJ1ZmZlciBzaXplIHRvIDUxMiBzZWN0b3JzLgorICAg ICAgICAgICAgICAgICBNYWtlIHR3X3Njc2lfcXVldWUoKSByZXR1cm4gMCBmb3IgJ1Vua25vd24g c2NzaSBvcGNvZGUnLgorICAgICAgICAgICAgICAgICBGaXggdHdfcmVtb3ZlKCkgdG8gZnJlZSBp cnEgaGFuZGxlci91bnJlZ2lzdGVyX2NocmRldigpCisgICAgICAgICAgICAgICAgIGJlZm9yZSBz aHV0dGluZyBkb3duIGNhcmQuCisgICAgICAgICAgICAgICAgIENoYW5nZSB0byBuZXcgJ2NoYW5n ZV9xdWV1ZV9kZXB0aCcgYXBpLgorICAgICAgICAgICAgICAgICBGaXggJ2hhbmRsZWQ9MScgSVNS IHVzYWdlLCByZW1vdmUgYm9ndXMgSVJRIGNoZWNrLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgpAQCAtMjA3LDcgKzIxMyw3IEBACiAjaW5jbHVkZSAiM3cteHh4eC5oIgogCiAvKiBH bG9iYWxzICovCi0jZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIxLjI2LjAyLjAwMCIKKyNkZWZp bmUgVFdfRFJJVkVSX1ZFUlNJT04gIjEuMjYuMDIuMDAxIgogc3RhdGljIFRXX0RldmljZV9FeHRl bnNpb24gKnR3X2RldmljZV9leHRlbnNpb25fbGlzdFtUV19NQVhfU0xPVF07CiBzdGF0aWMgaW50 IHR3X2RldmljZV9leHRlbnNpb25fY291bnQgPSAwOwogc3RhdGljIGludCB0d2VfbWFqb3IgPSAt MTsKQEAgLTUwOSwzMyArNTE1LDEzIEBACiB9IC8qIEVuZCB0d19zaG93X3N0YXRzKCkgKi8KIAog LyogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBhIGRldmljZXMgcXVldWUgZGVwdGggKi8KLXN0YXRp YyBzc2l6ZV90IHR3X3N0b3JlX3F1ZXVlX2RlcHRoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qg Y2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IHR3X2NoYW5nZV9xdWV1ZV9kZXB0 aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxdWV1ZV9kZXB0aCkKIHsKLQlpbnQgcXVl dWVfZGVwdGg7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2 KTsKLQotCXF1ZXVlX2RlcHRoID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAlpZiAo cXVldWVfZGVwdGggPiBUV19RX0xFTkdUSC0yKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcXVldWVf ZGVwdGggPSBUV19RX0xFTkdUSC0yOwogCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1T R19PUkRFUkVEX1RBRywgcXVldWVfZGVwdGgpOwotCi0JcmV0dXJuIGNvdW50OwotfSAvKiBFbmQg dHdfc3RvcmVfcXVldWVfZGVwdGgoKSAqLwotCi0vKiBDcmVhdGUgc3lzZnMgJ3F1ZXVlX2RlcHRo JyBlbnRyeSAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHR3X3F1ZXVlX2RlcHRo X2F0dHIgPSB7Ci0JLmF0dHIgPSB7Ci0JCS5uYW1lID0JCSJxdWV1ZV9kZXB0aCIsCi0JCS5tb2Rl ID0JCVNfSVJVU1IgfCBTX0lXVVNSLAotCX0sCi0JLnN0b3JlID0gdHdfc3RvcmVfcXVldWVfZGVw dGgKLX07Ci0KLS8qIERldmljZSBhdHRyaWJ1dGVzIGluaXRpYWxpemVyICovCi1zdGF0aWMgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKnR3X2Rldl9hdHRyc1tdID0gewotCSZ0d19xdWV1ZV9kZXB0 aF9hdHRyLAotCU5VTEwsCi19OworCXJldHVybiBxdWV1ZV9kZXB0aDsKK30gLyogRW5kIHR3X2No YW5nZV9xdWV1ZV9kZXB0aCgpICovCiAKIC8qIENyZWF0ZSBzeXNmcyAnc3RhdHMnIGVudHJ5ICov CiBzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgdHdfaG9zdF9zdGF0c19hdHRy ID0gewpAQCAtOTEwLDcgKzg5Niw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogQ2hlY2sgc2l6ZSAq LwotCWlmIChkYXRhX2J1ZmZlcl9sZW5ndGggPiBUV19NQVhfU0VDVE9SUyAqIDUxMikgeworCWlm IChkYXRhX2J1ZmZlcl9sZW5ndGggPiBUV19NQVhfSU9DVExfU0VDVE9SUyAqIDUxMikgewogCQly ZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC05OTUsNyArOTgxLDcgQEAKIAkJ CXRpbWVvdXQgPSBUV19JT0NUTF9DSFJERVZfVElNRU9VVCpIWjsKIAogCQkJLyogTm93IHdhaXQg Zm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlX3RpbWVvdXQodHdfZGV2LT5pb2N0bF93cXVldWUsIHR3X2Rldi0+Y2hyZGV2 X3JlcXVlc3RfaWQgPT0gVFdfSU9DVExfQ0hSREVWX0ZSRUUsIHRpbWVvdXQpOworCQkJdGltZW91 dCA9IHdhaXRfZXZlbnRfdGltZW91dCh0d19kZXYtPmlvY3RsX3dxdWV1ZSwgdHdfZGV2LT5jaHJk ZXZfcmVxdWVzdF9pZCA9PSBUV19JT0NUTF9DSFJERVZfRlJFRSwgdGltZW91dCk7CiAKIAkJCS8q IFNlZSBpZiB3ZSByZXNldCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgaW9jdGwgdG8gY29tcGxldGUg Ki8KIAkJCWlmICh0ZXN0X2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpKSB7CkBAIC0x MDA0LDE2ICs5OTAsMTEgQEAKIAkJCQlnb3RvIG91dDI7CiAJCQl9CiAKLQkJCS8qIENoZWNrIGlm IHdlIHRpbWVkIG91dCwgZ290IGEgc2lnbmFsLCBvciBkaWRuJ3QgZ2V0Ci0JCQkgICBhbiBpbnRl cnJ1cHQgKi8KLQkJCWlmICgodGltZW91dCA8PSAwKSAmJiAodHdfZGV2LT5jaHJkZXZfcmVxdWVz dF9pZCAhPSBUV19JT0NUTF9DSFJERVZfRlJFRSkpIHsKKwkJCS8qIFdlIHRpbWVkIG91dCwgYW5k IGRpZG4ndCBnZXQgYW4gaW50ZXJydXB0ICovCisJCQlpZiAodHdfZGV2LT5jaHJkZXZfcmVxdWVz dF9pZCAhPSBUV19JT0NUTF9DSFJERVZfRlJFRSkgewogCQkJCS8qIE5vdyB3ZSBuZWVkIHRvIHJl c2V0IHRoZSBib2FyZCAqLwotCQkJCWlmICh0aW1lb3V0ID09IC1FUkVTVEFSVFNZUykgewotCQkJ CQlyZXR2YWwgPSB0aW1lb3V0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5J TkcgIjN3LXh4eHg6IHNjc2klZDogQ2hhcmFjdGVyIGlvY3RsICgweCV4KSB0aW1lZCBvdXQsIHJl c2V0dGluZyBjYXJkLlxuIiwgdHdfZGV2LT5ob3N0LT5ob3N0X25vLCBjbWQpOwotCQkJCQlyZXR2 YWwgPSAtRUlPOwotCQkJCX0KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiBzY3Np JWQ6IENoYXJhY3RlciBpb2N0bCAoMHgleCkgdGltZWQgb3V0LCByZXNldHRpbmcgY2FyZC5cbiIs IHR3X2Rldi0+aG9zdC0+aG9zdF9ubywgY21kKTsKKwkJCQlyZXR2YWwgPSAtRUlPOwogCQkJCXNw aW5fbG9ja19pcnFzYXZlKHR3X2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCQkJdHdf ZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOwogCQkJCXR3X3N0YXRlX3Jl cXVlc3RfZmluaXNoKHR3X2RldiwgcmVxdWVzdF9pZCk7CkBAIC0yMDYwLDcgKzIwNDEsNyBAQAog CQkJdHdfc3RhdGVfcmVxdWVzdF9maW5pc2godHdfZGV2LCByZXF1ZXN0X2lkKTsKIAkJCVNDcG50 LT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpOwogCQkJZG9uZShTQ3BudCk7Ci0JCQln b3RvIG91dDsKKwkJCXJldHZhbCA9IDA7CiAJfQogCWlmIChyZXR2YWwpIHsKIAkJdHdfZGV2LT5z dGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOwpAQCAtMjA2OSw3ICsyMDUwLDYgQEAK IAkJZG9uZShTQ3BudCk7CiAJCXJldHZhbCA9IDA7CiAJfQotb3V0OgogCXJldHVybiByZXR2YWw7 CiB9IC8qIEVuZCB0d19zY3NpX3F1ZXVlKCkgKi8KIApAQCAtMjA4OCwxODMgKzIwNjgsMTgwIEBA CiAJLyogR2V0IHRoZSBob3N0IGxvY2sgZm9yIGlvIGNvbXBsZXRpb25zICovCiAJc3Bpbl9sb2Nr KHR3X2Rldi0+aG9zdC0+aG9zdF9sb2NrKTsKIAotCS8qIFNlZSBpZiB0aGUgaW50ZXJydXB0IG1h dGNoZXMgdGhpcyBpbnN0YW5jZSAqLwotCWlmICh0d19kZXYtPnR3X3BjaV9kZXYtPmlycSA9PSAo dW5zaWduZWQgaW50KWlycSkgeworCS8qIFJlYWQgdGhlIHJlZ2lzdGVycyAqLworCXN0YXR1c19y ZWdfdmFsdWUgPSBpbmwoVFdfU1RBVFVTX1JFR19BRERSKHR3X2RldikpOwogCi0JCWhhbmRsZWQg PSAxOworCS8qIENoZWNrIGlmIHRoaXMgaXMgb3VyIGludGVycnVwdCwgb3RoZXJ3aXNlIGJhaWwg Ki8KKwlpZiAoIShzdGF0dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX1ZBTElEX0lOVEVSUlVQVCkp CisJCWdvdG8gdHdfaW50ZXJydXB0X2JhaWw7CiAKLQkJLyogUmVhZCB0aGUgcmVnaXN0ZXJzICov Ci0JCXN0YXR1c19yZWdfdmFsdWUgPSBpbmwoVFdfU1RBVFVTX1JFR19BRERSKHR3X2RldikpOwor CWhhbmRsZWQgPSAxOwogCi0JCS8qIENoZWNrIGlmIHRoaXMgaXMgb3VyIGludGVycnVwdCwgb3Ro ZXJ3aXNlIGJhaWwgKi8KLQkJaWYgKCEoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19WQUxJ RF9JTlRFUlJVUFQpKQorCS8qIENoZWNrIGNvbnRyb2xsZXIgZm9yIGVycm9ycyAqLworCWlmICh0 d19jaGVja19iaXRzKHN0YXR1c19yZWdfdmFsdWUpKSB7CisJCWRwcmludGsoS0VSTl9XQVJOSU5H ICIzdy14eHh4OiB0d19pbnRlcnJ1cHQoKTogVW5leHBlY3RlZCBiaXRzLlxuIik7CisJCWlmICh0 d19kZWNvZGVfYml0cyh0d19kZXYsIHN0YXR1c19yZWdfdmFsdWUsIDEpKSB7CisJCQlUV19DTEVB Ul9BTExfSU5URVJSVVBUUyh0d19kZXYpOwogCQkJZ290byB0d19pbnRlcnJ1cHRfYmFpbDsKLQot CQkvKiBDaGVjayBjb250cm9sbGVyIGZvciBlcnJvcnMgKi8KLQkJaWYgKHR3X2NoZWNrX2JpdHMo c3RhdHVzX3JlZ192YWx1ZSkpIHsKLQkJCWRwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiB0 d19pbnRlcnJ1cHQoKTogVW5leHBlY3RlZCBiaXRzLlxuIik7Ci0JCQlpZiAodHdfZGVjb2RlX2Jp dHModHdfZGV2LCBzdGF0dXNfcmVnX3ZhbHVlLCAxKSkgewotCQkJCVRXX0NMRUFSX0FMTF9JTlRF UlJVUFRTKHR3X2Rldik7Ci0JCQkJZ290byB0d19pbnRlcnJ1cHRfYmFpbDsKLQkJCX0KIAkJfQor CX0KIAotCQkvKiBIYW5kbGUgaG9zdCBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1c19yZWdfdmFs dWUgJiBUV19TVEFUVVNfSE9TVF9JTlRFUlJVUFQpIHsKLQkJCWRwcmludGsoS0VSTl9OT1RJQ0Ug IjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBSZWNlaXZlZCBob3N0IGludGVycnVwdC5cbiIpOwot CQkJVFdfQ0xFQVJfSE9TVF9JTlRFUlJVUFQodHdfZGV2KTsKKwkvKiBIYW5kbGUgaG9zdCBpbnRl cnJ1cHQgKi8KKwlpZiAoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19IT1NUX0lOVEVSUlVQ VCkgeworCQlkcHJpbnRrKEtFUk5fTk9USUNFICIzdy14eHh4OiB0d19pbnRlcnJ1cHQoKTogUmVj ZWl2ZWQgaG9zdCBpbnRlcnJ1cHQuXG4iKTsKKwkJVFdfQ0xFQVJfSE9TVF9JTlRFUlJVUFQodHdf ZGV2KTsKKwl9CisKKwkvKiBIYW5kbGUgYXR0ZW50aW9uIGludGVycnVwdCAqLworCWlmIChzdGF0 dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX0FUVEVOVElPTl9JTlRFUlJVUFQpIHsKKwkJZHByaW50 ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJydXB0KCk6IFJlY2VpdmVkIGF0dGVudGlv biBpbnRlcnJ1cHQuXG4iKTsKKwkJVFdfQ0xFQVJfQVRURU5USU9OX0lOVEVSUlVQVCh0d19kZXYp OworCQl0d19zdGF0ZV9yZXF1ZXN0X3N0YXJ0KHR3X2RldiwgJnJlcXVlc3RfaWQpOworCQllcnJv ciA9IHR3X2Flbl9yZWFkX3F1ZXVlKHR3X2RldiwgcmVxdWVzdF9pZCk7CisJCWlmIChlcnJvcikg eworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBFcnJvciByZWFkaW5n IGFlbiBxdWV1ZS5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CisJCQl0d19kZXYtPnN0YXRl W3JlcXVlc3RfaWRdID0gVFdfU19DT01QTEVURUQ7CisJCQl0d19zdGF0ZV9yZXF1ZXN0X2Zpbmlz aCh0d19kZXYsIHJlcXVlc3RfaWQpOwogCQl9CisJfQogCi0JCS8qIEhhbmRsZSBhdHRlbnRpb24g aW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXNfcmVnX3ZhbHVlICYgVFdfU1RBVFVTX0FUVEVOVElP Tl9JTlRFUlJVUFQpIHsKLQkJCWRwcmludGsoS0VSTl9OT1RJQ0UgIjN3LXh4eHg6IHR3X2ludGVy cnVwdCgpOiBSZWNlaXZlZCBhdHRlbnRpb24gaW50ZXJydXB0LlxuIik7Ci0JCQlUV19DTEVBUl9B VFRFTlRJT05fSU5URVJSVVBUKHR3X2Rldik7Ci0JCQl0d19zdGF0ZV9yZXF1ZXN0X3N0YXJ0KHR3 X2RldiwgJnJlcXVlc3RfaWQpOwotCQkJZXJyb3IgPSB0d19hZW5fcmVhZF9xdWV1ZSh0d19kZXYs IHJlcXVlc3RfaWQpOwotCQkJaWYgKGVycm9yKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAi M3cteHh4eDogc2NzaSVkOiBFcnJvciByZWFkaW5nIGFlbiBxdWV1ZS5cbiIsIHR3X2Rldi0+aG9z dC0+aG9zdF9ubyk7Ci0JCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExF VEVEOwotCQkJCXR3X3N0YXRlX3JlcXVlc3RfZmluaXNoKHR3X2RldiwgcmVxdWVzdF9pZCk7CisJ LyogSGFuZGxlIGNvbW1hbmQgaW50ZXJydXB0ICovCisJaWYgKHN0YXR1c19yZWdfdmFsdWUgJiBU V19TVEFUVVNfQ09NTUFORF9JTlRFUlJVUFQpIHsKKwkJLyogRHJhaW4gYXMgbWFueSBwZW5kaW5n IGNvbW1hbmRzIGFzIHdlIGNhbiAqLworCQl3aGlsZSAodHdfZGV2LT5wZW5kaW5nX3JlcXVlc3Rf Y291bnQgPiAwKSB7CisJCQlyZXF1ZXN0X2lkID0gdHdfZGV2LT5wZW5kaW5nX3F1ZXVlW3R3X2Rl di0+cGVuZGluZ19oZWFkXTsKKwkJCWlmICh0d19kZXYtPnN0YXRlW3JlcXVlc3RfaWRdICE9IFRX X1NfUEVORElORykgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IHNjc2klZDog Rm91bmQgcmVxdWVzdCBpZCB0aGF0IHdhc24ndCBwZW5kaW5nLlxuIiwgdHdfZGV2LT5ob3N0LT5o b3N0X25vKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICh0d19wb3N0X2NvbW1hbmRfcGFja2V0 KHR3X2RldiwgcmVxdWVzdF9pZCk9PTApIHsKKwkJCQlpZiAodHdfZGV2LT5wZW5kaW5nX2hlYWQg PT0gVFdfUV9MRU5HVEgtMSkgeworCQkJCQl0d19kZXYtPnBlbmRpbmdfaGVhZCA9IFRXX1FfU1RB UlQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHdfZGV2LT5wZW5kaW5nX2hlYWQgPSB0d19kZXYtPnBl bmRpbmdfaGVhZCArIDE7CisJCQkJfQorCQkJCXR3X2Rldi0+cGVuZGluZ19yZXF1ZXN0X2NvdW50 LS07CisJCQl9IGVsc2UgeworCQkJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSB3aWxsIGNvbnRpbnVl IHJlLXBvc3Rpbmcgb24gdGhlIG5leHQgY29tbWFuZCBpbnRlcnJ1cHQgKi8KKwkJCQlicmVhazsK IAkJCX0KIAkJfQorCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCB3 ZSBtYXNrIGNvbW1hbmQgaW50ZXJydXB0ICovCisJCWlmICh0d19kZXYtPnBlbmRpbmdfcmVxdWVz dF9jb3VudCA9PSAwKSAKKwkJCVRXX01BU0tfQ09NTUFORF9JTlRFUlJVUFQodHdfZGV2KTsKKwl9 CisKKwkvKiBIYW5kbGUgcmVzcG9uc2UgaW50ZXJydXB0ICovCisJaWYgKHN0YXR1c19yZWdfdmFs dWUgJiBUV19TVEFUVVNfUkVTUE9OU0VfSU5URVJSVVBUKSB7CisJCS8qIERyYWluIHRoZSByZXNw b25zZSBxdWV1ZSBmcm9tIHRoZSBib2FyZCAqLworCQl3aGlsZSAoKHN0YXR1c19yZWdfdmFsdWUg JiBUV19TVEFUVVNfUkVTUE9OU0VfUVVFVUVfRU1QVFkpID09IDApIHsKKwkJCS8qIFJlYWQgcmVz cG9uc2UgcXVldWUgcmVnaXN0ZXIgKi8KKwkJCXJlc3BvbnNlX3F1ZS52YWx1ZSA9IGlubChUV19S RVNQT05TRV9RVUVVRV9SRUdfQUREUih0d19kZXYpKTsKKwkJCXJlcXVlc3RfaWQgPSBUV19SRVNJ RF9PVVQocmVzcG9uc2VfcXVlLnJlc3BvbnNlX2lkKTsKKwkJCWNvbW1hbmRfcGFja2V0ID0gKFRX X0NvbW1hbmQgKil0d19kZXYtPmNvbW1hbmRfcGFja2V0X3ZpcnR1YWxfYWRkcmVzc1tyZXF1ZXN0 X2lkXTsKKwkJCWVycm9yID0gMDsKIAotCQkvKiBIYW5kbGUgY29tbWFuZCBpbnRlcnJ1cHQgKi8K LQkJaWYgKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFUVVNfQ09NTUFORF9JTlRFUlJVUFQpIHsK LQkJCS8qIERyYWluIGFzIG1hbnkgcGVuZGluZyBjb21tYW5kcyBhcyB3ZSBjYW4gKi8KLQkJCXdo aWxlICh0d19kZXYtPnBlbmRpbmdfcmVxdWVzdF9jb3VudCA+IDApIHsKLQkJCQlyZXF1ZXN0X2lk ID0gdHdfZGV2LT5wZW5kaW5nX3F1ZXVlW3R3X2Rldi0+cGVuZGluZ19oZWFkXTsKLQkJCQlpZiAo dHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSAhPSBUV19TX1BFTkRJTkcpIHsKLQkJCQkJcHJpbnRr KEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBGb3VuZCByZXF1ZXN0IGlkIHRoYXQgd2Fz bid0IHBlbmRpbmcuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rfbm8pOwotCQkJCQlicmVhazsKLQkJ CQl9Ci0JCQkJaWYgKHR3X3Bvc3RfY29tbWFuZF9wYWNrZXQodHdfZGV2LCByZXF1ZXN0X2lkKT09 MCkgewotCQkJCQlpZiAodHdfZGV2LT5wZW5kaW5nX2hlYWQgPT0gVFdfUV9MRU5HVEgtMSkgewot CQkJCQkJdHdfZGV2LT5wZW5kaW5nX2hlYWQgPSBUV19RX1NUQVJUOwotCQkJCQl9IGVsc2Ugewot CQkJCQkJdHdfZGV2LT5wZW5kaW5nX2hlYWQgPSB0d19kZXYtPnBlbmRpbmdfaGVhZCArIDE7Ci0J CQkJCX0KLQkJCQkJdHdfZGV2LT5wZW5kaW5nX3JlcXVlc3RfY291bnQtLTsKKwkJCS8qIENoZWNr IGZvciBiYWQgcmVzcG9uc2UgKi8KKwkJCWlmIChjb21tYW5kX3BhY2tldC0+c3RhdHVzICE9IDAp IHsKKwkJCQkvKiBJZiBpbnRlcm5hbCBjb21tYW5kLCBkb24ndCBlcnJvciwgZG9uJ3QgZmlsbCBz ZW5zZSAqLworCQkJCWlmICh0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSA9PSBOVUxMKSB7CisJCQkJ CXR3X2RlY29kZV9zZW5zZSh0d19kZXYsIHJlcXVlc3RfaWQsIDApOwogCQkJCX0gZWxzZSB7Ci0J CQkJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSB3aWxsIGNvbnRpbnVlIHJlLXBvc3Rpbmcgb24gdGhl IG5leHQgY29tbWFuZCBpbnRlcnJ1cHQgKi8KLQkJCQkJYnJlYWs7CisJCQkJCWVycm9yID0gdHdf ZGVjb2RlX3NlbnNlKHR3X2RldiwgcmVxdWVzdF9pZCwgMSk7CiAJCQkJfQogCQkJfQotCQkJLyog SWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1ZXN0cywgd2UgbWFzayBjb21tYW5kIGlu dGVycnVwdCAqLwotCQkJaWYgKHR3X2Rldi0+cGVuZGluZ19yZXF1ZXN0X2NvdW50ID09IDApIAot CQkJCVRXX01BU0tfQ09NTUFORF9JTlRFUlJVUFQodHdfZGV2KTsKLQkJfQotCi0JCS8qIEhhbmRs ZSByZXNwb25zZSBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1c19yZWdfdmFsdWUgJiBUV19TVEFU VVNfUkVTUE9OU0VfSU5URVJSVVBUKSB7Ci0JCQkvKiBEcmFpbiB0aGUgcmVzcG9uc2UgcXVldWUg ZnJvbSB0aGUgYm9hcmQgKi8KLQkJCXdoaWxlICgoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRV U19SRVNQT05TRV9RVUVVRV9FTVBUWSkgPT0gMCkgewotCQkJCS8qIFJlYWQgcmVzcG9uc2UgcXVl dWUgcmVnaXN0ZXIgKi8KLQkJCQlyZXNwb25zZV9xdWUudmFsdWUgPSBpbmwoVFdfUkVTUE9OU0Vf UVVFVUVfUkVHX0FERFIodHdfZGV2KSk7Ci0JCQkJcmVxdWVzdF9pZCA9IFRXX1JFU0lEX09VVChy ZXNwb25zZV9xdWUucmVzcG9uc2VfaWQpOwotCQkJCWNvbW1hbmRfcGFja2V0ID0gKFRXX0NvbW1h bmQgKil0d19kZXYtPmNvbW1hbmRfcGFja2V0X3ZpcnR1YWxfYWRkcmVzc1tyZXF1ZXN0X2lkXTsK LQkJCQllcnJvciA9IDA7Ci0KLQkJCQkvKiBDaGVjayBmb3IgYmFkIHJlc3BvbnNlICovCi0JCQkJ aWYgKGNvbW1hbmRfcGFja2V0LT5zdGF0dXMgIT0gMCkgewotCQkJCQkvKiBJZiBpbnRlcm5hbCBj b21tYW5kLCBkb24ndCBlcnJvciwgZG9uJ3QgZmlsbCBzZW5zZSAqLwotCQkJCQlpZiAodHdfZGV2 LT5zcmJbcmVxdWVzdF9pZF0gPT0gTlVMTCkgewotCQkJCQkJdHdfZGVjb2RlX3NlbnNlKHR3X2Rl diwgcmVxdWVzdF9pZCwgMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQllcnJvciA9IHR3X2RlY29k ZV9zZW5zZSh0d19kZXYsIHJlcXVlc3RfaWQsIDEpOwotCQkJCQl9Ci0JCQkJfQogCi0JCQkJLyog Q2hlY2sgZm9yIGNvcnJlY3Qgc3RhdGUgKi8KLQkJCQlpZiAodHdfZGV2LT5zdGF0ZVtyZXF1ZXN0 X2lkXSAhPSBUV19TX1BPU1RFRCkgewotCQkJCQlpZiAodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0g IT0gTlVMTCkgewotCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBS ZWNlaXZlZCBhIHJlcXVlc3QgaWQgdGhhdCB3YXNuJ3QgcG9zdGVkLlxuIiwgdHdfZGV2LT5ob3N0 LT5ob3N0X25vKTsKLQkJCQkJCWVycm9yID0gMTsKLQkJCQkJfQorCQkJLyogQ2hlY2sgZm9yIGNv cnJlY3Qgc3RhdGUgKi8KKwkJCWlmICh0d19kZXYtPnN0YXRlW3JlcXVlc3RfaWRdICE9IFRXX1Nf UE9TVEVEKSB7CisJCQkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdICE9IE5VTEwpIHsKKwkJ CQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBSZWNlaXZlZCBhIHJlcXVl c3QgaWQgdGhhdCB3YXNuJ3QgcG9zdGVkLlxuIiwgdHdfZGV2LT5ob3N0LT5ob3N0X25vKTsKKwkJ CQkJZXJyb3IgPSAxOwogCQkJCX0KKwkJCX0KIAotCQkJCWRwcmludGsoS0VSTl9OT1RJQ0UgIjN3 LXh4eHg6IHR3X2ludGVycnVwdCgpOiBSZXNwb25zZSBxdWV1ZSByZXF1ZXN0IGlkOiAlZC5cbiIs IHJlcXVlc3RfaWQpOworCQkJZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJy dXB0KCk6IFJlc3BvbnNlIHF1ZXVlIHJlcXVlc3QgaWQ6ICVkLlxuIiwgcmVxdWVzdF9pZCk7CiAK LQkJCQkvKiBDaGVjayBmb3IgaW50ZXJuYWwgY29tbWFuZCBjb21wbGV0aW9uICovCi0JCQkJaWYg KHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdID09IE5VTEwpIHsKLQkJCQkJZHByaW50ayhLRVJOX1dB Uk5JTkcgIjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBGb3VuZCBpbnRlcm5hbGx5IHBvc3RlZCBj b21tYW5kLlxuIik7Ci0JCQkJCS8qIENoZWNrIGZvciBjaHJkZXYgaW9jdGwgY29tcGxldGlvbiAq LwotCQkJCQlpZiAocmVxdWVzdF9pZCAhPSB0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkKSB7Ci0J CQkJCQlyZXR2YWwgPSB0d19hZW5fY29tcGxldGUodHdfZGV2LCByZXF1ZXN0X2lkKTsKLQkJCQkJ CWlmIChyZXR2YWwpIHsKLQkJCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiBzY3Np JWQ6IEVycm9yIGNvbXBsZXRpbmcgYWVuLlxuIiwgdHdfZGV2LT5ob3N0LT5ob3N0X25vKTsKLQkJ CQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPSBU V19JT0NUTF9DSFJERVZfRlJFRTsKLQkJCQkJCXdha2VfdXAoJnR3X2Rldi0+aW9jdGxfd3F1ZXVl KTsKKwkJCS8qIENoZWNrIGZvciBpbnRlcm5hbCBjb21tYW5kIGNvbXBsZXRpb24gKi8KKwkJCWlm ICh0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSA9PSBOVUxMKSB7CisJCQkJZHByaW50ayhLRVJOX1dB Uk5JTkcgIjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBGb3VuZCBpbnRlcm5hbGx5IHBvc3RlZCBj b21tYW5kLlxuIik7CisJCQkJLyogQ2hlY2sgZm9yIGNocmRldiBpb2N0bCBjb21wbGV0aW9uICov CisJCQkJaWYgKHJlcXVlc3RfaWQgIT0gdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCkgeworCQkJ CQlyZXR2YWwgPSB0d19hZW5fY29tcGxldGUodHdfZGV2LCByZXF1ZXN0X2lkKTsKKwkJCQkJaWYg KHJldHZhbCkgeworCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBF cnJvciBjb21wbGV0aW5nIGFlbi5cbiIsIHR3X2Rldi0+aG9zdC0+aG9zdF9ubyk7CiAJCQkJCX0K IAkJCQl9IGVsc2UgeworCQkJCQl0d19kZXYtPmNocmRldl9yZXF1ZXN0X2lkID0gVFdfSU9DVExf Q0hSREVWX0ZSRUU7CisJCQkJCXdha2VfdXAoJnR3X2Rldi0+aW9jdGxfd3F1ZXVlKTsKKwkJCQl9 CisJCQl9IGVsc2UgewogCQkJCXN3aXRjaCAodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPmNtbmRb MF0pIHsKLQkJCQkJY2FzZSBSRUFEXzEwOgotCQkJCQljYXNlIFJFQURfNjoKLQkJCQkJCWRwcmlu dGsoS0VSTl9OT1RJQ0UgIjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBjYXVnaHQgUkVBRF8xMC9S RUFEXzZcbiIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgV1JJVEVfMTA6Ci0JCQkJCWNhc2Ug V1JJVEVfNjoKLQkJCQkJCWRwcmludGsoS0VSTl9OT1RJQ0UgIjN3LXh4eHg6IHR3X2ludGVycnVw dCgpOiBjYXVnaHQgV1JJVEVfMTAvV1JJVEVfNlxuIik7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2Fz ZSBURVNUX1VOSVRfUkVBRFk6Ci0JCQkJCQlkcHJpbnRrKEtFUk5fTk9USUNFICIzdy14eHh4OiB0 d19pbnRlcnJ1cHQoKTogY2F1Z2h0IFRFU1RfVU5JVF9SRUFEWVxuIik7Ci0JCQkJCQllcnJvciA9 IHR3X3Njc2lvcF90ZXN0X3VuaXRfcmVhZHlfY29tcGxldGUodHdfZGV2LCByZXF1ZXN0X2lkKTsK LQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIElOUVVJUlk6Ci0JCQkJCQlkcHJpbnRrKEtFUk5fTk9U SUNFICIzdy14eHh4OiB0d19pbnRlcnJ1cHQoKTogY2F1Z2h0IElOUVVJUllcbiIpOwotCQkJCQkJ ZXJyb3IgPSB0d19zY3Npb3BfaW5xdWlyeV9jb21wbGV0ZSh0d19kZXYsIHJlcXVlc3RfaWQpOwot CQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgUkVBRF9DQVBBQ0lUWToKLQkJCQkJCWRwcmludGsoS0VS Tl9OT1RJQ0UgIjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBjYXVnaHQgUkVBRF9DQVBBQ0lUWVxu Iik7Ci0JCQkJCQllcnJvciA9IHR3X3Njc2lvcF9yZWFkX2NhcGFjaXR5X2NvbXBsZXRlKHR3X2Rl diwgcmVxdWVzdF9pZCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBNT0RFX1NFTlNFOgotCQkJ CQkJZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJydXB0KCk6IGNhdWdodCBN T0RFX1NFTlNFXG4iKTsKLQkJCQkJCWVycm9yID0gdHdfc2NzaW9wX21vZGVfc2Vuc2VfY29tcGxl dGUodHdfZGV2LCByZXF1ZXN0X2lkKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFNZTkNIUk9O SVpFX0NBQ0hFOgotCQkJCQkJZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJy dXB0KCk6IGNhdWdodCBTWU5DSFJPTklaRV9DQUNIRVxuIik7Ci0JCQkJCQlicmVhazsKLQkJCQkJ ZGVmYXVsdDoKLQkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IGNhc2Ugc2xpcCBp biB0d19pbnRlcnJ1cHQoKVxuIik7Ci0JCQkJCQllcnJvciA9IDE7Ci0JCQkJCX0KLQotCQkJCQkv KiBJZiBubyBlcnJvciBjb21tYW5kIHdhcyBhIHN1Y2Nlc3MgKi8KLQkJCQkJaWYgKGVycm9yID09 IDApIHsKLQkJCQkJCXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXN1bHQgPSAoRElEX09LIDw8 IDE2KTsKLQkJCQkJfQorCQkJCWNhc2UgUkVBRF8xMDoKKwkJCQljYXNlIFJFQURfNjoKKwkJCQkJ ZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJydXB0KCk6IGNhdWdodCBSRUFE XzEwL1JFQURfNlxuIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgV1JJVEVfMTA6CisJCQkJY2Fz ZSBXUklURV82OgorCQkJCQlkcHJpbnRrKEtFUk5fTk9USUNFICIzdy14eHh4OiB0d19pbnRlcnJ1 cHQoKTogY2F1Z2h0IFdSSVRFXzEwL1dSSVRFXzZcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNl IFRFU1RfVU5JVF9SRUFEWToKKwkJCQkJZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdf aW50ZXJydXB0KCk6IGNhdWdodCBURVNUX1VOSVRfUkVBRFlcbiIpOworCQkJCQllcnJvciA9IHR3 X3Njc2lvcF90ZXN0X3VuaXRfcmVhZHlfY29tcGxldGUodHdfZGV2LCByZXF1ZXN0X2lkKTsKKwkJ CQkJYnJlYWs7CisJCQkJY2FzZSBJTlFVSVJZOgorCQkJCQlkcHJpbnRrKEtFUk5fTk9USUNFICIz dy14eHh4OiB0d19pbnRlcnJ1cHQoKTogY2F1Z2h0IElOUVVJUllcbiIpOworCQkJCQllcnJvciA9 IHR3X3Njc2lvcF9pbnF1aXJ5X2NvbXBsZXRlKHR3X2RldiwgcmVxdWVzdF9pZCk7CisJCQkJCWJy ZWFrOworCQkJCWNhc2UgUkVBRF9DQVBBQ0lUWToKKwkJCQkJZHByaW50ayhLRVJOX05PVElDRSAi M3cteHh4eDogdHdfaW50ZXJydXB0KCk6IGNhdWdodCBSRUFEX0NBUEFDSVRZXG4iKTsKKwkJCQkJ ZXJyb3IgPSB0d19zY3Npb3BfcmVhZF9jYXBhY2l0eV9jb21wbGV0ZSh0d19kZXYsIHJlcXVlc3Rf aWQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIE1PREVfU0VOU0U6CisJCQkJCWRwcmludGsoS0VS Tl9OT1RJQ0UgIjN3LXh4eHg6IHR3X2ludGVycnVwdCgpOiBjYXVnaHQgTU9ERV9TRU5TRVxuIik7 CisJCQkJCWVycm9yID0gdHdfc2NzaW9wX21vZGVfc2Vuc2VfY29tcGxldGUodHdfZGV2LCByZXF1 ZXN0X2lkKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTWU5DSFJPTklaRV9DQUNIRToKKwkJCQkJ ZHByaW50ayhLRVJOX05PVElDRSAiM3cteHh4eDogdHdfaW50ZXJydXB0KCk6IGNhdWdodCBTWU5D SFJPTklaRV9DQUNIRVxuIik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXByaW50 ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IGNhc2Ugc2xpcCBpbiB0d19pbnRlcnJ1cHQoKVxuIik7 CisJCQkJCWVycm9yID0gMTsKKwkJCQl9CiAKLQkJCQkJLyogSWYgZXJyb3IsIGNvbW1hbmQgZmFp bGVkICovCi0JCQkJCWlmIChlcnJvciA9PSAxKSB7Ci0JCQkJCQkvKiBBc2sgZm9yIGEgaG9zdCBy ZXNldCAqLwotCQkJCQkJdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPnJlc3VsdCA9IChESURfT0sg PDwgMTYpIHwgKENIRUNLX0NPTkRJVElPTiA8PCAxKTsKLQkJCQkJfQorCQkJCS8qIElmIG5vIGVy cm9yIGNvbW1hbmQgd2FzIGEgc3VjY2VzcyAqLworCQkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJ CXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KTsKKwkJCQl9 CiAKLQkJCQkJLyogTm93IGNvbXBsZXRlIHRoZSBpbyAqLwotCQkJCQlpZiAoKGVycm9yICE9IFRX X0lTUl9ET05UX0NPTVBMRVRFKSkgewotCQkJCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9 IFRXX1NfQ09NUExFVEVEOwotCQkJCQkJdHdfc3RhdGVfcmVxdWVzdF9maW5pc2godHdfZGV2LCBy ZXF1ZXN0X2lkKTsKLQkJCQkJCXR3X2Rldi0+cG9zdGVkX3JlcXVlc3RfY291bnQtLTsKLQkJCQkJ CXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5zY3NpX2RvbmUodHdfZGV2LT5zcmJbcmVxdWVzdF9p ZF0pOworCQkJCS8qIElmIGVycm9yLCBjb21tYW5kIGZhaWxlZCAqLworCQkJCWlmIChlcnJvciA9 PSAxKSB7CisJCQkJCS8qIEFzayBmb3IgYSBob3N0IHJlc2V0ICovCisJCQkJCXR3X2Rldi0+c3Ji W3JlcXVlc3RfaWRdLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IChDSEVDS19DT05ESVRJT04g PDwgMSk7CisJCQkJfQogCi0JCQkJCQl0d191bm1hcF9zY3NpX2RhdGEodHdfZGV2LT50d19wY2lf ZGV2LCB0d19kZXYtPnNyYltyZXF1ZXN0X2lkXSk7Ci0JCQkJCX0KKwkJCQkvKiBOb3cgY29tcGxl dGUgdGhlIGlvICovCisJCQkJaWYgKChlcnJvciAhPSBUV19JU1JfRE9OVF9DT01QTEVURSkpIHsK KwkJCQkJdHdfZGV2LT5zdGF0ZVtyZXF1ZXN0X2lkXSA9IFRXX1NfQ09NUExFVEVEOworCQkJCQl0 d19zdGF0ZV9yZXF1ZXN0X2ZpbmlzaCh0d19kZXYsIHJlcXVlc3RfaWQpOworCQkJCQl0d19kZXYt PnBvc3RlZF9yZXF1ZXN0X2NvdW50LS07CisJCQkJCXR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5z Y3NpX2RvbmUodHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0pOworCQkJCQkKKwkJCQkJdHdfdW5tYXBf c2NzaV9kYXRhKHR3X2Rldi0+dHdfcGNpX2RldiwgdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0pOwog CQkJCX0KKwkJCX0KIAkJCQkKLQkJCQkvKiBDaGVjayBmb3IgdmFsaWQgc3RhdHVzIGFmdGVyIGVh Y2ggZHJhaW4gKi8KLQkJCQlzdGF0dXNfcmVnX3ZhbHVlID0gaW5sKFRXX1NUQVRVU19SRUdfQURE Uih0d19kZXYpKTsKLQkJCQlpZiAodHdfY2hlY2tfYml0cyhzdGF0dXNfcmVnX3ZhbHVlKSkgewot CQkJCQlkcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogdHdfaW50ZXJydXB0KCk6IFVuZXhw ZWN0ZWQgYml0cy5cbiIpOwotCQkJCQlpZiAodHdfZGVjb2RlX2JpdHModHdfZGV2LCBzdGF0dXNf cmVnX3ZhbHVlLCAxKSkgewotCQkJCQkJVFdfQ0xFQVJfQUxMX0lOVEVSUlVQVFModHdfZGV2KTsK LQkJCQkJCWdvdG8gdHdfaW50ZXJydXB0X2JhaWw7Ci0JCQkJCX0KKwkJCS8qIENoZWNrIGZvciB2 YWxpZCBzdGF0dXMgYWZ0ZXIgZWFjaCBkcmFpbiAqLworCQkJc3RhdHVzX3JlZ192YWx1ZSA9IGlu bChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7CisJCQlpZiAodHdfY2hlY2tfYml0cyhzdGF0 dXNfcmVnX3ZhbHVlKSkgeworCQkJCWRwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiB0d19p bnRlcnJ1cHQoKTogVW5leHBlY3RlZCBiaXRzLlxuIik7CisJCQkJaWYgKHR3X2RlY29kZV9iaXRz KHR3X2Rldiwgc3RhdHVzX3JlZ192YWx1ZSwgMSkpIHsKKwkJCQkJVFdfQ0xFQVJfQUxMX0lOVEVS UlVQVFModHdfZGV2KTsKKwkJCQkJZ290byB0d19pbnRlcnJ1cHRfYmFpbDsKIAkJCQl9CiAJCQl9 CiAJCX0KIAl9CisKIHR3X2ludGVycnVwdF9iYWlsOgogCXNwaW5fdW5sb2NrKHR3X2Rldi0+aG9z dC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKQEAgLTIzMDQsNiAr MjI4MSw3IEBACiAJLnF1ZXVlY29tbWFuZAkJPSB0d19zY3NpX3F1ZXVlLAogCS5laF9ob3N0X3Jl c2V0X2hhbmRsZXIJPSB0d19zY3NpX2VoX3Jlc2V0LAogCS5iaW9zX3BhcmFtCQk9IHR3X3Njc2lf Ymlvc3BhcmFtLAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSB0d19jaGFuZ2VfcXVldWVfZGVwdGgs CiAJLmNhbl9xdWV1ZQkJPSBUV19RX0xFTkdUSC0yLAogCS50aGlzX2lkCQk9IC0xLAogCS5zZ190 YWJsZXNpemUJCT0gVFdfTUFYX1NHTF9MRU5HVEgsCkBAIC0yMzExLDcgKzIyODksNiBAQAogCS5j bWRfcGVyX2x1bgkJPSBUV19NQVhfQ01EU19QRVJfTFVOLAkKIAkudXNlX2NsdXN0ZXJpbmcJCT0g RU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IHR3X2hvc3RfYXR0cnMsCi0JLnNk ZXZfYXR0cnMJCT0gdHdfZGV2X2F0dHJzLAogCS5lbXVsYXRlZAkJPSAxCiB9OwogCkBAIC0yNDM4 LDIzICsyNDE1LDI0IEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KHR3X2Rldi0+aG9zdCk7CiAKLQlf X3R3X3NodXRkb3duKHR3X2Rldik7CisJLyogVW5yZWdpc3RlciBjaGFyYWN0ZXIgZGV2aWNlICov CisJaWYgKHR3ZV9tYWpvciA+PSAwKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2KHR3ZV9tYWpvciwg InR3ZSIpOworCQl0d2VfbWFqb3IgPSAtMTsKKwl9CiAKIAkvKiBGcmVlIHVwIHRoZSBJUlEgKi8K IAlmcmVlX2lycSh0d19kZXYtPnR3X3BjaV9kZXYtPmlycSwgdHdfZGV2KTsKIAorCS8qIFNodXRk b3duIHRoZSBjYXJkICovCisJX190d19zaHV0ZG93bih0d19kZXYpOworCiAJLyogRnJlZSB1cCB0 aGUgbWVtIHJlZ2lvbiAqLwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKIAkvKiBGcmVl IHVwIGRldmljZSBleHRlbnNpb24gcmVzb3VyY2VzICovCiAJdHdfZnJlZV9kZXZpY2VfZXh0ZW5z aW9uKHR3X2Rldik7CiAKLQkvKiBVbnJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgKi8KLQlpZiAo dHdlX21ham9yID49IDApIHsKLQkJdW5yZWdpc3Rlcl9jaHJkZXYodHdlX21ham9yLCAidHdlIik7 Ci0JCXR3ZV9tYWpvciA9IC0xOwotCX0KLQogCXNjc2lfaG9zdF9wdXQodHdfZGV2LT5ob3N0KTsK IAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJdHdfZGV2aWNlX2V4dGVuc2lvbl9jb3VudC0t OwpkaWZmIC1OYXVyIGxpbnV4LTIuNi4xMi1yYzEtYmsxL2RyaXZlcnMvc2NzaS8zdy14eHh4Lmgg bGludXgtMi42LjEyLXJjMS1iazIvZHJpdmVycy9zY3NpLzN3LXh4eHguaAotLS0gbGludXgtMi42 LjEyLXJjMS1iazEvZHJpdmVycy9zY3NpLzN3LXh4eHguaAkyMDA1LTAzLTIxIDE5OjE2OjE4LjAw MDAwMDAwMCAtMDgwMAorKysgbGludXgtMi42LjEyLXJjMS1iazIvZHJpdmVycy9zY3NpLzN3LXh4 eHguaAkyMDA1LTAzLTIxIDE5OjE5OjM4LjAwMDAwMDAwMCAtMDgwMApAQCAtNiw3ICs2LDcgQEAK ICAgIAkJICAgICBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5i cj4KICAgICAgICAgICAgICAgICAgICAgIEJyYWQgU3RyYW5kIDxsaW51eEAzd2FyZS5jb20+CiAK LSAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA0IDN3YXJlIEluYy4KKyAgIENvcHlyaWdodCAoQykg MTk5OS0yMDA1IDN3YXJlIEluYy4KIAogICAgS2VybmVsIGNvbXBhdGlibGl0eSBCeToJQW5kcmUg SGVkcmljayA8YW5kcmVAc3VzZS5jb20+CiAgICBOb24tQ29weXJpZ2h0IChDKSAyMDAwCUFuZHJl IEhlZHJpY2sgPGFuZHJlQHN1c2UuY29tPgpAQCAtMjI3LDYgKzIyNyw3IEBACiAjZGVmaW5lIFRX X0lOX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBUV19JTl9DSFJE RVZfSU9DVEwgICAgICAgICAgICAgICAgICAgIDMKICNkZWZpbmUgVFdfTUFYX1NFQ1RPUlMgICAg ICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgVFdfTUFYX0lPQ1RMX1NFQ1RPUlMJCSAg ICAgIDUxMgogI2RlZmluZSBUV19BRU5fV0FJVF9USU1FICAgICAgICAgICAgICAgICAgICAgIDEw MDAKICNkZWZpbmUgVFdfSU9DVExfV0FJVF9USU1FICAgICAgICAgICAgICAgICAgICAoMSAqIEha KSAvKiAxIHNlY29uZCAqLwogI2RlZmluZSBUV19JU1JfRE9OVF9DT01QTEVURSAgICAgICAgICAg ICAgICAgIDIK ------=_Part_1304_5427962.1111616798708--