From owner-freebsd-stable@FreeBSD.ORG Mon Apr 11 05:11:54 2005 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A9C1016A4CE for ; Mon, 11 Apr 2005 05:11:54 +0000 (GMT) Received: from mail.distrust.net (mail.distrust.net [69.93.230.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2592243D45 for ; Mon, 11 Apr 2005 05:11:54 +0000 (GMT) (envelope-from dsze@alumni.uwaterloo.ca) Received: from eeyore.distrust.net (CPE00a0c978120d-CM00122570472e.cpe.net.cable.rogers.com [70.24.0.197]) (authenticated bits=0) by mail.distrust.net (8.13.1/8.12.11) with ESMTP id j3B5Bmbb039197 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Mon, 11 Apr 2005 00:11:51 -0500 (CDT) (envelope-from dsze@alumni.uwaterloo.ca) Message-Id: <6.2.1.2.2.20050411005214.065dc018@mail.distrust.net> X-Mailer: QUALCOMM Windows Eudora Version 6.2.1.2 Date: Mon, 11 Apr 2005 01:12:10 -0400 To: Scott Long From: David Sze In-Reply-To: <4257F20C.70004@samsco.org> References: <4257F20C.70004@samsco.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_525762265==_" X-Virus-Scanned: ClamAV 0.83/819/Sun Apr 10 19:01:27 2005 on mail.distrust.net X-Virus-Status: Clean cc: Anthony Downer cc: stable@freebsd.org cc: mb@imp.ch Subject: Re: [PATCH] Stability fixes for IPS driver for 4.x X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2005 05:11:54 -0000 --=====================_525762265==_ Content-Type: text/plain; charset="us-ascii"; format=flowed At 09:17 AM 09/04/2005 -0600, Scott Long wrote this to All: >All, > >Thanks to the keen eye of David Sze, the cause of the instability in the >ips driver in FreeBSD 4.x might have been found. If it's affecting you, >please try the attached patch and let me know the results. I'll commit it >when everyone is happy with it. Scott, I think there's a problem with the ips_commands.c patch. After the bufq_first call succeeds, bufq_remove must be called before the splx or else the iobuf can get issued twice. However, if the subsequent ips_get_free_cmd fails, the iobuf must be put back on the bufq. Two patches are attached to this message: 1. ips.RELENG_4.stability.patch is just the stability patch as described. 2. ips.RELENG_4.mfc-and-stability.patch is an MFC of your IPS cleanup and optimization that you committed to HEAD on 01/28/05, plus the stability patch as described. Both patches survived a "make -j8 buildworld" for me. The problem I'm having now is that ips does not appear to be PAE-ified. With either patch the bus_dmamap_create call fails. Any pointers would be appreciated, this is new territory for me. >Thanks, > >Scott > > >Index: ips_commands.c >=================================================================== >RCS file: /usr/ncvs/src/sys/dev/ips/ips_commands.c,v >retrieving revision 1.11.6.1 >diff -u -r1.11.6.1 ips_commands.c >--- ips_commands.c 13 Jan 2005 00:46:40 -0000 1.11.6.1 >+++ ips_commands.c 9 Apr 2005 15:09:50 -0000 >@@ -162,8 +162,11 @@ > void ips_start_io_request(ips_softc_t *sc) > { > struct buf *iobuf; >+ int s > >+ s = splbio(); > iobuf = bufq_first(&sc->queue); >+ splx(s); > if(!iobuf) { > return; > } >@@ -171,8 +174,10 @@ > if(ips_get_free_cmd(sc, ips_send_io_request, iobuf, > IPS_NOWAIT_FLAG)){ > return; > } >- >+ >+ s = splbio(); > bufq_remove(&sc->queue, iobuf); >+ splx(s); > return; > } > >Index: ips_disk.c >=================================================================== >RCS file: /usr/ncvs/src/sys/dev/ips/ips_disk.c,v >retrieving revision 1.6.6.1 >diff -u -r1.6.6.1 ips_disk.c >--- ips_disk.c 13 Jan 2005 00:46:40 -0000 1.6.6.1 >+++ ips_disk.c 9 Apr 2005 15:07:50 -0000 >@@ -128,12 +128,15 @@ > static void ipsd_strategy(struct buf *iobuf) > { > ipsdisk_softc_t *dsc; >+ int s; > > dsc = iobuf->b_dev->si_drv1; > DEVICE_PRINTF(8,dsc->dev,"in strategy\n"); > devstat_start_transaction(&dsc->stats); > iobuf->b_driver1 = (void > *)(uintptr_t)dsc->sc->drives[dsc->disk_number].drivenum; >- bufqdisksort(&dsc->sc->queue, iobuf); >+ s = splbio(); >+ bufq_insert_tail(&dsc->sc->queue, iobuf); >+ splx(s); > ips_start_io_request(dsc->sc); > } > --=====================_525762265==_ Content-Type: application/octet-stream; name="ips.RELENG_4.stability.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ips.RELENG_4.stability.patch" SW5kZXg6IGlwc19jb21tYW5kcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC92YXIvbmN2cy9zcmMv c3lzL2Rldi9pcHMvaXBzX2NvbW1hbmRzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEuNi4x CmRpZmYgLXUgLXIxLjExLjYuMSBpcHNfY29tbWFuZHMuYwotLS0gaXBzX2NvbW1hbmRzLmMJMTMg SmFuIDIwMDUgMDA6NDY6NDAgLTAwMDAJMS4xMS42LjEKKysrIGlwc19jb21tYW5kcy5jCTExIEFw ciAyMDA1IDA0OjUwOjUzIC0wMDAwCkBAIC0xNjIsMTcgKzE2MiwyNCBAQAogdm9pZCBpcHNfc3Rh cnRfaW9fcmVxdWVzdChpcHNfc29mdGNfdCAqc2MpCiB7CiAJc3RydWN0IGJ1ZiAqaW9idWY7CisJ aW50cm1hc2tfdCBtYXNrOwogCisJbWFzayA9IHNwbGJpbygpOwogCWlvYnVmID0gYnVmcV9maXJz dCgmc2MtPnF1ZXVlKTsKIAlpZighaW9idWYpIHsKKwkJc3BseChtYXNrKTsKIAkJcmV0dXJuOwog CX0KKwlidWZxX3JlbW92ZSgmc2MtPnF1ZXVlLCBpb2J1Zik7CisJc3BseChtYXNrKTsKIAogCWlm KGlwc19nZXRfZnJlZV9jbWQoc2MsIGlwc19zZW5kX2lvX3JlcXVlc3QsIGlvYnVmLCBJUFNfTk9X QUlUX0ZMQUcpKXsKKwkJbWFzayA9IHNwbGJpbygpOworCQlidWZxX2luc2VydF90YWlsKCZzYy0+ cXVldWUsIGlvYnVmKTsKKwkJc3BseChtYXNrKTsKIAkJcmV0dXJuOwogCX0KIAkKLQlidWZxX3Jl bW92ZSgmc2MtPnF1ZXVlLCBpb2J1Zik7CiAJcmV0dXJuOwogfQogCkluZGV4OiBpcHNfZGlzay5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC92YXIvbmN2cy9zcmMvc3lzL2Rldi9pcHMvaXBzX2Rpc2su Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42LjYuMQpkaWZmIC11IC1yMS42LjYuMSBpcHNfZGlz ay5jCi0tLSBpcHNfZGlzay5jCTEzIEphbiAyMDA1IDAwOjQ2OjQwIC0wMDAwCTEuNi42LjEKKysr IGlwc19kaXNrLmMJMTEgQXByIDIwMDUgMDM6MTk6NTIgLTAwMDAKQEAgLTEyOCwxMiArMTI4LDE1 IEBACiBzdGF0aWMgdm9pZCBpcHNkX3N0cmF0ZWd5KHN0cnVjdCBidWYgKmlvYnVmKQogewogCWlw c2Rpc2tfc29mdGNfdCAqZHNjOworCWludHJtYXNrX3QgbWFzazsKIAogCWRzYyA9IGlvYnVmLT5i X2Rldi0+c2lfZHJ2MTsJCiAJREVWSUNFX1BSSU5URig4LGRzYy0+ZGV2LCJpbiBzdHJhdGVneVxu Iik7CiAJZGV2c3RhdF9zdGFydF90cmFuc2FjdGlvbigmZHNjLT5zdGF0cyk7CiAJaW9idWYtPmJf ZHJpdmVyMSA9ICh2b2lkICopKHVpbnRwdHJfdClkc2MtPnNjLT5kcml2ZXNbZHNjLT5kaXNrX251 bWJlcl0uZHJpdmVudW07Ci0JYnVmcWRpc2tzb3J0KCZkc2MtPnNjLT5xdWV1ZSwgaW9idWYpOwor CW1hc2sgPSBzcGxiaW8oKTsKKwlidWZxX2luc2VydF90YWlsKCZkc2MtPnNjLT5xdWV1ZSwgaW9i dWYpOworCXNwbHgobWFzayk7CiAJaXBzX3N0YXJ0X2lvX3JlcXVlc3QoZHNjLT5zYyk7CiB9CiAK --=====================_525762265==_ Content-Type: application/octet-stream; name="ips.RELENG_4.mfc-and-stability.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ips.RELENG_4.mfc-and-stability.patch" SW5kZXg6IGlwcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC92YXIvbmN2cy9zcmMvc3lzL2Rldi9p cHMvaXBzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMuNi4xCmRpZmYgLXUgLXIxLjEzLjYu MSBpcHMuYwotLS0gaXBzLmMJMTMgSmFuIDIwMDUgMDA6NDY6NDAgLTAwMDAJMS4xMy42LjEKKysr IGlwcy5jCTkgQXByIDIwMDUgMTM6NDA6MzAgLTAwMDAKQEAgLTEwOSw3ICsxMDksNyBAQAogfQog CiAvKiBpcyBsb2NraW5nIG5lZWRlZD8gd2hhdCBsb2NraW5nIGd1YXJlbnRlZXMgYXJlIHRoZXJl IG9uIHJlbW92YWw/ICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaXBzX2NtZHF1ZXVlX2ZyZWUo aXBzX3NvZnRjX3QgKnNjKQorc3RhdGljIGludCBpcHNfY21kcXVldWVfZnJlZShpcHNfc29mdGNf dCAqc2MpCiB7CiAJaW50IGksIGVycm9yID0gLTE7CiAJaXBzX2NvbW1hbmRfdCAqY29tbWFuZDsK QEAgLTEyOCwyMiArMTI4LDMyIEBACiAJCQlidXNfZG1hbWVtX2ZyZWUoc2MtPmNvbW1hbmRfZG1h dGFnLCAKIAkJCQkJY29tbWFuZC0+Y29tbWFuZF9idWZmZXIsCiAJCQkJCWNvbW1hbmQtPmNvbW1h bmRfZG1hbWFwKTsKKwkJCWlmIChjb21tYW5kLT5kYXRhX2RtYW1hcCAhPSBOVUxMKQorCQkJCWJ1 c19kbWFtYXBfZGVzdHJveShjb21tYW5kLT5kYXRhX2RtYXRhZywKKwkJCQkgICAgY29tbWFuZC0+ ZGF0YV9kbWFtYXApOwogCQl9CiAJCWVycm9yID0gMDsKIAkJc2MtPnN0YXRlIHw9IElQU19PRkZM SU5FOwogCX0KKwlzYy0+c3RhdGljY21kID0gTlVMTDsKKwlmcmVlKHNjLT5jb21tYW5kYXJyYXks IE1fREVWQlVGKTsKIAlzcGx4KG1hc2spOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyogcGxhY2Vz IGFsbCBpcHMgY29tbWFuZCBzdHJ1Y3RzIG9uIHRoZSBmcmVlIGNvbW1hbmQgcXVldWUuICBObyBs b2NraW5nIGFzIGlmIHNvbWVvbmUgZWxzZSB0cmllcwogICogdG8gYWNjZXNzIHRoaXMgZHVyaW5n IGluaXQsIHdlIGhhdmUgYmlnZ2VyIHByb2JsZW1zICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQg aXBzX2NtZHF1ZXVlX2luaXQoaXBzX3NvZnRjX3QgKnNjKQorc3RhdGljIGludCBpcHNfY21kcXVl dWVfaW5pdChpcHNfc29mdGNfdCAqc2MpCiB7CiAJaW50IGk7CiAJaXBzX2NvbW1hbmRfdCAqY29t bWFuZDsKKworCXNjLT5jb21tYW5kYXJyYXkgPSAoaXBzX2NvbW1hbmRfdCAqKW1hbGxvYyhzaXpl b2YoaXBzX2NvbW1hbmRfdCkgKgorCSAgICBzYy0+bWF4X2NtZHMsIE1fREVWQlVGLCBNX05PV0FJ VHxNX1pFUk8pOworCWlmIChzYy0+Y29tbWFuZGFycmF5ID09IE5VTEwpCisJCXJldHVybiAoRU5P TUVNKTsKKwogCVNMSVNUX0lOSVQoJnNjLT5mcmVlX2NtZF9saXN0KTsKLQlTVEFJTFFfSU5JVCgm c2MtPmNtZF93YWl0X2xpc3QpOwogCWZvcihpID0gMDsgaSA8IHNjLT5tYXhfY21kczsgaSsrKXsK IAkJY29tbWFuZCA9ICZzYy0+Y29tbWFuZGFycmF5W2ldOwogCQljb21tYW5kLT5pZCA9IGk7CkBA IC0xNjEsNyArMTcxLDE0IEBACiAJCQlnb3RvIGVycm9yOwogCQl9CiAKLQkJU0xJU1RfSU5TRVJU X0hFQUQoJnNjLT5mcmVlX2NtZF9saXN0LCBjb21tYW5kLCBuZXh0KTsJCisgCQlpZiAoaSAhPSAw KSB7CisgCQkJY29tbWFuZC0+ZGF0YV9kbWF0YWcgPSBzYy0+c2dfZG1hdGFnOworIAkJCWlmIChi dXNfZG1hbWFwX2NyZWF0ZShjb21tYW5kLT5kYXRhX2RtYXRhZywgMCwKKyAJCQkgICAgJmNvbW1h bmQtPmRhdGFfZG1hbWFwKSkKKyAJCQkJZ290byBlcnJvcjsKKyAJCQlTTElTVF9JTlNFUlRfSEVB RCgmc2MtPmZyZWVfY21kX2xpc3QsIGNvbW1hbmQsIG5leHQpOwkKKyAJCX0gZWxzZQorIAkJCXNj LT5zdGF0aWNjbWQgPSBjb21tYW5kOwogCX0KIAlzYy0+c3RhdGUgJj0gfklQU19PRkZMSU5FOwog CXJldHVybiAwOwpAQCAtMTcwLDc1ICsxODcsMTIgQEAKIAlyZXR1cm4gRU5PTUVNOwogfQogCi1z dGF0aWMgaW50IGlwc19hZGRfd2FpdGluZ19jb21tYW5kKGlwc19zb2Z0Y190ICpzYywgaW50ICgq Y2FsbGJhY2spKGlwc19jb21tYW5kX3QgKiksIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgZmxh Z3MpCi17Ci0JaW50cm1hc2tfdCBtYXNrOwotCWlwc19jb21tYW5kX3QgKmNvbW1hbmQ7Ci0JaXBz X3dhaXRfbGlzdF90ICp3YWl0ZXI7Ci0JdW5zaWduZWQgbG9uZyBtZW1mbGFncyA9IDA7Ci0JaWYo SVBTX05PV0FJVF9GTEFHICYgZmxhZ3MpCi0JCW1lbWZsYWdzID0gTV9OT1dBSVQ7Ci0Jd2FpdGVy ID0gbWFsbG9jKHNpemVvZihpcHNfd2FpdF9saXN0X3QpLCBNX0lQU0JVRiwgbWVtZmxhZ3MpOwot CWlmKCF3YWl0ZXIpCi0JCXJldHVybiBFTk9NRU07Ci0JbWFzayA9IHNwbGJpbygpOwotCWlmKHNj LT5zdGF0ZSAmIElQU19PRkZMSU5FKXsKLQkJc3BseChtYXNrKTsKLQkJZnJlZSh3YWl0ZXIsIE1f SVBTQlVGKTsKLQkJcmV0dXJuIEVJTzsKLQl9Ci0JY29tbWFuZCA9IFNMSVNUX0ZJUlNUKCZzYy0+ ZnJlZV9jbWRfbGlzdCk7Ci0JaWYoY29tbWFuZCAmJiAhKHNjLT5zdGF0ZSAmIElQU19USU1FT1VU KSl7Ci0JCVNMSVNUX1JFTU9WRV9IRUFEKCZzYy0+ZnJlZV9jbWRfbGlzdCwgbmV4dCk7Ci0JCShz Yy0+dXNlZF9jb21tYW5kcykrKzsKLQkJc3BseChtYXNrKTsKLQkJY2xlYXJfaXBzX2NvbW1hbmQo Y29tbWFuZCk7Ci0JCWJ6ZXJvKGNvbW1hbmQtPmNvbW1hbmRfYnVmZmVyLCBJUFNfQ09NTUFORF9M RU4pOwotCQlmcmVlKHdhaXRlciwgTV9JUFNCVUYpOwotCQljb21tYW5kLT5hcmcgPSBkYXRhOwot CQlyZXR1cm4gY2FsbGJhY2soY29tbWFuZCk7Ci0JfQotCURFVklDRV9QUklOVEYoMSwgc2MtPmRl diwgImFkZGluZyBjb21tYW5kIHRvIHRoZSB3YWl0IHF1ZXVlXG4iKTsgCi0Jd2FpdGVyLT5jYWxs YmFjayA9IGNhbGxiYWNrOyAKLQl3YWl0ZXItPmRhdGEgPSBkYXRhOwotCVNUQUlMUV9JTlNFUlRf VEFJTCgmc2MtPmNtZF93YWl0X2xpc3QsIHdhaXRlciwgbmV4dCk7Ci0Jc3BseChtYXNrKTsKLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXBzX3J1bl93YWl0aW5nX2NvbW1hbmQoaXBzX3Nv ZnRjX3QgKnNjKQotewotCWlwc193YWl0X2xpc3RfdCAqd2FpdGVyOwotCWlwc19jb21tYW5kX3QJ KmNvbW1hbmQ7Ci0JaW50ICgqY2FsbGJhY2spKGlwc19jb21tYW5kX3QqKTsKLQlpbnRybWFza190 IG1hc2s7Ci0KLQltYXNrID0gc3BsYmlvKCk7Ci0Jd2FpdGVyID0gU1RBSUxRX0ZJUlNUKCZzYy0+ Y21kX3dhaXRfbGlzdCk7Ci0JY29tbWFuZCA9IFNMSVNUX0ZJUlNUKCZzYy0+ZnJlZV9jbWRfbGlz dCk7Ci0JaWYoIXdhaXRlciB8fCAhY29tbWFuZCl7Ci0JCXNwbHgobWFzayk7Ci0JCXJldHVybjsK LQl9Ci0JREVWSUNFX1BSSU5URigxLCBzYy0+ZGV2LCAicmVtb3ZpbmcgY29tbWFuZCBmcm9tIHdh aXQgcXVldWVcbiIpOwotCVNMSVNUX1JFTU9WRV9IRUFEKCZzYy0+ZnJlZV9jbWRfbGlzdCwgbmV4 dCk7Ci0JU1RBSUxRX1JFTU9WRV9IRUFEKCZzYy0+Y21kX3dhaXRfbGlzdCwgbmV4dCk7Ci0JKHNj LT51c2VkX2NvbW1hbmRzKSsrOwotCXNwbHgobWFzayk7Ci0JY2xlYXJfaXBzX2NvbW1hbmQoY29t bWFuZCk7Ci0JYnplcm8oY29tbWFuZC0+Y29tbWFuZF9idWZmZXIsIElQU19DT01NQU5EX0xFTik7 Ci0JY29tbWFuZC0+YXJnID0gd2FpdGVyLT5kYXRhOwotCWNhbGxiYWNrID0gd2FpdGVyLT5jYWxs YmFjazsKLQlmcmVlKHdhaXRlciwgTV9JUFNCVUYpOwotCWNhbGxiYWNrKGNvbW1hbmQpOwotCXJl dHVybjsJCi19CiAvKiByZXR1cm5zIGEgZnJlZSBjb21tYW5kIHN0cnVjdCBpZiBvbmUgaXMgYXZh aWxhYmxlLiAKICAqIEl0IGFsc28gYmxhbmtzIG91dCBhbnl0aGluZyB0aGF0IG1heSBiZSBhIHdp bGQgcG9pbnRlci92YWx1ZS4KICAqIEFsc28sIGNvbW1hbmQgYnVmZmVycyBhcmUgbm90IGZyZWVk LiAgVGhleSBhcmUKICAqIHNtYWxsIHNvIHRoZXkgYXJlIHNhdmVkIGFuZCBrZXB0IGRtYW1hcHBl ZCBhbmQgbG9hZGVkLgogICovCi1pbnQgaXBzX2dldF9mcmVlX2NtZChpcHNfc29mdGNfdCAqc2Ms IGludCAoKmNhbGxiYWNrKShpcHNfY29tbWFuZF90ICopLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBs b25nIGZsYWdzKQoraW50IGlwc19nZXRfZnJlZV9jbWQoaXBzX3NvZnRjX3QgKnNjLCBpcHNfY29t bWFuZF90ICoqY21kLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWludHJtYXNrX3QgbWFzazsK IAlpcHNfY29tbWFuZF90ICpjb21tYW5kOwpAQCAtMjQ4LDIwICsyMDIsMjcgQEAKIAkJc3BseCht YXNrKTsKIAkJcmV0dXJuIEVJTzsKIAl9Ci0JY29tbWFuZCA9IFNMSVNUX0ZJUlNUKCZzYy0+ZnJl ZV9jbWRfbGlzdCk7Ci0JaWYoIWNvbW1hbmQgfHwgKHNjLT5zdGF0ZSAmIElQU19USU1FT1VUKSl7 Ci0JCXNwbHgobWFzayk7Ci0JCWlmKGZsYWdzICYgSVBTX05PV0FJVF9GTEFHKQorCWlmICgoZmxh Z3MgJiBJUFNfU1RBVElDX0ZMQUcpID09IDApIHsKKwkJY29tbWFuZCA9IFNMSVNUX0ZJUlNUKCZz Yy0+ZnJlZV9jbWRfbGlzdCk7CisJCWlmKCFjb21tYW5kIHx8IChzYy0+c3RhdGUgJiBJUFNfVElN RU9VVCkpeworCQkJc3BseChtYXNrKTsKKwkJCXJldHVybiBFQlVTWTsKKwkJfQorCQlTTElTVF9S RU1PVkVfSEVBRCgmc2MtPmZyZWVfY21kX2xpc3QsIG5leHQpOworCQkoc2MtPnVzZWRfY29tbWFu ZHMpKys7CisJfSBlbHNlIHsKKwkJaWYgKHNjLT5zdGF0ZSAmIElQU19TVEFUSUNfQlVTWSl7CisJ CQlzcGx4KG1hc2spOwogCQkJcmV0dXJuIEVBR0FJTjsKLQkJcmV0dXJuIGlwc19hZGRfd2FpdGlu Z19jb21tYW5kKHNjLCBjYWxsYmFjaywgZGF0YSwgZmxhZ3MpOworCQl9CisJCWNvbW1hbmQgPSBz Yy0+c3RhdGljY21kOworCQlzYy0+c3RhdGUgfD0gSVBTX1NUQVRJQ19CVVNZOwogCX0KLQlTTElT VF9SRU1PVkVfSEVBRCgmc2MtPmZyZWVfY21kX2xpc3QsIG5leHQpOwotCShzYy0+dXNlZF9jb21t YW5kcykrKzsKIAlzcGx4KG1hc2spOwogCWNsZWFyX2lwc19jb21tYW5kKGNvbW1hbmQpOwogCWJ6 ZXJvKGNvbW1hbmQtPmNvbW1hbmRfYnVmZmVyLCBJUFNfQ09NTUFORF9MRU4pOwotCWNvbW1hbmQt PmFyZyA9IGRhdGE7Ci0JcmV0dXJuIGNhbGxiYWNrKGNvbW1hbmQpOworCSpjbWQgPSBjb21tYW5k OworCXJldHVybiAwOwogfQogCiAvKiBhZGRzIGEgY29tbWFuZCBiYWNrIHRvIHRoZSBmcmVlIGNv bW1hbmQgcXVldWUgKi8KQEAgLTI3MCwxMSArMjMxLDEzIEBACiAJaW50cm1hc2tfdCBtYXNrOwog CW1hc2sgPSBzcGxiaW8oKTsKIAotCVNMSVNUX0lOU0VSVF9IRUFEKCZzYy0+ZnJlZV9jbWRfbGlz dCwgY29tbWFuZCwgbmV4dCk7Ci0JKHNjLT51c2VkX2NvbW1hbmRzKS0tOworCWlmIChjb21tYW5k ICE9IHNjLT5zdGF0aWNjbWQpIHsKKwkJU0xJU1RfSU5TRVJUX0hFQUQoJnNjLT5mcmVlX2NtZF9s aXN0LCBjb21tYW5kLCBuZXh0KTsKKwkJKHNjLT51c2VkX2NvbW1hbmRzKS0tOworCX0gZWxzZSB7 CisJCXNjLT5zdGF0ZSAmPSB+SVBTX1NUQVRJQ19CVVNZOworCX0KIAlzcGx4KG1hc2spOwotCWlm KCEoc2MtPnN0YXRlICYgSVBTX1RJTUVPVVQpKQotCQlpcHNfcnVuX3dhaXRpbmdfY29tbWFuZChz Yyk7CiB9CiBzdGF0aWMgY29uc3QgY2hhciogaXBzX2Rpc2tkZXZfc3RhdGVuYW1lKHVfaW50OF90 IHN0YXRlKQogewpAQCAtMzc5LDcgKzM0Miw2IEBACiAJCQkgICB3b3VsZCBnbyB0byB0aGUgY2Fy ZC4gVGhpcyBzdWNrcy4gKi8KIAkJfSBlbHNlCiAJCQlzYy0+c3RhdGUgJj0gfklQU19USU1FT1VU OwotCQlpcHNfcnVuX3dhaXRpbmdfY29tbWFuZChzYyk7CiAJfQogCWlmIChzYy0+c3RhdGUgIT0g SVBTX09GRkxJTkUpCiAJCXNjLT50aW1lciA9IHRpbWVvdXQoaXBzX3RpbWVvdXQsIHNjLCAxMCpo eik7CkluZGV4OiBpcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvdmFyL25jdnMvc3JjL3N5cy9k ZXYvaXBzL2lwcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExLjYuMQpkaWZmIC11IC1yMS4x MS42LjEgaXBzLmgKLS0tIGlwcy5oCTEzIEphbiAyMDA1IDAwOjQ2OjQwIC0wMDAwCTEuMTEuNi4x CisrKyBpcHMuaAkxMSBBcHIgMjAwNSAwMTo1MTo0MyAtMDAwMApAQCAtNjksMTIgKzY5LDEzIEBA CiAjZGVmaW5lIElQU19NQVhfU0dfTEVOCQkJKHNpemVvZihpcHNfc2dfZWxlbWVudF90KSAqIElQ U19NQVhfU0dfRUxFTUVOVFMpCiAjZGVmaW5lIElQU19OVlJBTV9QQUdFX1NJWkUJCTEyOAogLyog dmFyaW91cyBmbGFncyAqLwotI2RlZmluZSBJUFNfTk9XQUlUX0ZMQUcJCQkxCisjZGVmaW5lIElQ U19TVEFUSUNfRkxBRwkJCTB4MDEKIAogLyogc3RhdGVzIGZvciB0aGUgY2FyZCB0byBiZSBpbiAq LwogI2RlZmluZSBJUFNfREVWX09QRU4JCQkweDAxCiAjZGVmaW5lIElQU19USU1FT1VUCQkJMHgw MiAvKiBjb21tYW5kIHRpbWUgb3V0LCBuZWVkIHJlc2V0ICovCiAjZGVmaW5lIElQU19PRkZMSU5F CQkJMHgwNCAvKiBjYW4ndCByZXNldCBjYXJkL2NhcmQgZmFpbHVyZSAqLworI2RlZmluZSBJUFNf U1RBVElDX0JVU1kJCQkweDA4CiAKIC8qIG1heCBudW1iZXIgb2YgY29tbWFuZHMgc2V0IHRvIHNv bWV0aGluZyBsb3cgZm9yIG5vdyAqLwogI2RlZmluZSBJUFNfTUFYX0NNRF9OVU0JCQkxMjgJCkBA IC0zNzcsMjQgKzM3OCwxOCBAQAogCXVfaW50OF90IAkJaWQ7CiAJdV9pbnQ4X3QJCXRpbWVvdXQ7 CiAJc3RydWN0IGlwc19zb2Z0YyAqCXNjOworCWJ1c19kbWFfdGFnX3QJCWRhdGFfZG1hdGFnOwor CWJ1c19kbWFtYXBfdAkJZGF0YV9kbWFtYXA7CiAJYnVzX2RtYW1hcF90CQljb21tYW5kX2RtYW1h cDsKIAl2b2lkICoJCQljb21tYW5kX2J1ZmZlcjsKIAl1X2ludDMyX3QJCWNvbW1hbmRfcGh5c19h ZGRyOy8qV0FSTklORyEgbXVzdCBiZSBjaGFuZ2VkIGlmIDY0Yml0IGFkZHJlc3NpbmcgZXZlciB1 c2VkKi8JCiAJaXBzX2NtZF9zdGF0dXNfdAlzdGF0dXM7CiAJU0xJU1RfRU5UUlkoaXBzX2NvbW1h bmQpCW5leHQ7Ci0JYnVzX2RtYV90YWdfdAkJZGF0YV9kbWF0YWc7Ci0JYnVzX2RtYW1hcF90CQlk YXRhX2RtYW1hcDsKIAl2b2lkICoJCQlkYXRhX2J1ZmZlcjsKLQl2b2lkICogCQkJYXJnOworCXZv aWQgKgkJCWFyZzsKIAl2b2lkCQkJKCogY2FsbGJhY2spKHN0cnVjdCBpcHNfY29tbWFuZCAqY29t bWFuZCk7CiB9aXBzX2NvbW1hbmRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaXBzX3dhaXRfbGlzdHsK LQlTVEFJTFFfRU5UUlkoaXBzX3dhaXRfbGlzdCkgbmV4dDsKLQl2b2lkIAkJCSpkYXRhOwotCWlu dAkJCSgqIGNhbGxiYWNrKShpcHNfY29tbWFuZF90ICpjb21tYW5kKTsKLX1pcHNfd2FpdF9saXN0 X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGlwc19zb2Z0Y3sKICAgICAgICAgc3RydWN0IHJlc291cmNl ICogICAgICAgaW9yZXM7CiAgICAgICAgIHN0cnVjdCByZXNvdXJjZSAqICAgICAgIGlycXJlczsK QEAgLTQyMyw5ICs0MTgsOSBAQAogCXVfaW50OF90CQluZXh0X2RyaXZlOwogCXVfaW50OF90CQlt YXhfY21kczsKIAl2b2xhdGlsZSB1X2ludDhfdAl1c2VkX2NvbW1hbmRzOwotCWlwc19jb21tYW5k X3QJCWNvbW1hbmRhcnJheVtJUFNfTUFYX0NNRF9OVU1dOworCWlwc19jb21tYW5kX3QJCSpjb21t YW5kYXJyYXk7CisJaXBzX2NvbW1hbmRfdAkJKnN0YXRpY2NtZDsKIAlTTElTVF9IRUFEKGNvbW1h bmRfbGlzdCwgaXBzX2NvbW1hbmQpIGZyZWVfY21kX2xpc3Q7Ci0JU1RBSUxRX0hFQUQoY29tbWFu ZF93YWl0X2xpc3QsaXBzX3dhaXRfbGlzdCkgIGNtZF93YWl0X2xpc3Q7CiAJaW50CQkJKCogaXBz X2FkYXB0ZXJfcmVpbml0KShzdHJ1Y3QgaXBzX3NvZnRjICpzYywgCiAJCQkJCQkgICAgICAgaW50 IGZvcmNlKTsKICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCogaXBzX2FkYXB0ZXJf aW50cikodm9pZCAqc2MpOwpAQCAtNDUxLDggKzQ0Niw3IEBACiBleHRlcm4gaW50IGlwc19jbGVh cl9hZGFwdGVyKGlwc19zb2Z0Y190ICpzYyk7CiAKIC8qIGZ1bmN0aW9uIGRlZmluZXMgZnJvbSBp cHMuYyAqLwotZXh0ZXJuIGludCBpcHNfZ2V0X2ZyZWVfY21kKGlwc19zb2Z0Y190ICpzYywgaW50 ICgqY2FsbGJhY2spKGlwc19jb21tYW5kX3QgKiksIAotCQkJCXZvaWQgKmRhdGEsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpOworZXh0ZXJuIGludCBpcHNfZ2V0X2ZyZWVfY21kKGlwc19zb2Z0Y190ICpz YywgaXBzX2NvbW1hbmRfdCAqKmNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJu IHZvaWQgaXBzX2luc2VydF9mcmVlX2NtZChpcHNfc29mdGNfdCAqc2MsIGlwc19jb21tYW5kX3Qg KmNvbW1hbmQpOwogZXh0ZXJuIGludCBpcHNfYWRhcHRlcl9pbml0KGlwc19zb2Z0Y190ICpzYyk7 CiBleHRlcm4gaW50IGlwc19tb3JwaGV1c19yZWluaXQoaXBzX3NvZnRjX3QgKnNjLCBpbnQgZm9y Y2UpOwpJbmRleDogaXBzX2NvbW1hbmRzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Zhci9uY3Zz L3NyYy9zeXMvZGV2L2lwcy9pcHNfY29tbWFuZHMuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x MS42LjEKZGlmZiAtdSAtcjEuMTEuNi4xIGlwc19jb21tYW5kcy5jCi0tLSBpcHNfY29tbWFuZHMu YwkxMyBKYW4gMjAwNSAwMDo0Njo0MCAtMDAwMAkxLjExLjYuMQorKysgaXBzX2NvbW1hbmRzLmMJ MTEgQXByIDIwMDUgMDE6NTc6NDEgLTAwMDAKQEAgLTM4LDEyICszOCw5IEBACiAgKi8KIHN0YXRp YyB2b2lkIGlwc193YWtldXBfY2FsbGJhY2soaXBzX2NvbW1hbmRfdCAqY29tbWFuZCkKIHsKLQlp cHNfY21kX3N0YXR1c190ICpzdGF0dXM7Ci0Jc3RhdHVzID0gY29tbWFuZC0+YXJnOwotCXN0YXR1 cy0+dmFsdWUgPSBjb21tYW5kLT5zdGF0dXMudmFsdWU7CiAJYnVzX2RtYW1hcF9zeW5jKGNvbW1h bmQtPnNjLT5jb21tYW5kX2RtYXRhZywgY29tbWFuZC0+Y29tbWFuZF9kbWFtYXAsIAogCQkJQlVT X0RNQVNZTkNfUE9TVFdSSVRFKTsKLQl3YWtldXAoc3RhdHVzKTsKKwl3YWtldXAoJmNvbW1hbmQt PnN0YXR1cyk7CiB9CiAvKiBCZWxvdyBhcmUgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIGZvciBzZW5k aW5nIGFuIElPIHJlcXVlc3QKICAqIHRvIHRoZSBhZGFwdGVyLiAgVGhlIGZsb3cgb3JkZXIgaXM6 IHN0YXJ0LCBzZW5kLCBjYWxsYmFjaywgZmluaXNoLgpAQCAtNjEsNyArNTgsNiBAQAogCQkJCUJV U19ETUFTWU5DX1BPU1RXUklURSk7CiAJfQogCWJ1c19kbWFtYXBfdW5sb2FkKGNvbW1hbmQtPmRh dGFfZG1hdGFnLCBjb21tYW5kLT5kYXRhX2RtYW1hcCk7Ci0JYnVzX2RtYW1hcF9kZXN0cm95KGNv bW1hbmQtPmRhdGFfZG1hdGFnLCBjb21tYW5kLT5kYXRhX2RtYW1hcCk7CiAJaWYoQ09NTUFORF9F UlJPUigmY29tbWFuZC0+c3RhdHVzKSl7CiAJCWlvYnVmLT5iX2ZsYWdzIHw9Ql9FUlJPUjsKIAkJ aW9idWYtPmJfZXJyb3IgPSBFSU87CkBAIC04NCw3ICs4MCw2IEBACiAJaWYoZXJyb3IpewogCQlw cmludGYoImlwczogZXJyb3IgPSAlZCBpbiBpcHNfc2dfcmVxdWVzdF9jYWxsYmFja1xuIiwgZXJy b3IpOwogCQlidXNfZG1hbWFwX3VubG9hZChjb21tYW5kLT5kYXRhX2RtYXRhZywgY29tbWFuZC0+ ZGF0YV9kbWFtYXApOwotCQlidXNfZG1hbWFwX2Rlc3Ryb3koY29tbWFuZC0+ZGF0YV9kbWF0YWcs IGNvbW1hbmQtPmRhdGFfZG1hbWFwKTsKIAkJaW9idWYtPmJfZmxhZ3MgfD0gQl9FUlJPUjsKIAkJ aW9idWYtPmJfZXJyb3IgPSBFTk9NRU07CiAJCWlwc19pbnNlcnRfZnJlZV9jbWQoc2MsIGNvbW1h bmQpOwpAQCAtMTM4LDIwICsxMzMsMTAgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgaXBz X3NlbmRfaW9fcmVxdWVzdChpcHNfY29tbWFuZF90ICpjb21tYW5kKQorc3RhdGljIGludCBpcHNf c2VuZF9pb19yZXF1ZXN0KGlwc19jb21tYW5kX3QgKmNvbW1hbmQsIHN0cnVjdCBidWYgKmlvYnVm KQogewotCWlwc19zb2Z0Y190ICpzYyA9IGNvbW1hbmQtPnNjOwotCXN0cnVjdCBidWYgKmlvYnVm ID0gY29tbWFuZC0+YXJnOwotCWNvbW1hbmQtPmRhdGFfZG1hdGFnID0gc2MtPnNnX2RtYXRhZzsK LQlpZihidXNfZG1hbWFwX2NyZWF0ZShjb21tYW5kLT5kYXRhX2RtYXRhZywgMCwgJmNvbW1hbmQt PmRhdGFfZG1hbWFwKSl7Ci0JCWRldmljZV9wcmludGYoc2MtPmRldiwgImRtYW1hcCBmYWlsZWRc biIpOwotCQlpb2J1Zi0+Yl9mbGFncyB8PSBCX0VSUk9SOwotCQlpb2J1Zi0+Yl9lcnJvciA9IEVO T01FTTsKLQkJaXBzX2luc2VydF9mcmVlX2NtZChzYywgY29tbWFuZCk7Ci0JCWlwc2RfZmluaXNo KGlvYnVmKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWNvbW1hbmQtPmNhbGxiYWNrID0gaXBzX2lvX3Jl cXVlc3RfZmluaXNoOworCWNvbW1hbmQtPmFyZyA9IGlvYnVmOwogCVBSSU5URigxMCwgImlwcyB0 ZXN0OiA6IGJjb3VudCAlbGRcbiIsIGlvYnVmLT5iX2Jjb3VudCk7CiAJYnVzX2RtYW1hcF9sb2Fk KGNvbW1hbmQtPmRhdGFfZG1hdGFnLCBjb21tYW5kLT5kYXRhX2RtYW1hcCwKIAkJCWlvYnVmLT5i X2RhdGEsIGlvYnVmLT5iX2Jjb3VudCwKQEAgLTE2MiwxNyArMTQ3LDIzIEBACiB2b2lkIGlwc19z dGFydF9pb19yZXF1ZXN0KGlwc19zb2Z0Y190ICpzYykKIHsKIAlzdHJ1Y3QgYnVmICppb2J1ZjsK KwlpcHNfY29tbWFuZF90ICpjb21tYW5kOworCWludHJtYXNrX3QgbWFzayA9IHNwbGJpbygpOwog CiAJaW9idWYgPSBidWZxX2ZpcnN0KCZzYy0+cXVldWUpOwotCWlmKCFpb2J1ZikgeworCWlmKCFp b2J1Zil7CisJCXNwbHgobWFzayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZihpcHNfZ2V0X2ZyZWVf Y21kKHNjLCBpcHNfc2VuZF9pb19yZXF1ZXN0LCBpb2J1ZiwgSVBTX05PV0FJVF9GTEFHKSl7CisJ aWYgKGlwc19nZXRfZnJlZV9jbWQoc2MsICZjb21tYW5kLCAwKSl7CisJCXNwbHgobWFzayk7CiAJ CXJldHVybjsKIAl9CiAJCiAJYnVmcV9yZW1vdmUoJnNjLT5xdWV1ZSwgaW9idWYpOworCXNwbHgo bWFzayk7CisJaXBzX3NlbmRfaW9fcmVxdWVzdChjb21tYW5kLCBpb2J1Zik7CiAJcmV0dXJuOwog fQogCkBAIC0xODcsOCArMTc4LDcgQEAKIAlpcHNfYWRhcHRlcl9pbmZvX2NtZCAqY29tbWFuZF9z dHJ1Y3Q7CiAJc2MgPSBjb21tYW5kLT5zYzsKIAlpZihlcnJvcil7Ci0JCWlwc19jbWRfc3RhdHVz X3QgKiBzdGF0dXMgPSBjb21tYW5kLT5hcmc7Ci0JCXN0YXR1cy0+dmFsdWUgPSBJUFNfRVJST1Jf U1RBVFVTOyAvKiBhIGxvdmVseSBlcnJvciB2YWx1ZSAqLworCQljb21tYW5kLT5zdGF0dXMudmFs dWUgPSBJUFNfRVJST1JfU1RBVFVTOyAvKiBhIGxvdmVseSBlcnJvciB2YWx1ZSAqLwogCQlpcHNf aW5zZXJ0X2ZyZWVfY21kKHNjLCBjb21tYW5kKTsKIAkJcHJpbnRmKCJpcHM6IGVycm9yID0gJWQg aW4gaXBzX2dldF9hZGFwdGVyX2luZm9cbiIsIGVycm9yKTsKIAkJcmV0dXJuOwpAQCAtMjExLDcg KzIwMSw2IEBACiB7CiAJaW50IGVycm9yID0gMDsKIAlpcHNfc29mdGNfdCAqc2MgPSBjb21tYW5k LT5zYzsKLQlpcHNfY21kX3N0YXR1c190ICpzdGF0dXMgPSBjb21tYW5kLT5hcmc7CiAKIAlpZiAo YnVzX2RtYV90YWdfY3JlYXRlKAkvKiBwYXJlbnQgICAgKi8Jc2MtPmFkYXB0ZXJfZG1hdGFnLAog CQkJCS8qIGFsaWduZW1udCAqLwkxLApAQCAtMjM1LDcgKzIyNCw3IEBACiAJCWdvdG8gZXhpdDsK IAl9CiAJY29tbWFuZC0+Y2FsbGJhY2sgPSBpcHNfd2FrZXVwX2NhbGxiYWNrOwotCWFzbGVlcChz dGF0dXMsIDAsICJpcHMiLCAzMCpoeik7CisJYXNsZWVwKCZjb21tYW5kLT5zdGF0dXMsIDAsICJp cHMiLCAzMCpoeik7CiAJYnVzX2RtYW1hcF9sb2FkKGNvbW1hbmQtPmRhdGFfZG1hdGFnLCBjb21t YW5kLT5kYXRhX2RtYW1hcCwgCiAJCQljb21tYW5kLT5kYXRhX2J1ZmZlcixJUFNfQURBUFRFUl9J TkZPX0xFTiwgCiAJCQlpcHNfYWRhcHRlcl9pbmZvX2NhbGxiYWNrLCBjb21tYW5kLCBCVVNfRE1B X05PV0FJVCk7CkBAIC0yNjEsMjEgKzI1MCwxNyBAQAogCiBpbnQgaXBzX2dldF9hZGFwdGVyX2lu Zm8oaXBzX3NvZnRjX3QgKnNjKQogeworCWlwc19jb21tYW5kX3QgKmNvbW1hbmQ7CiAJaW50IGVy cm9yID0gMDsKLQlpcHNfY21kX3N0YXR1c190ICpzdGF0dXM7Ci0Jc3RhdHVzID0gbWFsbG9jKHNp emVvZihpcHNfY21kX3N0YXR1c190KSwgTV9JUFNCVUYsIE1fTk9XQUlUfE1fWkVSTyk7Ci0JaWYo IXN0YXR1cykKLQkJcmV0dXJuIEVOT01FTTsKLQlpZihpcHNfZ2V0X2ZyZWVfY21kKHNjLCBpcHNf c2VuZF9hZGFwdGVyX2luZm9fY21kLCBzdGF0dXMsIAotCQkJICAgIElQU19OT1dBSVRfRkxBRykg PiAwKXsKKworCWlmIChpcHNfZ2V0X2ZyZWVfY21kKHNjLCAmY29tbWFuZCwgSVBTX1NUQVRJQ19G TEFHKSA+IDApewogCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJ1bmFibGUgdG8gZ2V0IGFkYXB0 ZXIgY29uZmlndXJhdGlvblxuIik7Ci0JCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7CiAJCXJldHVy biBFTlhJTzsKIAl9Ci0JaWYgKENPTU1BTkRfRVJST1Ioc3RhdHVzKSl7CisJaXBzX3NlbmRfYWRh cHRlcl9pbmZvX2NtZChjb21tYW5kKTsKKwlpZiAoQ09NTUFORF9FUlJPUigmY29tbWFuZC0+c3Rh dHVzKSl7CiAJCWVycm9yID0gRU5YSU87CiAJfQotCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7CiAJ cmV0dXJuIGVycm9yOwogfQogCkBAIC0yOTAsOCArMjc1LDcgQEAKIAlpcHNfZHJpdmVfY21kICpj b21tYW5kX3N0cnVjdDsKIAlzYyA9IGNvbW1hbmQtPnNjOwogCWlmKGVycm9yKXsKLQkJaXBzX2Nt ZF9zdGF0dXNfdCAqIHN0YXR1cyA9IGNvbW1hbmQtPmFyZzsKLSAgICAgICAgICAgICAgICBzdGF0 dXMtPnZhbHVlID0gSVBTX0VSUk9SX1NUQVRVUzsKKyAgICAgICAgICAgICAgICBjb21tYW5kLT5z dGF0dXMudmFsdWUgPSBJUFNfRVJST1JfU1RBVFVTOwogCQlpcHNfaW5zZXJ0X2ZyZWVfY21kKHNj LCBjb21tYW5kKTsKIAkJcHJpbnRmKCJpcHM6IGVycm9yID0gJWQgaW4gaXBzX2dldF9kcml2ZV9p bmZvXG4iLCBlcnJvcik7CiAJCXJldHVybjsKQEAgLTMxMiw3ICsyOTYsNiBAQAogewogCWludCBl cnJvciA9IDA7CiAJaXBzX3NvZnRjX3QgKnNjID0gY29tbWFuZC0+c2M7Ci0JaXBzX2NtZF9zdGF0 dXNfdCAqc3RhdHVzID0gY29tbWFuZC0+YXJnOwogCWlwc19kcml2ZV9pbmZvX3QgKmRyaXZlaW5m bzsKIAogCWlmIChidXNfZG1hX3RhZ19jcmVhdGUoCS8qIHBhcmVudCAgICAqLwlzYy0+YWRhcHRl cl9kbWF0YWcsCkBAIC0zMzcsNyArMzIwLDcgQEAKIAkJZ290byBleGl0OwogCX0KIAljb21tYW5k LT5jYWxsYmFjayA9IGlwc193YWtldXBfY2FsbGJhY2s7Ci0JYXNsZWVwKHN0YXR1cywgMCwgImlw cyIsIDEwKmh6KTsKKwlhc2xlZXAoJmNvbW1hbmQtPnN0YXR1cywgMCwgImlwcyIsIDEwKmh6KTsK IAlidXNfZG1hbWFwX2xvYWQoY29tbWFuZC0+ZGF0YV9kbWF0YWcsIGNvbW1hbmQtPmRhdGFfZG1h bWFwLCAKIAkJCWNvbW1hbmQtPmRhdGFfYnVmZmVyLElQU19EUklWRV9JTkZPX0xFTiwgCiAJCQlp cHNfZHJpdmVfaW5mb19jYWxsYmFjaywgY29tbWFuZCwgQlVTX0RNQV9OT1dBSVQpOwpAQCAtMzY1 LDIwICszNDgsMTYgQEAKIGludCBpcHNfZ2V0X2RyaXZlX2luZm8oaXBzX3NvZnRjX3QgKnNjKQog ewogCWludCBlcnJvciA9IDA7Ci0JaXBzX2NtZF9zdGF0dXNfdCAqc3RhdHVzOwotCXN0YXR1cyA9 IG1hbGxvYyhzaXplb2YoaXBzX2NtZF9zdGF0dXNfdCksIE1fSVBTQlVGLCBNX05PV0FJVHxNX1pF Uk8pOwotCWlmKCFzdGF0dXMpCi0JCXJldHVybiBFTk9NRU07Ci0JaWYoaXBzX2dldF9mcmVlX2Nt ZChzYywgaXBzX3NlbmRfZHJpdmVfaW5mb19jbWQsIHN0YXR1cywgCi0JCQkgICAgSVBTX05PV0FJ VF9GTEFHKSA+IDApewotCQlmcmVlKHN0YXR1cywgTV9JUFNCVUYpOworCWlwc19jb21tYW5kX3Qg KmNvbW1hbmQ7CisKKwlpZiAoaXBzX2dldF9mcmVlX2NtZChzYywgJmNvbW1hbmQsIElQU19TVEFU SUNfRkxBRykgPiAwKXsKIAkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAidW5hYmxlIHRvIGdldCBk cml2ZSBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIEVOWElPOwogCX0KLQlpZihDT01NQU5E X0VSUk9SKHN0YXR1cykpeworCWlwc19zZW5kX2RyaXZlX2luZm9fY21kKGNvbW1hbmQpOworCWlm KENPTU1BTkRfRVJST1IoJmNvbW1hbmQtPnN0YXR1cykpewogCQllcnJvciA9IEVOWElPOwogCX0K LQlmcmVlKHN0YXR1cywgTV9JUFNCVUYpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMzg3LDcg KzM2Niw2IEBACiBzdGF0aWMgaW50IGlwc19zZW5kX2ZsdXNoX2NhY2hlX2NtZChpcHNfY29tbWFu ZF90ICpjb21tYW5kKQogewogCWlwc19zb2Z0Y190ICpzYyA9IGNvbW1hbmQtPnNjOwotCWlwc19j bWRfc3RhdHVzX3QgKnN0YXR1cyA9IGNvbW1hbmQtPmFyZzsKIAlpcHNfZ2VuZXJpY19jbWQgKmNv bW1hbmRfc3RydWN0OwogCiAJUFJJTlRGKDEwLCJpcHMgdGVzdDogZ290IGEgY29tbWFuZCwgYnVp bGRpbmcgZmx1c2ggY29tbWFuZFxuIik7CkBAIC0zOTcsNyArMzc1LDcgQEAKIAljb21tYW5kX3N0 cnVjdC0+aWQgPSBjb21tYW5kLT5pZDsKIAlidXNfZG1hbWFwX3N5bmMoc2MtPmNvbW1hbmRfZG1h dGFnLCBjb21tYW5kLT5jb21tYW5kX2RtYW1hcCwgCiAJCQlCVVNfRE1BU1lOQ19QUkVXUklURSk7 Ci0JYXNsZWVwKHN0YXR1cywgMCwgInNsdXNoMiIsIDApOworCWFzbGVlcCgmY29tbWFuZC0+c3Rh dHVzLCAwLCAic2x1c2gyIiwgMCk7CiAJc2MtPmlwc19pc3N1ZV9jbWQoY29tbWFuZCk7CiAJYXdh aXQoLTEsIC0xKTsKIAlpcHNfaW5zZXJ0X2ZyZWVfY21kKHNjLCBjb21tYW5kKTsKQEAgLTQwNiwy MCArMzg0LDE2IEBACiAKIGludCBpcHNfZmx1c2hfY2FjaGUoaXBzX3NvZnRjX3QgKnNjKQogewot CWlwc19jbWRfc3RhdHVzX3QgKnN0YXR1czsKLQlzdGF0dXMgPSBtYWxsb2Moc2l6ZW9mKGlwc19j bWRfc3RhdHVzX3QpLCBNX0lQU0JVRiwgTV9OT1dBSVR8TV9aRVJPKTsKLQlpZighc3RhdHVzKQot CQlyZXR1cm4gRU5PTUVNOworCWlwc19jb21tYW5kX3QgKmNvbW1hbmQ7CisKIAlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJmbHVzaGluZyBjYWNoZVxuIik7Ci0JaWYoaXBzX2dldF9mcmVlX2NtZChz YywgaXBzX3NlbmRfZmx1c2hfY2FjaGVfY21kLCBzdGF0dXMsIAotCQkJICAgIElQU19OT1dBSVRf RkxBRykpewotCQlmcmVlKHN0YXR1cywgTV9JUFNCVUYpOworCWlmIChpcHNfZ2V0X2ZyZWVfY21k KHNjLCAmY29tbWFuZCwgSVBTX1NUQVRJQ19GTEFHKSl7CiAJCWRldmljZV9wcmludGYoc2MtPmRl diwgIkVSUk9SOiB1bmFibGUgdG8gZ2V0IGEgY29tbWFuZCEgY2FuJ3QgZmx1c2ggY2FjaGUhXG4i KTsKIAl9Ci0JaWYoQ09NTUFORF9FUlJPUihzdGF0dXMpKXsKKwlpcHNfc2VuZF9mbHVzaF9jYWNo ZV9jbWQoY29tbWFuZCk7CisJaWYoQ09NTUFORF9FUlJPUigmY29tbWFuZC0+c3RhdHVzKSl7CiAJ CWRldmljZV9wcmludGYoc2MtPmRldiwgIkVSUk9SOiBjYWNoZSBmbHVzaCBjb21tYW5kIGZhaWxl ZCFcbiIpOwogCX0KLQlmcmVlKHN0YXR1cywgTV9JUFNCVUYpOwogCXJldHVybiAwOwogfQogCkBA IC00NjksNyArNDQzLDYgQEAKIHN0YXRpYyBpbnQgaXBzX3NlbmRfZmZkY19yZXNldF9jbWQoaXBz X2NvbW1hbmRfdCAqY29tbWFuZCkKIHsKIAlpcHNfc29mdGNfdCAqc2MgPSBjb21tYW5kLT5zYzsK LQlpcHNfY21kX3N0YXR1c190ICpzdGF0dXMgPSBjb21tYW5kLT5hcmc7CiAJaXBzX2FkYXB0ZXJf ZmZkY19jbWQgKmNvbW1hbmRfc3RydWN0OwogCiAJUFJJTlRGKDEwLCJpcHMgdGVzdDogZ290IGEg Y29tbWFuZCwgYnVpbGRpbmcgZmZkYyByZXNldCBjb21tYW5kXG4iKTsKQEAgLTQ4Myw3ICs0NTYs NyBAQAogCiAJYnVzX2RtYW1hcF9zeW5jKHNjLT5jb21tYW5kX2RtYXRhZywgY29tbWFuZC0+Y29t bWFuZF9kbWFtYXAsCiAJCQlCVVNfRE1BU1lOQ19QUkVXUklURSk7Ci0JYXNsZWVwKHN0YXR1cywg MCwgImlwc19mZmRjIiwgMCk7CisJYXNsZWVwKCZjb21tYW5kLT5zdGF0dXMsIDAsICJpcHNfZmZk YyIsIDApOwogCXNjLT5pcHNfaXNzdWVfY21kKGNvbW1hbmQpOwogCWF3YWl0KC0xLCAtMSk7CiAJ aXBzX2luc2VydF9mcmVlX2NtZChzYywgY29tbWFuZCk7CkBAIC00OTIsMTkgKzQ2NSwxNSBAQAog CiBpbnQgaXBzX2ZmZGNfcmVzZXQoaXBzX3NvZnRjX3QgKnNjKQogewotCWlwc19jbWRfc3RhdHVz X3QgKnN0YXR1czsKLQlzdGF0dXMgPSBtYWxsb2Moc2l6ZW9mKGlwc19jbWRfc3RhdHVzX3QpLCBN X0lQU0JVRiwgTV9OT1dBSVR8TV9aRVJPKTsKLQlpZighc3RhdHVzKQotCQlyZXR1cm4gRU5PTUVN OwotCWlmKGlwc19nZXRfZnJlZV9jbWQoc2MsIGlwc19zZW5kX2ZmZGNfcmVzZXRfY21kLCBzdGF0 dXMsCi0JCQkgICAgSVBTX05PV0FJVF9GTEFHKSl7Ci0JCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7 CisJaXBzX2NvbW1hbmRfdCAqY29tbWFuZDsKKworCWlmIChpcHNfZ2V0X2ZyZWVfY21kKHNjLCAm Y29tbWFuZCwgSVBTX1NUQVRJQ19GTEFHKSl7CiAJCWRldmljZV9wcmludGYoc2MtPmRldiwgIkVS Uk9SOiB1bmFibGUgdG8gZ2V0IGEgY29tbWFuZCEgY2FuJ3Qgc2VuZCBmZmRjIHJlc2V0IVxuIik7 CiAJfQotCWlmKENPTU1BTkRfRVJST1Ioc3RhdHVzKSl7CisJaXBzX3NlbmRfZmZkY19yZXNldF9j bWQoY29tbWFuZCk7CisJaWYoQ09NTUFORF9FUlJPUigmY29tbWFuZC0+c3RhdHVzKSl7CiAJCWRl dmljZV9wcmludGYoc2MtPmRldiwgIkVSUk9SOiBmZmRjIHJlc2V0IGNvbW1hbmQgZmFpbGVkIVxu Iik7CiAJfQotCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0 MSw4ICs1MTAsNyBAQAogCWlwc19yd19udnJhbV9jbWQgKmNvbW1hbmRfc3RydWN0OwogCXNjID0g Y29tbWFuZC0+c2M7CiAJaWYoZXJyb3IpewotCQlpcHNfY21kX3N0YXR1c190ICogc3RhdHVzID0g Y29tbWFuZC0+YXJnOwotICAgICAgICAgICAgICAgIHN0YXR1cy0+dmFsdWUgPSBJUFNfRVJST1Jf U1RBVFVTOworICAgICAgICAgICAgICAgIGNvbW1hbmQtPnN0YXR1cy52YWx1ZSA9IElQU19FUlJP Ul9TVEFUVVM7CiAJCWlwc19pbnNlcnRfZnJlZV9jbWQoc2MsIGNvbW1hbmQpOwogCQlwcmludGYo ImlwczogZXJyb3IgPSAlZCBpbiBpcHNfcmVhZF9udnJhbV9jYWxsYmFja1xuIiwgZXJyb3IpOwog CQlyZXR1cm47CkBAIC01NjEsMTAgKzUyOSwxMCBAQAogCXNjLT5pcHNfaXNzdWVfY21kKGNvbW1h bmQpOwogfQogCi1zdGF0aWMgaW50IGlwc19yZWFkX252cmFtKGlwc19jb21tYW5kX3QgKmNvbW1h bmQpeworc3RhdGljIGludCBpcHNfcmVhZF9udnJhbShpcHNfY29tbWFuZF90ICpjb21tYW5kKQor ewogCWludCBlcnJvciA9IDA7CiAJaXBzX3NvZnRjX3QgKnNjID0gY29tbWFuZC0+c2M7Ci0JaXBz X2NtZF9zdGF0dXNfdCAqc3RhdHVzID0gY29tbWFuZC0+YXJnOwogCiAJaWYgKGJ1c19kbWFfdGFn X2NyZWF0ZSgJLyogcGFyZW50ICAgICovCXNjLT5hZGFwdGVyX2RtYXRhZywKIAkJCQkvKiBhbGln bmVtbnQgKi8JMSwKQEAgLTU4OCw3ICs1NTYsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCWNvbW1h bmQtPmNhbGxiYWNrID0gaXBzX3dyaXRlX252cmFtOwotCWFzbGVlcChzdGF0dXMsIDAsICJpcHMi LCAwKTsKKwlhc2xlZXAoJmNvbW1hbmQtPnN0YXR1cywgMCwgImlwcyIsIDApOwogCWJ1c19kbWFt YXBfbG9hZChjb21tYW5kLT5kYXRhX2RtYXRhZywgY29tbWFuZC0+ZGF0YV9kbWFtYXAsIAogCQkJ Y29tbWFuZC0+ZGF0YV9idWZmZXIsSVBTX05WUkFNX1BBR0VfU0laRSwgCiAJCQlpcHNfcmVhZF9u dnJhbV9jYWxsYmFjaywgY29tbWFuZCwgQlVTX0RNQV9OT1dBSVQpOwpAQCAtNjEwLDE5ICs1Nzgs MTYgQEAKIAogaW50IGlwc191cGRhdGVfbnZyYW0oaXBzX3NvZnRjX3QgKnNjKQogewotCWlwc19j bWRfc3RhdHVzX3QgKnN0YXR1czsKLQlzdGF0dXMgPSBtYWxsb2Moc2l6ZW9mKGlwc19jbWRfc3Rh dHVzX3QpLCBNX0lQU0JVRiwgTV9OT1dBSVR8TV9aRVJPKTsKLQlpZighc3RhdHVzKQotCQlyZXR1 cm4gRU5PTUVNOwotCWlmKGlwc19nZXRfZnJlZV9jbWQoc2MsIGlwc19yZWFkX252cmFtLCBzdGF0 dXMsIElQU19OT1dBSVRfRkxBRykpewotCQlmcmVlKHN0YXR1cywgTV9JUFNCVUYpOworCWlwc19j b21tYW5kX3QgKmNvbW1hbmQ7CisKKwlpZiAoaXBzX2dldF9mcmVlX2NtZChzYywgJmNvbW1hbmQs IElQU19TVEFUSUNfRkxBRykpewogCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJFUlJPUjogdW5h YmxlIHRvIGdldCBhIGNvbW1hbmQhIGNhbid0IHVwZGF0ZSBudnJhbVxuIik7CiAJCXJldHVybiAx OwogCX0KLQlpZihDT01NQU5EX0VSUk9SKHN0YXR1cykpeworCWlwc19yZWFkX252cmFtKGNvbW1h bmQpOworCWlmKENPTU1BTkRfRVJST1IoJmNvbW1hbmQtPnN0YXR1cykpewogCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJFUlJPUjogbnZyYW0gdXBkYXRlIGNvbW1hbmQgZmFpbGVkIVxuIik7CiAJ fQotCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7CiAJcmV0dXJuIDA7CiAKIApAQCAtNjMyLDcgKzU5 Nyw2IEBACiBzdGF0aWMgaW50IGlwc19zZW5kX2NvbmZpZ19zeW5jX2NtZChpcHNfY29tbWFuZF90 ICpjb21tYW5kKQogewogCWlwc19zb2Z0Y190ICpzYyA9IGNvbW1hbmQtPnNjOwotCWlwc19jbWRf c3RhdHVzX3QgKnN0YXR1cyA9IGNvbW1hbmQtPmFyZzsKIAlpcHNfZ2VuZXJpY19jbWQgKmNvbW1h bmRfc3RydWN0OwogCiAJUFJJTlRGKDEwLCJpcHMgdGVzdDogZ290IGEgY29tbWFuZCwgYnVpbGRp bmcgZmx1c2ggY29tbWFuZFxuIik7CkBAIC02NDMsNyArNjA3LDcgQEAKIAljb21tYW5kX3N0cnVj dC0+cmVzZXJ2ZTIgPSBJUFNfUE9DTDsKIAlidXNfZG1hbWFwX3N5bmMoc2MtPmNvbW1hbmRfZG1h dGFnLCBjb21tYW5kLT5jb21tYW5kX2RtYW1hcCwgCiAJCQlCVVNfRE1BU1lOQ19QUkVXUklURSk7 Ci0JYXNsZWVwKHN0YXR1cywgMCwgImlwc3N5biIsIDApOworCWFzbGVlcCgmY29tbWFuZC0+c3Rh dHVzLCAwLCAiaXBzc3luIiwgMCk7CiAJc2MtPmlwc19pc3N1ZV9jbWQoY29tbWFuZCk7CiAJYXdh aXQoLTEsIC0xKTsKIAlpcHNfaW5zZXJ0X2ZyZWVfY21kKHNjLCBjb21tYW5kKTsKQEAgLTY1Myw3 ICs2MTcsNiBAQAogc3RhdGljIGludCBpcHNfc2VuZF9lcnJvcl90YWJsZV9jbWQoaXBzX2NvbW1h bmRfdCAqY29tbWFuZCkKIHsKIAlpcHNfc29mdGNfdCAqc2MgPSBjb21tYW5kLT5zYzsKLQlpcHNf Y21kX3N0YXR1c190ICpzdGF0dXMgPSBjb21tYW5kLT5hcmc7CiAJaXBzX2dlbmVyaWNfY21kICpj b21tYW5kX3N0cnVjdDsKIAogCVBSSU5URigxMCwiaXBzIHRlc3Q6IGdvdCBhIGNvbW1hbmQsIGJ1 aWxkaW5nIGVycm9ydGFibGUgY29tbWFuZFxuIik7CkBAIC02NjQsNyArNjI3LDcgQEAKIAljb21t YW5kX3N0cnVjdC0+cmVzZXJ2ZTIgPSBJUFNfQ1NMOwogCWJ1c19kbWFtYXBfc3luYyhzYy0+Y29t bWFuZF9kbWF0YWcsIGNvbW1hbmQtPmNvbW1hbmRfZG1hbWFwLCAKIAkJCUJVU19ETUFTWU5DX1BS RVdSSVRFKTsKLQlhc2xlZXAoc3RhdHVzLCAwLCAiaXBzZXRjIiwgMCk7CisJYXNsZWVwKCZjb21t YW5kLT5zdGF0dXMsIDAsICJpcHNldGMiLCAwKTsKIAlzYy0+aXBzX2lzc3VlX2NtZChjb21tYW5k KTsKIAlhd2FpdCgtMSwgLTEpOwogCWlwc19pbnNlcnRfZnJlZV9jbWQoc2MsIGNvbW1hbmQpOwpA QCAtNjc0LDM2ICs2MzcsMjkgQEAKIAogaW50IGlwc19jbGVhcl9hZGFwdGVyKGlwc19zb2Z0Y190 ICpzYykKIHsKLQlpcHNfY21kX3N0YXR1c190ICpzdGF0dXM7Ci0Jc3RhdHVzID0gbWFsbG9jKHNp emVvZihpcHNfY21kX3N0YXR1c190KSwgTV9JUFNCVUYsIE1fTk9XQUlUfE1fWkVSTyk7Ci0JaWYo IXN0YXR1cykKLQkJcmV0dXJuIEVOT01FTTsKKwlpcHNfY29tbWFuZF90ICpjb21tYW5kOworCiAJ ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAic3luY2luZyBjb25maWdcbiIpOwotCWlmKGlwc19nZXRf ZnJlZV9jbWQoc2MsIGlwc19zZW5kX2NvbmZpZ19zeW5jX2NtZCwgc3RhdHVzLCAKLQkJCSAgICBJ UFNfTk9XQUlUX0ZMQUcpKXsKLQkJZnJlZShzdGF0dXMsIE1fSVBTQlVGKTsKKwlpZiAoaXBzX2dl dF9mcmVlX2NtZChzYywgJmNvbW1hbmQsIElQU19TVEFUSUNfRkxBRykpewogCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJFUlJPUjogdW5hYmxlIHRvIGdldCBhIGNvbW1hbmQhIGNhbid0IHN5bmMg Y2FjaGUhXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCWlmKENPTU1BTkRfRVJST1Ioc3RhdHVzKSl7 Ci0JCWZyZWUoc3RhdHVzLCBNX0lQU0JVRik7CisJaXBzX3NlbmRfY29uZmlnX3N5bmNfY21kKGNv bW1hbmQpOworCWlmKENPTU1BTkRfRVJST1IoJmNvbW1hbmQtPnN0YXR1cykpewogCQlkZXZpY2Vf cHJpbnRmKHNjLT5kZXYsICJFUlJPUjogY2FjaGUgc3luYyBjb21tYW5kIGZhaWxlZCFcbiIpOwog CQlyZXR1cm4gMTsKIAl9CiAKIAlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjbGVhcmluZyBlcnJv ciB0YWJsZVxuIik7Ci0JaWYoaXBzX2dldF9mcmVlX2NtZChzYywgaXBzX3NlbmRfZXJyb3JfdGFi bGVfY21kLCBzdGF0dXMsIAotCQkJICAgIElQU19OT1dBSVRfRkxBRykpewotCQlmcmVlKHN0YXR1 cywgTV9JUFNCVUYpOworCWlmKGlwc19nZXRfZnJlZV9jbWQoc2MsICZjb21tYW5kLCBJUFNfU1RB VElDX0ZMQUcpKXsKIAkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiRVJST1I6IHVuYWJsZSB0byBn ZXQgYSBjb21tYW5kISBjYW4ndCBzeW5jIGNhY2hlIVxuIik7CiAJCXJldHVybiAxOwogCX0KLQlp ZihDT01NQU5EX0VSUk9SKHN0YXR1cykpeworCWlwc19zZW5kX2Vycm9yX3RhYmxlX2NtZChjb21t YW5kKTsKKwlpZihDT01NQU5EX0VSUk9SKCZjb21tYW5kLT5zdGF0dXMpKXsKIAkJZGV2aWNlX3By aW50ZihzYy0+ZGV2LCAiRVJST1I6IGV0YWJsZSBjb21tYW5kIGZhaWxlZCFcbiIpOwotCQlmcmVl KHN0YXR1cywgTV9JUFNCVUYpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlmcmVlKHN0YXR1cywgTV9J UFNCVUYpOwogCXJldHVybiAwOwogfQpJbmRleDogaXBzX2Rpc2suYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvdmFyL25jdnMvc3JjL3N5cy9kZXYvaXBzL2lwc19kaXNrLmMsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuNi42LjEKZGlmZiAtdSAtcjEuNi42LjEgaXBzX2Rpc2suYwotLS0gaXBzX2Rpc2su YwkxMyBKYW4gMjAwNSAwMDo0Njo0MCAtMDAwMAkxLjYuNi4xCisrKyBpcHNfZGlzay5jCTExIEFw ciAyMDA1IDAxOjU0OjQ0IC0wMDAwCkBAIC0xMjgsMTIgKzEyOCwxNSBAQAogc3RhdGljIHZvaWQg aXBzZF9zdHJhdGVneShzdHJ1Y3QgYnVmICppb2J1ZikKIHsKIAlpcHNkaXNrX3NvZnRjX3QgKmRz YzsKKwlpbnRybWFza190IG1hc2s7CiAKIAlkc2MgPSBpb2J1Zi0+Yl9kZXYtPnNpX2RydjE7CQog CURFVklDRV9QUklOVEYoOCxkc2MtPmRldiwiaW4gc3RyYXRlZ3lcbiIpOwogCWRldnN0YXRfc3Rh cnRfdHJhbnNhY3Rpb24oJmRzYy0+c3RhdHMpOwogCWlvYnVmLT5iX2RyaXZlcjEgPSAodm9pZCAq KSh1aW50cHRyX3QpZHNjLT5zYy0+ZHJpdmVzW2RzYy0+ZGlza19udW1iZXJdLmRyaXZlbnVtOwot CWJ1ZnFkaXNrc29ydCgmZHNjLT5zYy0+cXVldWUsIGlvYnVmKTsKKwltYXNrID0gc3BsYmlvKCk7 CisJYnVmcV9pbnNlcnRfdGFpbCgmZHNjLT5zYy0+cXVldWUsIGlvYnVmKTsKKwlzcGx4KG1hc2sp OwogCWlwc19zdGFydF9pb19yZXF1ZXN0KGRzYy0+c2MpOwogfQogCkluZGV4OiBpcHNfaW9jdGwu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvdmFyL25jdnMvc3JjL3N5cy9kZXYvaXBzL2lwc19pb2N0 bC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUuNi4xCmRpZmYgLXUgLXIxLjUuNi4xIGlwc19p b2N0bC5jCi0tLSBpcHNfaW9jdGwuYwkxMyBKYW4gMjAwNSAwMDo0Njo0MCAtMDAwMAkxLjUuNi4x CisrKyBpcHNfaW9jdGwuYwk3IEFwciAyMDA1IDIzOjU2OjA4IC0wMDAwCkBAIC04NCw2ICs4NCw3 IEBACiAKIHN0YXRpYyBpbnQgaXBzX2lvY3RsX2NtZChpcHNfc29mdGNfdCAqc2MsIGlwc19pb2N0 bF90ICppb2N0bF9jbWQsIGlwc191c2VyX3JlcXVlc3QgKnVzZXJfcmVxdWVzdCkKIHsKKwlpcHNf Y29tbWFuZF90ICpjb21tYW5kOwogCWludCBlcnJvciA9IEVJTlZBTDsKIAogCWlmIChidXNfZG1h X3RhZ19jcmVhdGUoCS8qIHBhcmVudCAgICAqLwlzYy0+YWRhcHRlcl9kbWF0YWcsCkBAIC0xMDks MTAgKzExMCwxMiBAQAogCSAgICBpb2N0bF9jbWQtPmRhdGFzaXplKSkKIAkJZ290byBleGl0Owog CWlvY3RsX2NtZC0+c3RhdHVzLnZhbHVlID0gMHhmZmZmZmZmZjsKLQlpZigoZXJyb3IgPSBpcHNf Z2V0X2ZyZWVfY21kKHNjLCBpcHNfaW9jdGxfc3RhcnQsIGlvY3RsX2NtZCwwKSkgPiAwKXsKKwlp ZigoZXJyb3IgPSBpcHNfZ2V0X2ZyZWVfY21kKHNjLCAmY29tbWFuZCwgMCkpID4gMCl7CiAJCWVy cm9yID0gRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQorCWNvbW1hbmQtPmFyZyA9IGlvY3RsX2Nt ZDsKKwlpcHNfaW9jdGxfc3RhcnQoY29tbWFuZCk7CiAJd2hpbGUoIGlvY3RsX2NtZC0+c3RhdHVz LnZhbHVlID09IDB4ZmZmZmZmZmYpCiAJCXRzbGVlcChpb2N0bF9jbWQsIDAsICJpcHMiLCBoei8x MCk7CiAJaWYoQ09NTUFORF9FUlJPUigmaW9jdGxfY21kLT5zdGF0dXMpKQo= --=====================_525762265==_--