Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Apr 2005 01:12:10 -0400
From:      David Sze <dsze@alumni.uwaterloo.ca>
To:        Scott Long <scottl@samsco.org>
Cc:        mb@imp.ch
Subject:   Re: [PATCH] Stability fixes for IPS driver for 4.x
Message-ID:  <6.2.1.2.2.20050411005214.065dc018@mail.distrust.net>
In-Reply-To: <4257F20C.70004@samsco.org>
References:  <4257F20C.70004@samsco.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--=====================_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==_--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.2.1.2.2.20050411005214.065dc018>