[7696] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Next queueing code patchset.

daemon@ATHENA.MIT.EDU (Eric Youngdale)
Thu Dec 16 00:46:44 1999

Date:   Wed, 15 Dec 1999 21:37:05 -0500 (EST)
From: Eric Youngdale <eric@andante.org>
To: Jens Axboe <axboe@image.dk>,
	Douglas Gilbert <dgilbert@interlog.com>, Kai.Makisara@metla.fi
Cc: linux-scsi@vger.rutgers.edu
Message-ID: <Pine.LNX.4.10.9912152109480.10419-200000@gwyn.tux.org>
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="1624180858-1503920187-945311825=:10419"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--1624180858-1503920187-945311825=:10419
Content-Type: TEXT/PLAIN; charset=US-ASCII


	OK, I have my latest patchset ready for you guys to try.  I think
I have corrected all of the lockup issues that arise when you access the
same device in both character device and block device mode (only generics
is going get you into this kind of situation).  This also corrects the
race between scsi_allocate_cmnd() and scsi_release_command().

	Other than this problem, things have been pretty quiet.  I like it
that way :-).  There was one bug mentioned on linux-kernel that I still
need to look into, but I am still waiting for details.

	I started to change scsi_allocate_command() to always be
interruptible by signals in the event that we were blocked (i.e. ioctl, or
character device access), but there was a place in sd.c where we were
requesting a command block with the wait flag set where it seemed unwise.
This is where we were re-reading the capacity after a media change, and it
just didn't seem good to allow that to interrupt.  Thus what I did was to
add another parameter to scsi_allocate_command.  In most of the other
places I fixed it to pass FALSE for this parameter - meaning no change in
behavior.  When you are ready to deal with interruptibility by signals,
then just change the last parameter to TRUE.  The exception is
scsi_ioctl.c and sg.c, which I made a half-hearted attempt to switch over.
I need to review those changes again before I send them off to Linus & Co.
Anyways, the upshot is that the people who understand the tape and cdrom
code a bit better can make the appropriate changes.

	I fixed the problem of the error handler shutting down in
single-user mode.  Instead of using SIGKILL, I switched to using SIGHUP.
The init process doesn't send SIGHUP, so it all works correctly now.

	Also did some cleanups.  Removed some dead code, updated comments,
that kind of stuff.

	Patches are enclosed.  I also put a file on my ftp site that
contains before and after images of the files I modified. This is in
ftp://ftp.andante.org/tux/eric/scsi/changed.2333.tar.bz2.  All of this is
against 2.3.33.  I would like to give this patch a couple of days of soak
time before sending it off...

-Eric

"The world was a library, and its books were the stones, leaves,
 brooks, grass, and the birds of the earth.   We learned to do what only
 a student of nature ever learns, and that was to feel beauty."
			Chief Luther Standing Bear - Teton Sioux

--1624180858-1503920187-945311825=:10419
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="kdiff.2333"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9912152137050.10419@gwyn.tux.org>
Content-Description: Latest patchkit.
Content-Disposition: attachment; filename="kdiff.2333"

ZGlmZiAtYyAtciAuLi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaS5jIC4vZHJp
dmVycy9zY3NpL3Njc2kuYw0KKioqIC4uL2xpbnV4L2RyaXZlcnMvc2NzaS9z
Y3NpLmMJVHVlIERlYyAxNCAyMDowMzo1MiAxOTk5DQotLS0gLi9kcml2ZXJz
L3Njc2kvc2NzaS5jCVdlZCBEZWMgMTUgMjE6MzY6NTEgMTk5OQ0KKioqKioq
KioqKioqKioqDQoqKiogNDcwLDQ3NiAqKioqDQogIA0KICAJaW5pdGlhbGl6
ZV9tZXJnZV9mbihTRHBudCk7DQogIA0KISAJaW5pdF93YWl0cXVldWVfaGVh
ZCgmU0RwbnQtPmRldmljZV93YWl0KTsNCiAgDQogIAkvKg0KICAJICogTmV4
dCwgaG9vayB0aGUgZGV2aWNlIHRvIHRoZSBob3N0IGluIHF1ZXN0aW9uLg0K
LS0tIDQ3MCw0NzkgLS0tLQ0KICANCiAgCWluaXRpYWxpemVfbWVyZ2VfZm4o
U0RwbnQpOw0KICANCiEgICAgICAgICAvKg0KISAgICAgICAgICAqIEluaXRp
YWxpemUgdGhlIG9iamVjdCB0aGF0IHdlIHdpbGwgdXNlIHRvIHdhaXQgZm9y
IGNvbW1hbmQgYmxvY2tzLg0KISAgICAgICAgICAqLw0KISAJaW5pdF93YWl0
cXVldWVfaGVhZCgmU0RwbnQtPnNjcG50X3dhaXQpOw0KICANCiAgCS8qDQog
IAkgKiBOZXh0LCBob29rIHRoZSBkZXZpY2UgdG8gdGhlIGhvc3QgaW4gcXVl
c3Rpb24uDQoqKioqKioqKioqKioqKioNCioqKiA5MDEsOTA3ICoqKioNCiAg
CVNEcG50LT5kZXZpY2VfcXVldWUgPSBTQ3BudDsNCiAgCVNEcG50LT5vbmxp
bmUgPSBUUlVFOw0KICANCiEgCWluaXRfd2FpdHF1ZXVlX2hlYWQoJlNEcG50
LT5kZXZpY2Vfd2FpdCk7DQogIA0KICAJLyoNCiAgCSAqIFNpbmNlIHdlIGp1
c3QgZm91bmQgb25lIGRldmljZSwgdGhlcmUgaGFkIGRhbW4gd2VsbCBiZXR0
ZXIgYmUgb25lIGluIHRoZSBsaXN0DQotLS0gOTA0LDkxMyAtLS0tDQogIAlT
RHBudC0+ZGV2aWNlX3F1ZXVlID0gU0NwbnQ7DQogIAlTRHBudC0+b25saW5l
ID0gVFJVRTsNCiAgDQohICAgICAgICAgLyoNCiEgICAgICAgICAgKiBJbml0
aWFsaXplIHRoZSBvYmplY3QgdGhhdCB3ZSB3aWxsIHVzZSB0byB3YWl0IGZv
ciBjb21tYW5kIGJsb2Nrcy4NCiEgICAgICAgICAgKi8NCiEgCWluaXRfd2Fp
dHF1ZXVlX2hlYWQoJlNEcG50LT5zY3BudF93YWl0KTsNCiAgDQogIAkvKg0K
ICAJICogU2luY2Ugd2UganVzdCBmb3VuZCBvbmUgZGV2aWNlLCB0aGVyZSBo
YWQgZGFtbiB3ZWxsIGJldHRlciBiZSBvbmUgaW4gdGhlIGxpc3QNCioqKioq
KioqKioqKioqKg0KKioqIDk4NCwxMDA3ICoqKioNCiAgI2RlZmluZSBJTl9S
RVNFVDMgOA0KICANCiAgDQotIC8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBx
dWljayBsb29rIGF0IGEgcmVxdWVzdCwgYW5kIGRlY2lkZXMgaWYgaXQNCi0g
ICogY2FuIGJlIHF1ZXVlZCBub3csIG9yIGlmIHRoZXJlIHdvdWxkIGJlIGEg
c3RhbGwgd2hpbGUgd2FpdGluZyBmb3INCi0gICogc29tZXRoaW5nIGVsc2Ug
dG8gZmluaXNoLiAgVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCBpbnRlcnJ1
cHRzIGFyZQ0KLSAgKiB0dXJuZWQgb2ZmIHdoZW4gZW50ZXJpbmcgdGhlIHJv
dXRpbmUuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkNCi0gICogb2YgdGhl
IGNhbGxpbmcgY29kZSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjYXNl
Lg0KLSAgKi8NCi0gDQotIA0KLSAvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
YSBzdHJ1Y3R1cmUgcG9pbnRlciB0aGF0IHdpbGwgYmUgdmFsaWQgZm9yDQot
ICAqIHRoZSBkZXZpY2UuICBUaGUgd2FpdCBwYXJhbWV0ZXIgdGVsbHMgdXMg
d2hldGhlciB3ZSBzaG91bGQgd2FpdCBmb3INCi0gICogdGhlIHVuaXQgdG8g
YmVjb21lIGZyZWUgb3Igbm90LiAgV2UgYXJlIGFsc28gYWJsZSB0byB0ZWxs
IHRoaXMgcm91dGluZQ0KLSAgKiBub3QgdG8gcmV0dXJuIGEgZGVzY3JpcHRv
ciBpZiB0aGUgaG9zdCBpcyB1bmFibGUgdG8gYWNjZXB0IGFueSBtb3JlDQot
ICAqIGNvbW1hbmRzIGZvciB0aGUgdGltZSBiZWluZy4gIFdlIG5lZWQgdG8g
a2VlcCBpbiBtaW5kIHRoYXQgdGhlcmUgaXMgbm8NCi0gICogZ3VhcmFudGVl
IHRoYXQgdGhlIGhvc3QgcmVtYWluIG5vdCBidXN5LiAgS2VlcCBpbiBtaW5k
IHRoZQ0KLSAgKiBzY3NpX3JlcXVlc3RfcXVldWVhYmxlIGZ1bmN0aW9uIGFs
c28ga25vd3MgdGhlIGludGVybmFsIGFsbG9jYXRpb24gc2NoZW1lDQotICAq
IG9mIHRoZSBwYWNrZXRzIGZvciBlYWNoIGRldmljZQ0KLSAgKi8NCi0gDQog
IC8qDQogICAqIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgZnJlZWxpc3QgZm9y
IGFsbCBkZXZpY2VzIG9uIHRoZSBzeXN0ZW0uDQogICAqIFdlIGNvdWxkIG1h
a2UgdGhpcyBmaW5lciBncmFpbmVkIGJ5IGhhdmluZyBhIHNpbmdsZSBsb2Nr
IHBlcg0KLS0tIDk5MCw5OTUgLS0tLQ0KKioqKioqKioqKioqKioqDQoqKiog
MTAyOSwxMDQzICoqKioNCiAgICogQXJndW1lbnRzOiAgIGRldmljZSAgICAt
IGRldmljZSBmb3Igd2hpY2ggd2Ugd2FudCBhIGNvbW1hbmQgZGVzY3JpcHRv
cg0KICAgKiAgICAgICAgICAgICAgd2FpdCAgICAgIC0gMSBpZiB3ZSBzaG91
bGQgd2FpdCBpbiB0aGUgZXZlbnQgdGhhdCBub25lDQogICAqICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmUgYXZhaWxhYmxlLg0KICAgKg0KICAgKiBM
b2NrIHN0YXR1czogTm8gbG9ja3MgYXNzdW1lZCB0byBiZSBoZWxkLiAgVGhp
cyBmdW5jdGlvbiBpcyBTTVAtc2FmZS4NCiAgICoNCiAgICogUmV0dXJuczog
ICAgIFBvaW50ZXIgdG8gY29tbWFuZCBkZXNjcmlwdG9yLg0KICAgKg0KICAg
KiBOb3RlczogICAgICAgUHJpb3IgdG8gdGhlIG5ldyBxdWV1ZSBjb2RlLCB0
aGlzIGZ1bmN0aW9uIHdhcyBub3QgU01QLXNhZmUuDQogICAqLw0KICANCiEg
U2NzaV9DbW5kICpzY3NpX2FsbG9jYXRlX2RldmljZShTY3NpX0RldmljZSAq
IGRldmljZSwgaW50IHdhaXQpDQogIHsNCiAgIAlzdHJ1Y3QgU2NzaV9Ib3N0
ICpob3N0Ow0KICAgIAlTY3NpX0NtbmQgKlNDcG50ID0gTlVMTDsNCi0tLSAx
MDE3LDEwNDAgLS0tLQ0KICAgKiBBcmd1bWVudHM6ICAgZGV2aWNlICAgIC0g
ZGV2aWNlIGZvciB3aGljaCB3ZSB3YW50IGEgY29tbWFuZCBkZXNjcmlwdG9y
DQogICAqICAgICAgICAgICAgICB3YWl0ICAgICAgLSAxIGlmIHdlIHNob3Vs
ZCB3YWl0IGluIHRoZSBldmVudCB0aGF0IG5vbmUNCiAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZSBhdmFpbGFibGUuDQorICAqICAgICAgICAg
ICAgICBpbnRlcnJ1cHRpYmxlIC0gMSBpZiB3ZSBzaG91bGQgdW5ibG9jayBh
bmQgcmV0dXJuIE5VTEwNCisgICogICAgICAgICAgICAgICAgICAgICAgICAg
IGluIHRoZSBldmVudCB0aGF0IHdlIG11c3Qgd2FpdCwgYW5kIGEgc2lnbmFs
DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJpdmVzLg0KICAg
Kg0KICAgKiBMb2NrIHN0YXR1czogTm8gbG9ja3MgYXNzdW1lZCB0byBiZSBo
ZWxkLiAgVGhpcyBmdW5jdGlvbiBpcyBTTVAtc2FmZS4NCiAgICoNCiAgICog
UmV0dXJuczogICAgIFBvaW50ZXIgdG8gY29tbWFuZCBkZXNjcmlwdG9yLg0K
ICAgKg0KICAgKiBOb3RlczogICAgICAgUHJpb3IgdG8gdGhlIG5ldyBxdWV1
ZSBjb2RlLCB0aGlzIGZ1bmN0aW9uIHdhcyBub3QgU01QLXNhZmUuDQorICAq
DQorICAqICAgICAgICAgICAgICBJZiB0aGUgd2FpdCBmbGFnIGlzIHRydWUs
IGFuZCB3ZSBhcmUgd2FpdGluZyBmb3IgYSBmcmVlDQorICAqICAgICAgICAg
ICAgICBjb21tYW5kIGJsb2NrLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW50ZXJy
dXB0IGFuZCByZXR1cm4NCisgICogICAgICAgICAgICAgIE5VTEwgaW4gdGhl
IGV2ZW50IHRoYXQgYSBzaWduYWwgYXJyaXZlcyB0aGF0IG5lZWRzIHRvDQor
ICAqICAgICAgICAgICAgICBiZSBoYW5kbGVkLg0KICAgKi8NCiAgDQohIFNj
c2lfQ21uZCAqc2NzaV9hbGxvY2F0ZV9kZXZpY2UoU2NzaV9EZXZpY2UgKiBk
ZXZpY2UsIGludCB3YWl0LCANCiEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW50ZXJydXB0YWJsZSkNCiAgew0KICAgCXN0cnVjdCBT
Y3NpX0hvc3QgKmhvc3Q7DQogICAgCVNjc2lfQ21uZCAqU0NwbnQgPSBOVUxM
Ow0KKioqKioqKioqKioqKioqDQoqKiogMTEyMSwxMTM1ICoqKioNCiAgCQkg
KiBJZiB3ZSBoYXZlIGJlZW4gYXNrZWQgdG8gd2FpdCBmb3IgYSBmcmVlIGJs
b2NrLCB0aGVuDQogIAkJICogd2FpdCBoZXJlLg0KICAJCSAqLw0KLSAJCXNw
aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9yZXF1ZXN0X2xvY2ssIGZs
YWdzKTsNCiAgCQlpZiAod2FpdCkgew0KICAJCQkvKg0KICAJCQkgKiBUaGlz
IHNob3VsZCBibG9jayB1bnRpbCBhIGRldmljZSBjb21tYW5kIGJsb2NrDQog
IAkJCSAqIGJlY29tZXMgYXZhaWxhYmxlLg0KICAJCQkgKi8NCiEgCQkJc2xl
ZXBfb24oJmRldmljZS0+ZGV2aWNlX3dhaXQpOw0KICAJCQlzcGluX2xvY2tf
aXJxc2F2ZSgmZGV2aWNlX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KICAJCX0g
ZWxzZSB7DQogIAkJCXJldHVybiBOVUxMOw0KICAJCX0NCiAgCX0NCi0tLSAx
MTE4LDExNzAgLS0tLQ0KICAJCSAqIElmIHdlIGhhdmUgYmVlbiBhc2tlZCB0
byB3YWl0IGZvciBhIGZyZWUgYmxvY2ssIHRoZW4NCiAgCQkgKiB3YWl0IGhl
cmUuDQogIAkJICovDQogIAkJaWYgKHdhaXQpIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7
DQorIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAvKg0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBXZSBuZWVkIHRvIHdhaXQgZm9yIGEgZnJl
ZSBjb21tYW5kYmxvY2suICBXZSBuZWVkIHRvDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIGluc2VydCBvdXJzZWx2ZXMgaW50byB0aGUgbGlzdCBi
ZWZvcmUgd2UgcmVsZWFzZSB0aGUNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICogbG9jay4gIFRoaXMgd2F5IGlmIGEgYmxvY2sgd2VyZSByZWxlYXNl
ZCB0aGUgc2FtZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWNy
b3NlY29uZCB0aGF0IHdlIHJlbGVhc2VkIHRoZSBsb2NrLCB0aGUgY2FsbA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBzY2hlZHVsZSgpIHdv
dWxkbid0IGJsb2NrICh3ZWxsLCBpdCBtaWdodCBzd2l0Y2gsDQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIGJ1dCB0aGUgY3VycmVudCB0YXNrIHdp
bGwgc3RpbGwgYmUgc2NoZWR1bGFibGUuDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfd2Fp
dF9xdWV1ZSgmZGV2aWNlLT5zY3BudF93YWl0LCAmd2FpdCk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKCBpbnRlcnJ1cHRhYmxlICkgew0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0
YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUp
Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICB9DQorIA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZp
Y2VfcmVxdWVzdF9sb2NrLCBmbGFncyk7DQorIA0KICAJCQkvKg0KICAJCQkg
KiBUaGlzIHNob3VsZCBibG9jayB1bnRpbCBhIGRldmljZSBjb21tYW5kIGJs
b2NrDQogIAkJCSAqIGJlY29tZXMgYXZhaWxhYmxlLg0KICAJCQkgKi8NCiEg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsNCiEgDQogIAkJ
CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfcmVxdWVzdF9sb2NrLCBmbGFn
cyk7DQorIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfd2Fp
dF9xdWV1ZSgmZGV2aWNlLT5zY3BudF93YWl0LCAmd2FpdCk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIEZJWE1FIC0gSXNuJ3QgdGhpcyByZWR1bmRhbnQ/PyAgU29tZW9u
ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlbHNlIHdpbGwgaGF2
ZSBmb3JjZWQgdGhlIHN0YXRlIGJhY2sgdG8gcnVubmluZy4NCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIEluIHRoZSBldmVudCB0aGF0IGEgc2lnbmFsIGhhcyBhcnJpdmVk
IHRoYXQgd2UgbmVlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0
byBjb25zaWRlciwgdGhlbiBzaW1wbHkgcmV0dXJuIE5VTEwuICBFdmVyeW9u
ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IGNhbGxzIHVz
IHNob3VsZCBiZSBwcmVwYXJlZCBmb3IgdGhpcw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgKiBwb3NzaWJpbGl0eSwgYW5kIHBhc3MgdGhlIGFwcHJv
cHJpYXRlIGNvZGUgYmFjaw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KiB0byB0aGUgdXNlci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICov
DQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpbnRlcnJ1cHRhYmxl
ICkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYWxfcGVuZGluZyhjdXJyZW50KSkNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQogIAkJfSBlbHNlIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNl
X3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KICAJCQlyZXR1cm4gTlVMTDsNCiAg
CQl9DQogIAl9DQoqKioqKioqKioqKioqKioNCioqKiAxMTcyLDExODIgKioq
Kg0KICAgKg0KICAgKiBOb3RlczogICAgICAgVGhlIGNvbW1hbmQgYmxvY2sg
Y2FuIG5vIGxvbmdlciBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgb25jZQ0KICAg
KiAgICAgICAgICAgICAgdGhpcyBmdW5jaXRvbiBpcyBjYWxsZWQuICBUaGlz
IGlzIGluIGVmZmVjdCB0aGUgaW52ZXJzZQ0KISAgKiAgICAgICAgICAgICAg
b2Ygc2NzaV9hbGxvY2F0ZV9kZXZpY2Uvc2NzaV9yZXF1ZXN0X3F1ZXVlYWJs
ZS4NCiAgICovDQogIHZvaWQgc2NzaV9yZWxlYXNlX2NvbW1hbmQoU2NzaV9D
bW5kICogU0NwbnQpDQogIHsNCiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQog
IAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX3JlcXVlc3RfbG9jaywgZmxh
Z3MpOw0KICANCiAgCVNDcG50LT5yZXF1ZXN0LnJxX3N0YXR1cyA9IFJRX0lO
QUNUSVZFOw0KLS0tIDEyMDcsMTIyOCAtLS0tDQogICAqDQogICAqIE5vdGVz
OiAgICAgICBUaGUgY29tbWFuZCBibG9jayBjYW4gbm8gbG9uZ2VyIGJlIHVz
ZWQgYnkgdGhlIGNhbGxlciBvbmNlDQogICAqICAgICAgICAgICAgICB0aGlz
IGZ1bmNpdG9uIGlzIGNhbGxlZC4gIFRoaXMgaXMgaW4gZWZmZWN0IHRoZSBp
bnZlcnNlDQohICAqICAgICAgICAgICAgICBvZiBzY3NpX2FsbG9jYXRlX2Rl
dmljZS4gIE5vdGUgdGhhdCB3ZSBhbHNvIG11c3QgcGVyZm9ybQ0KISAgKiAg
ICAgICAgICAgICAgYSBjb3VwbGUgb2YgYWRkaXRpb25hbCB0YXNrcy4gIFdl
IG11c3QgZmlyc3Qgd2FrZSB1cCBhbnkNCiEgICogICAgICAgICAgICAgIHBy
b2Nlc3NlcyB0aGF0IG1pZ2h0IGhhdmUgYmxvY2tlZCB3YWl0aW5nIGZvciBh
IGNvbW1hbmQNCiEgICogICAgICAgICAgICAgIGJsb2NrLCBhbmQgc2Vjb25k
bHkgd2UgbXVzdCBoaXQgdGhlIHF1ZXVlIGhhbmRsZXIgZnVuY3Rpb24NCiEg
ICogICAgICAgICAgICAgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZXZpY2Ug
aXMgYnVzeS4NCiEgICoNCiEgICogICAgICAgICAgICAgIFRoZSBpZGVhIGlz
IHRoYXQgYSBsb3Qgb2YgdGhlIG1pZC1sZXZlbCBpbnRlcm5hbHMgZ3Vuaw0K
ISAgKiAgICAgICAgICAgICAgZ2V0cyBoaWRkZW4gaW4gdGhpcyBmdW5jdGlv
bi4gIFVwcGVyIGxldmVsIGRyaXZlcnMgZG9uJ3QNCiEgICogICAgICAgICAg
ICAgIGhhdmUgYW55IGNoaWNrZW5zIHRvIHdhdmUgaW4gdGhlIGFpciB0byBn
ZXQgdGhpbmdzIHRvDQohICAqICAgICAgICAgICAgICB3b3JrIHJlbGlhYmx5
Lg0KICAgKi8NCiAgdm9pZCBzY3NpX3JlbGVhc2VfY29tbWFuZChTY3NpX0Nt
bmQgKiBTQ3BudCkNCiAgew0KICAJdW5zaWduZWQgbG9uZyBmbGFnczsNCisg
ICAgICAgICBTY3NpX0RldmljZSAqIFNEcG50Ow0KKyANCiAgCXNwaW5fbG9j
a19pcnFzYXZlKCZkZXZpY2VfcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogIA0K
ICAJU0NwbnQtPnJlcXVlc3QucnFfc3RhdHVzID0gUlFfSU5BQ1RJVkU7DQoq
KioqKioqKioqKioqKioNCioqKiAxMjA0LDEyMTYgKioqKg0KICAJCQkgICAg
IGF0b21pY19yZWFkKCZTQ3BudC0+aG9zdC0+ZWhfd2FpdC0+Y291bnQpKSk7
DQogIAkJdXAoU0NwbnQtPmhvc3QtPmVoX3dhaXQpOw0KICAJfQ0KICAJc3Bp
bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX3JlcXVlc3RfbG9jaywgZmxh
Z3MpOw0KICB9DQogIA0KICAvKg0KISAgKiBUaGlzIGlzIGlubGluZSBiZWNh
dXNlIHdlIGhhdmUgc3RhY2sgcHJvYmxlbWVzIGlmIHdlIHJlY3Vyc2UgdG8g
ZGVlcGx5Lg0KICAgKi8NCi0gDQogIGludCBzY3NpX2Rpc3BhdGNoX2NtZChT
Y3NpX0NtbmQgKiBTQ3BudCkNCiAgew0KICAjaWZkZWYgREVCVUdfREVMQVkN
Ci0tLSAxMjUwLDEyOTAgLS0tLQ0KICAJCQkgICAgIGF0b21pY19yZWFkKCZT
Q3BudC0+aG9zdC0+ZWhfd2FpdC0+Y291bnQpKSk7DQogIAkJdXAoU0NwbnQt
Pmhvc3QtPmVoX3dhaXQpOw0KICAJfQ0KKyANCisgICAgICAgICBTRHBudCA9
IFNDcG50LT5kZXZpY2U7DQorIA0KICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSgmZGV2aWNlX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KKyANCisgICAgICAg
ICAvKg0KKyAgICAgICAgICAqIFdha2UgdXAgYW55b25lIHdhaXRpbmcgZm9y
IHRoaXMgZGV2aWNlLiAgRG8gdGhpcyBhZnRlciB3ZQ0KKyAgICAgICAgICAq
IGhhdmUgcmVsZWFzZWQgdGhlIGxvY2ssIGFzIHRoZXkgd2lsbCBuZWVkIGl0
IGFzIHNvb24gYXMNCisgICAgICAgICAgKiB0aGV5IHdha2UgdXAuICANCisg
ICAgICAgICAgKi8NCisgCXdha2VfdXAoJlNEcG50LT5zY3BudF93YWl0KTsN
CisgDQorICAgICAgICAgLyoNCisgICAgICAgICAgKiBGaW5hbGx5LCBoaXQg
dGhlIHF1ZXVlIHJlcXVlc3QgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQN
CisgICAgICAgICAgKiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IGJ1c3kgaWYg
dGhlcmUgYXJlIHJlcXVlc3RzIHByZXNlbnQuDQorICAgICAgICAgICogVGhp
cyB3b24ndCBibG9jayAtIGlmIHRoZSBkZXZpY2UgY2Fubm90IHRha2UgYW55
IG1vcmUsIGxpZmUNCisgICAgICAgICAgKiB3aWxsIGdvIG9uLiAgDQorICAg
ICAgICAgICovDQorICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgcmVx
dWVzdF9xdWV1ZV90ICpxOw0KKyANCisgICAgICAgICAgICAgICAgIHEgPSAm
U0RwbnQtPnJlcXVlc3RfcXVldWU7DQorICAgICAgICAgICAgICAgICBzY3Np
X3F1ZXVlX25leHRfcmVxdWVzdChxLCBOVUxMKTsgICAgICAgICAgICAgICAg
DQorICAgICAgICAgfQ0KICB9DQogIA0KICAvKg0KISAgKiBGdW5jdGlvbjog
ICAgc2NzaV9kaXNwYXRjaF9jb21tYW5kDQohICAqDQohICAqIFB1cnBvc2U6
ICAgICBEaXNwYXRjaCBhIGNvbW1hbmQgdG8gdGhlIGxvdy1sZXZlbCBkcml2
ZXIuDQohICAqDQohICAqIEFyZ3VtZW50czogICBTQ3BudCAtIGNvbW1hbmQg
YmxvY2sgd2UgYXJlIGRpc3BhdGNoaW5nLg0KISAgKg0KISAgKiBOb3RlczoN
CiAgICovDQogIGludCBzY3NpX2Rpc3BhdGNoX2NtZChTY3NpX0NtbmQgKiBT
Q3BudCkNCiAgew0KICAjaWZkZWYgREVCVUdfREVMQVkNCioqKioqKioqKioq
KioqKg0KKioqIDE5MjEsMTkyOCAqKioqDQogIAkJU0NwbnQtPmx1biA9IFNE
cG50LT5sdW47DQogIAkJU0NwbnQtPmNoYW5uZWwgPSBTRHBudC0+Y2hhbm5l
bDsNCiAgCQlTQ3BudC0+cmVxdWVzdC5ycV9zdGF0dXMgPSBSUV9JTkFDVElW
RTsNCi0gCQlTQ3BudC0+aG9zdF93YWl0ID0gRkFMU0U7DQotIAkJU0NwbnQt
PmRldmljZV93YWl0ID0gRkFMU0U7DQogIAkJU0NwbnQtPnVzZV9zZyA9IDA7
DQogIAkJU0NwbnQtPm9sZF91c2Vfc2cgPSAwOw0KICAJCVNDcG50LT5vbGRf
Y21kX2xlbiA9IDA7DQotLS0gMTk5NSwyMDAwIC0tLS0NCioqKioqKioqKioq
KioqKg0KKioqIDI4ODUsMjg5MSAqKioqDQogIAkJCURFQ0xBUkVfTVVURVhf
TE9DS0VEKHNlbSk7DQogIA0KICAJCQlzaHBudC0+ZWhfbm90aWZ5ID0gJnNl
bTsNCiEgCQkJc2VuZF9zaWcoU0lHS0lMTCwgc2hwbnQtPmVoYW5kbGVyLCAx
KTsNCiAgCQkJZG93bigmc2VtKTsNCiAgCQkJc2hwbnQtPmVoX25vdGlmeSA9
IE5VTEw7DQogIAkJfQ0KLS0tIDI5NTcsMjk2MyAtLS0tDQogIAkJCURFQ0xB
UkVfTVVURVhfTE9DS0VEKHNlbSk7DQogIA0KICAJCQlzaHBudC0+ZWhfbm90
aWZ5ID0gJnNlbTsNCiEgCQkJc2VuZF9zaWcoU0lHSFVQLCBzaHBudC0+ZWhh
bmRsZXIsIDEpOw0KICAJCQlkb3duKCZzZW0pOw0KICAJCQlzaHBudC0+ZWhf
bm90aWZ5ID0gTlVMTDsNCiAgCQl9DQpkaWZmIC1jIC1yIC4uL2xpbnV4L2Ry
aXZlcnMvc2NzaS9zY3NpLmggLi9kcml2ZXJzL3Njc2kvc2NzaS5oDQoqKiog
Li4vbGludXgvZHJpdmVycy9zY3NpL3Njc2kuaAlUdWUgRGVjIDE0IDIwOjAz
OjUyIDE5OTkNCi0tLSAuL2RyaXZlcnMvc2NzaS9zY3NpLmgJV2VkIERlYyAx
NSAyMTozMjozMSAxOTk5DQoqKioqKioqKioqKioqKioNCioqKiA0MDcsNDEy
ICoqKioNCi0tLSA0MDcsNDEzIC0tLS0NCiAgICovDQogIGV4dGVybiB2b2lk
IGluaXRpYWxpemVfbWVyZ2VfZm4oU2NzaV9EZXZpY2UgKiBTRHBudCk7DQog
IGV4dGVybiB2b2lkIHNjc2lfcmVxdWVzdF9mbihyZXF1ZXN0X3F1ZXVlX3Qg
KiBxKTsNCisgZXh0ZXJuIHZvaWQgc2NzaV9xdWV1ZV9uZXh0X3JlcXVlc3Qo
cmVxdWVzdF9xdWV1ZV90ICogcSwgU2NzaV9DbW5kICogU0NwbnQpOw0KICAN
CiAgZXh0ZXJuIGludCBzY3NpX2luc2VydF9zcGVjaWFsX2NtZChTY3NpX0Nt
bmQgKiBTQ3BudCwgaW50KTsNCiAgZXh0ZXJuIGludCBzY3NpX2Rpc3BhdGNo
X2NtZChTY3NpX0NtbmQgKiBTQ3BudCk7DQoqKioqKioqKioqKioqKioNCioq
KiA0MjcsNDMzICoqKioNCiAgCQkJICB2b2lkICgqZG9uZSkgKHN0cnVjdCBz
Y3NpX2NtbmQgKiksDQogIAkJCSAgaW50IHRpbWVvdXQsIGludCByZXRyaWVz
KTsNCiAgDQohIGV4dGVybiBTY3NpX0NtbmQgKnNjc2lfYWxsb2NhdGVfZGV2
aWNlKFNjc2lfRGV2aWNlICosIGludCk7DQogIA0KICBleHRlcm4gU2NzaV9D
bW5kICpzY3NpX3JlcXVlc3RfcXVldWVhYmxlKHN0cnVjdCByZXF1ZXN0ICos
IFNjc2lfRGV2aWNlICopOw0KICANCi0tLSA0MjgsNDM0IC0tLS0NCiAgCQkJ
ICB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKiksDQogIAkJCSAg
aW50IHRpbWVvdXQsIGludCByZXRyaWVzKTsNCiAgDQohIGV4dGVybiBTY3Np
X0NtbmQgKnNjc2lfYWxsb2NhdGVfZGV2aWNlKFNjc2lfRGV2aWNlICosIGlu
dCwgaW50KTsNCiAgDQogIGV4dGVybiBTY3NpX0NtbmQgKnNjc2lfcmVxdWVz
dF9xdWV1ZWFibGUoc3RydWN0IHJlcXVlc3QgKiwgU2NzaV9EZXZpY2UgKik7
DQogIA0KKioqKioqKioqKioqKioqDQoqKiogNDU2LDQ2MiAqKioqDQogIAkg
Ki8NCiAgCXN0cnVjdCBzY3NpX2RldmljZSAqbmV4dDsJLyogVXNlZCBmb3Ig
bGlua2VkIGxpc3QgKi8NCiAgCXN0cnVjdCBzY3NpX2RldmljZSAqcHJldjsJ
LyogVXNlZCBmb3IgbGlua2VkIGxpc3QgKi8NCiEgCXdhaXRfcXVldWVfaGVh
ZF90IGRldmljZV93YWl0OwkvKiBVc2VkIHRvIHdhaXQgaWYNCiAgCQkJCQkg
ICBkZXZpY2UgaXMgYnVzeSAqLw0KICAJc3RydWN0IFNjc2lfSG9zdCAqaG9z
dDsNCiAgCXJlcXVlc3RfcXVldWVfdCByZXF1ZXN0X3F1ZXVlOw0KLS0tIDQ1
Nyw0NjMgLS0tLQ0KICAJICovDQogIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKm5l
eHQ7CS8qIFVzZWQgZm9yIGxpbmtlZCBsaXN0ICovDQogIAlzdHJ1Y3Qgc2Nz
aV9kZXZpY2UgKnByZXY7CS8qIFVzZWQgZm9yIGxpbmtlZCBsaXN0ICovDQoh
IAl3YWl0X3F1ZXVlX2hlYWRfdCAgIHNjcG50X3dhaXQ7CS8qIFVzZWQgdG8g
d2FpdCBpZg0KICAJCQkJCSAgIGRldmljZSBpcyBidXN5ICovDQogIAlzdHJ1
Y3QgU2NzaV9Ib3N0ICpob3N0Ow0KICAJcmVxdWVzdF9xdWV1ZV90IHJlcXVl
c3RfcXVldWU7DQoqKioqKioqKioqKioqKioNCioqKiA2MzYsNjUxICoqKioN
CiAgCSAqIHRpbWVvdXQgaGFuZGxlciBpcyBhbHJlYWR5IHJ1bm5pbmcuDQog
IAkgKi8NCiAgCXVuc2lnbmVkIGRvbmVfbGF0ZToxOw0KLSANCi0gCS8qDQot
IAkgKiBUaGVzZSB0d28gZmxhZ3MgYXJlIHVzZWQgdG8gdHJhY2sgY29tbWFu
ZHMgdGhhdCBhcmUgaW4gdGhlDQotIAkgKiBtaWQtbGV2ZWwgcXVldWUuICBU
aGUgaWRlYSBpcyB0aGF0IGEgY29tbWFuZCBjYW4gYmUgdGhlcmUgZm9yDQot
IAkgKiBvbmUgb2YgdHdvIHJlYXNvbnMgLSBlaXRoZXIgdGhlIGhvc3QgaXMg
YnVzeSBvciB0aGUgZGV2aWNlIGlzDQotIAkgKiBidXN5LiAgVGh1cyB3aGVu
IGEgY29tbWFuZCBvbiB0aGUgaG9zdCBmaW5pc2hlcywgd2Ugb25seSB0cnkN
Ci0gCSAqIGFuZCByZXF1ZXVlIGNvbW1hbmRzIHRoYXQgd2UgbWlnaHQgZXhw
ZWN0IHRvIGJlIHF1ZXVlYWJsZS4NCi0gCSAqLw0KLSAJdW5zaWduZWQgaG9z
dF93YWl0OjE7DQotIAl1bnNpZ25lZCBkZXZpY2Vfd2FpdDoxOw0KICANCiAg
CS8qIExvdy1sZXZlbCBkb25lIGZ1bmN0aW9uIC0gY2FuIGJlIHVzZWQgYnkg
bG93LWxldmVsIGRyaXZlciB0byBwb2ludA0KICAJICogICAgICAgIHRvIGNv
bXBsZXRpb24gZnVuY3Rpb24uICBOb3QgdXNlZCBieSBtaWQvdXBwZXIgbGV2
ZWwgY29kZS4gKi8NCi0tLSA2MzcsNjQyIC0tLS0NCmRpZmYgLWMgLXIgLi4v
bGludXgvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyAuL2RyaXZlcnMvc2Nz
aS9zY3NpX2Vycm9yLmMNCioqKiAuLi9saW51eC9kcml2ZXJzL3Njc2kvc2Nz
aV9lcnJvci5jCVR1ZSBEZWMgMTQgMjA6MDM6NTIgMTk5OQ0KLS0tIC4vZHJp
dmVycy9zY3NpL3Njc2lfZXJyb3IuYwlXZWQgRGVjIDE1IDIxOjMyOjMxIDE5
OTkNCioqKioqKioqKioqKioqKg0KKioqIDQwLDQ3ICoqKioNCiAgICogdGhl
IGhvc3QgZHJpdmVycyB0aGF0IHdlIGFyZSB1c2luZyBtYXkgYmUgbG9hZGVk
IGFzIG1vZHVsZXMsIGFuZA0KICAgKiB3aGVuIHdlIHVubG9hZCB0aGVzZSwg
IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgdGhy
ZWFkDQogICAqIGNhbiBiZSBzaHV0IGRvd24uDQogICAqLw0KISAjZGVmaW5l
IFNIVVRET1dOX1NJR1MJKHNpZ21hc2soU0lHS0lMTCl8c2lnbWFzayhTSUdJ
TlQpfHNpZ21hc2soU0lHVEVSTSkpDQogIA0KICAjaWZkZWYgREVCVUcNCiAg
I2RlZmluZSBTRU5TRV9USU1FT1VUIFNDU0lfVElNRU9VVA0KLS0tIDQwLDUz
IC0tLS0NCiAgICogdGhlIGhvc3QgZHJpdmVycyB0aGF0IHdlIGFyZSB1c2lu
ZyBtYXkgYmUgbG9hZGVkIGFzIG1vZHVsZXMsIGFuZA0KICAgKiB3aGVuIHdl
IHVubG9hZCB0aGVzZSwgIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVy
cm9yIGhhbmRsZXIgdGhyZWFkDQogICAqIGNhbiBiZSBzaHV0IGRvd24uDQor
ICAqDQorICAqIE5vdGUgLSB3aGVuIHdlIHVubG9hZCBhIG1vZHVsZSwgd2Ug
c2VuZCBhIFNJR0hVUC4gIFdlIG11c3RuJ3QNCisgICogZW5hYmxlIFNJR1RF
Uk0sIGFzIHRoaXMgaXMgaG93IHRoZSBpbml0IHNodXRzIHRoaW5ncyBkb3du
IHdoZW4geW91DQorICAqIGdvIHRvIHNpbmdsZS11c2VyIG1vZGUuICBGb3Ig
dGhhdCBtYXR0ZXIsIGluaXQgYWxzbyBzZW5kcyBTSUdLSUxMLA0KKyAgKiBz
byB3ZSBtdXN0bid0IGVuYWJsZSB0aGF0IG9uZSBlaXRoZXIuICBXZSB1c2Ug
U0lHSFVQIGluc3RlYWQuICBPdGhlcg0KKyAgKiBvcHRpb25zIHdvdWxkIGJl
IFNJR1BXUiwgSSBzdXBwb3NlLg0KICAgKi8NCiEgI2RlZmluZSBTSFVURE9X
Tl9TSUdTCShzaWdtYXNrKFNJR0hVUCkpDQogIA0KICAjaWZkZWYgREVCVUcN
CiAgI2RlZmluZSBTRU5TRV9USU1FT1VUIFNDU0lfVElNRU9VVA0KZGlmZiAt
YyAtciAuLi9saW51eC9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jIC4vZHJp
dmVycy9zY3NpL3Njc2lfaW9jdGwuYw0KKioqIC4uL2xpbnV4L2RyaXZlcnMv
c2NzaS9zY3NpX2lvY3RsLmMJVHVlIERlYyAxNCAyMDowMjo0OCAxOTk5DQot
LS0gLi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCVdlZCBEZWMgMTUgMjE6
MzI6MzEgMTk5OQ0KKioqKioqKioqKioqKioqDQoqKiogMTExLDExNyAqKioq
DQogIA0KICANCiAgCVNDU0lfTE9HX0lPQ1RMKDEsIHByaW50aygiVHJ5aW5n
IGlvY3RsIHdpdGggc2NzaSBjb21tYW5kICVkXG4iLCBjbWRbMF0pKTsNCiEg
CVNDcG50ID0gc2NzaV9hbGxvY2F0ZV9kZXZpY2UoZGV2LCAxKTsNCiAgCXsN
CiAgCQlERUNMQVJFX01VVEVYX0xPQ0tFRChzZW0pOw0KICAJCVNDcG50LT5y
ZXF1ZXN0LnNlbSA9ICZzZW07DQotLS0gMTExLDEyMiAtLS0tDQogIA0KICAN
CiAgCVNDU0lfTE9HX0lPQ1RMKDEsIHByaW50aygiVHJ5aW5nIGlvY3RsIHdp
dGggc2NzaSBjb21tYW5kICVkXG4iLCBjbWRbMF0pKTsNCiEgCVNDcG50ID0g
c2NzaV9hbGxvY2F0ZV9kZXZpY2UoZGV2LCBUUlVFLCBUUlVFKTsNCiEgICAg
ICAgICBpZiggU0NwbnQgPT0gTlVMTCApDQohICAgICAgICAgew0KISAgICAg
ICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsNCiEgICAgICAgICB9DQohIA0K
ICAJew0KICAJCURFQ0xBUkVfTVVURVhfTE9DS0VEKHNlbSk7DQogIAkJU0Nw
bnQtPnJlcXVlc3Quc2VtID0gJnNlbTsNCioqKioqKioqKioqKioqKg0KKioq
IDE2MywxNzAgKioqKg0KICAJc2NzaV9yZWxlYXNlX2NvbW1hbmQoU0NwbnQp
Ow0KICAJU0NwbnQgPSBOVUxMOw0KICANCi0gDQotIAl3YWtlX3VwKCZTRHBu
dC0+ZGV2aWNlX3dhaXQpOw0KICAJcmV0dXJuIHJlc3VsdDsNCiAgfQ0KICAN
Ci0tLSAxNjgsMTczIC0tLS0NCioqKioqKioqKioqKioqKg0KKioqIDI5Nywz
MDMgKioqKg0KICAjaWZuZGVmIERFQlVHX05PX0NNRA0KICANCiAgDQohIAlT
Q3BudCA9IHNjc2lfYWxsb2NhdGVfZGV2aWNlKGRldiwgMSk7DQogIA0KICAJ
ew0KICAJCURFQ0xBUkVfTVVURVhfTE9DS0VEKHNlbSk7DQotLS0gMzAwLDMx
MCAtLS0tDQogICNpZm5kZWYgREVCVUdfTk9fQ01EDQogIA0KICANCiEgCVND
cG50ID0gc2NzaV9hbGxvY2F0ZV9kZXZpY2UoZGV2LCBUUlVFLCBUUlVFKTsN
CiEgICAgICAgICBpZiggU0NwbnQgPT0gTlVMTCApDQohICAgICAgICAgew0K
ISAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsNCiEgICAgICAgICB9
DQogIA0KICAJew0KICAJCURFQ0xBUkVfTVVURVhfTE9DS0VEKHNlbSk7DQoq
KioqKioqKioqKioqKioNCioqKiAzMjgsMzM0ICoqKioNCiAgCXJlc3VsdCA9
IFNDcG50LT5yZXN1bHQ7DQogIA0KICANCi0gCXdha2VfdXAoJlNDcG50LT5k
ZXZpY2UtPmRldmljZV93YWl0KTsNCiAgCVNEcG50ID0gU0NwbnQtPmRldmlj
ZTsNCiAgCXNjc2lfcmVsZWFzZV9jb21tYW5kKFNDcG50KTsNCiAgCVNDcG50
ID0gTlVMTDsNCi0tLSAzMzUsMzQwIC0tLS0NCmRpZmYgLWMgLXIgLi4vbGlu
dXgvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgLi9kcml2ZXJzL3Njc2kvc2Nz
aV9saWIuYw0KKioqIC4uL2xpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5j
CVR1ZSBEZWMgMTQgMjA6MDM6NTIgMTk5OQ0KLS0tIC4vZHJpdmVycy9zY3Np
L3Njc2lfbGliLmMJV2VkIERlYyAxNSAyMTozMjozMiAxOTk5DQoqKioqKioq
KioqKioqKioNCioqKiA4Nyw5NCAqKioqDQogIAlTQ3BudC0+cmVxdWVzdC5z
cGVjaWFsID0gKHZvaWQgKikgU0NwbnQ7DQogIA0KICAJLyoNCiEgCSAqIEZv
ciB0aGUgbW9tZW50LCB3ZSBpbnNlcnQgYXQgdGhlIGhlYWQgb2YgdGhlIHF1
ZXVlLiAgIFRoaXMgbWF5IHR1cm4NCiEgCSAqIG91dCB0byBiZSBhIGJhZCBp
ZGVhLCBidXQgd2Ugd2lsbCBzZWUgYWJvdXQgdGhhdCB3aGVuIHdlIGdldCB0
aGVyZS4NCiAgCSAqLw0KICAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl
c3RfbG9jaywgZmxhZ3MpOw0KICANCi0tLSA4Nyw5NiAtLS0tDQogIAlTQ3Bu
dC0+cmVxdWVzdC5zcGVjaWFsID0gKHZvaWQgKikgU0NwbnQ7DQogIA0KICAJ
LyoNCiEgCSAqIFdlIGhhdmUgdGhlIG9wdGlvbiBvZiBpbnNlcnRpbmcgdGhl
IGhlYWQgb3IgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlLg0KISAJICogVHlwaWNh
bGx5IHdlIHVzZSB0aGUgdGFpbCBmb3IgbmV3IGlvY3RscyBhbmQgc28gZm9y
dGguICBXZSB1c2UgdGhlDQohIAkgKiBoZWFkIG9mIHRoZSBxdWV1ZSBmb3Ig
dGhpbmdzIGxpa2UgYSBRVUVVRV9GVUxMIG1lc3NhZ2UgZnJvbSBhDQohIAkg
KiBkZXZpY2UsIG9yIGEgaG9zdCB0aGF0IGlzIHVuYWJsZSB0byBhY2NlcHQg
YSBwYXJ0aWN1bGFyIGNvbW1hbmQuDQogIAkgKi8NCiAgCXNwaW5fbG9ja19p
cnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiAgDQoqKioqKioq
KioqKioqKioNCioqKiA5NywxMDQgKioqKg0KICAJCXEtPmN1cnJlbnRfcmVx
dWVzdCA9ICZTQ3BudC0+cmVxdWVzdDsNCiAgCX0gZWxzZSB7DQogIAkJLyoN
CiEgCQkgKiBGSVhNRShlcmljKSAtIHdlIGFsd2F5cyBpbnNlcnQgYXQgdGhl
IHRhaWwgb2YgdGhlIGxpc3QuICBPdGhlcndpc2UNCiEgCQkgKiBpb2N0bCBj
b21tYW5kcyB3b3VsZCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbm9y
bWFsIEkvTy4NCiAgCQkgKi8NCiAgCQlTQ3BudC0+cmVxdWVzdC5uZXh0ID0g
TlVMTDsNCiAgCQlpZiAocS0+Y3VycmVudF9yZXF1ZXN0ID09IE5VTEwpIHsN
Ci0tLSA5OSwxMTAgLS0tLQ0KICAJCXEtPmN1cnJlbnRfcmVxdWVzdCA9ICZT
Q3BudC0+cmVxdWVzdDsNCiAgCX0gZWxzZSB7DQogIAkJLyoNCiEgCQkgKiBG
SVhNRShlcmljKSAtIHdlIGFsd2F5cyBpbnNlcnQgYXQgdGhlIHRhaWwgb2Yg
dGhlDQohIAkJICogbGlzdC4gIE90aGVyd2lzZSBpb2N0bCBjb21tYW5kcyB3
b3VsZCBhbHdheXMgdGFrZQ0KISAJCSAqIHByZWNlZGVuY2Ugb3ZlciBub3Jt
YWwgSS9PLiAgQW4gaW9jdGwgb24gYSBidXN5DQohIAkJICogZGlzayBtaWdo
dCBiZSBkZWxheWVkIGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZQ0KISAJCSAq
IHJlcXVlc3QgbWlnaHQgbm90IGZsb2F0IGhpZ2ggZW5vdWdoIGluIHRoZSBx
dWV1ZQ0KISAJCSAqIHRvIGJlIHNjaGVkdWxlZC4NCiAgCQkgKi8NCiAgCQlT
Q3BudC0+cmVxdWVzdC5uZXh0ID0gTlVMTDsNCiAgCQlpZiAocS0+Y3VycmVu
dF9yZXF1ZXN0ID09IE5VTEwpIHsNCioqKioqKioqKioqKioqKg0KKioqIDEx
NiwxMjQgKioqKg0KICAJfQ0KICANCiAgCS8qDQohIAkgKiBOb3cgaGl0IHRo
ZSByZXF1ZXVlIGZ1bmN0aW9uIGZvciB0aGUgcXVldWUuICAgSWYgdGhlIGhv
c3QgaXMgYWxyZWFkeQ0KISAJICogYnVzeSwgc28gYmUgaXQgLSB3ZSBoYXZl
IG5vdGhpbmcgc3BlY2lhbCB0byBkby4gICBJZiB0aGUgaG9zdCBjYW4gcXVl
dWUNCiEgCSAqIGl0LCB0aGVuIHNlbmQgaXQgb2ZmLg0KICAJICovDQogIAlx
LT5yZXF1ZXN0X2ZuKHEpOw0KICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm
aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQotLS0gMTIyLDEzMCAtLS0tDQog
IAl9DQogIA0KICAJLyoNCiEgCSAqIE5vdyBoaXQgdGhlIHJlcXVldWUgZnVu
Y3Rpb24gZm9yIHRoZSBxdWV1ZS4gIElmIHRoZSBob3N0IGlzDQohIAkgKiBh
bHJlYWR5IGJ1c3ksIHNvIGJlIGl0IC0gd2UgaGF2ZSBub3RoaW5nIHNwZWNp
YWwgdG8gZG8uICBJZg0KISAJICogdGhlIGhvc3QgY2FuIHF1ZXVlIGl0LCB0
aGVuIHNlbmQgaXQgb2ZmLiAgDQogIAkgKi8NCiAgCXEtPnJlcXVlc3RfZm4o
cSk7DQogIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xv
Y2ssIGZsYWdzKTsNCioqKioqKioqKioqKioqKg0KKioqIDIxOSwyMzEgKioq
Kg0KICAJCXEtPmN1cnJlbnRfcmVxdWVzdCA9ICZTQ3BudC0+cmVxdWVzdDsN
CiAgCQlTQ3BudC0+cmVxdWVzdC5zcGVjaWFsID0gKHZvaWQgKikgU0NwbnQ7
DQogIAl9DQogIAkvKg0KICAJICogSnVzdCBoaXQgdGhlIHJlcXVldWUgZnVu
Y3Rpb24gZm9yIHRoZSBxdWV1ZS4NCi0gCSAqIEZJWE1FIC0gaWYgdGhpcyBx
dWV1ZSBpcyBlbXB0eSwgY2hlY2sgdG8gc2VlIGlmIHdlIG1pZ2h0IG5lZWQg
dG8NCi0gCSAqIHN0YXJ0IHJlcXVlc3RzIGZvciBvdGhlciBkZXZpY2VzIGF0
dGFjaGVkIHRvIHRoZSBzYW1lIGhvc3QuDQogIAkgKi8NCiAgCXEtPnJlcXVl
c3RfZm4ocSk7DQogIA0KICAJLyoNCiAgCSAqIE5vdyBzZWUgd2hldGhlciB0
aGVyZSBhcmUgb3RoZXIgZGV2aWNlcyBvbiB0aGUgYnVzIHdoaWNoDQogIAkg
KiBtaWdodCBiZSBzdGFydmVkLiAgSWYgc28sIGhpdCB0aGUgcmVxdWVzdCBm
dW5jdGlvbi4gIElmIHdlDQotLS0gMjI1LDI2NSAtLS0tDQogIAkJcS0+Y3Vy
cmVudF9yZXF1ZXN0ID0gJlNDcG50LT5yZXF1ZXN0Ow0KICAJCVNDcG50LT5y
ZXF1ZXN0LnNwZWNpYWwgPSAodm9pZCAqKSBTQ3BudDsNCiAgCX0NCisgDQog
IAkvKg0KICAJICogSnVzdCBoaXQgdGhlIHJlcXVldWUgZnVuY3Rpb24gZm9y
IHRoZSBxdWV1ZS4NCiAgCSAqLw0KICAJcS0+cmVxdWVzdF9mbihxKTsNCiAg
DQorIAlTRHBudCA9IChTY3NpX0RldmljZSAqKSBxLT5xdWV1ZWRhdGE7DQor
IAlTSHBudCA9IFNEcG50LT5ob3N0Ow0KKyANCisgCS8qDQorIAkgKiBJZiB0
aGlzIGlzIGEgc2luZ2xlLWx1biBkZXZpY2UsIGFuZCB3ZSBhcmUgY3VycmVu
dGx5IGZpbmlzaGVkDQorIAkgKiB3aXRoIHRoaXMgZGV2aWNlLCB0aGVuIHNl
ZSBpZiB3ZSBuZWVkIHRvIGdldCBhbm90aGVyIGRldmljZQ0KKyAJICogc3Rh
cnRlZC4gIEZJWE1FKGVyaWMpIC0gaWYgdGhpcyBmdW5jdGlvbiBnZXRzIHRv
byBjbHV0dGVyZWQNCisgCSAqIHdpdGggc3BlY2lhbCBjYXNlIGNvZGUsIHRo
ZW4gc3BpbiBvZmYgc2VwYXJhdGUgdmVyc2lvbnMgYW5kDQorIAkgKiB1c2Ug
ZnVuY3Rpb24gcG9pbnRlcnMgdG8gcGljayB0aGUgcmlnaHQgb25lLg0KKyAJ
ICovDQorIAlpZiAoU0RwbnQtPnNpbmdsZV9sdW4NCisgCSAgICAmJiBxLT5j
dXJyZW50X3JlcXVlc3QgPT0gTlVMTA0KKyAJICAgICYmIFNEcG50LT5kZXZp
Y2VfYnVzeSA9PSAwKSB7DQorIAkJcmVxdWVzdF9xdWV1ZV90ICpxOw0KKyAN
CisgCQlmb3IgKFNEcG50ID0gU0hwbnQtPmhvc3RfcXVldWU7DQorIAkJICAg
ICBTRHBudDsNCisgCQkgICAgIFNEcG50ID0gU0RwbnQtPm5leHQpIHsNCisg
CQkJaWYgKCgoU0hwbnQtPmNhbl9xdWV1ZSA+IDApDQorIAkJCSAgICAgJiYg
KFNIcG50LT5ob3N0X2J1c3kgPj0gU0hwbnQtPmNhbl9xdWV1ZSkpDQorIAkJ
CSAgICB8fCAoU0hwbnQtPmhvc3RfYmxvY2tlZCkNCisgCQkJICAgIHx8IChT
RHBudC0+ZGV2aWNlX2Jsb2NrZWQpKSB7DQorIAkJCQlicmVhazsNCisgCQkJ
fQ0KKyAJCQlxID0gJlNEcG50LT5yZXF1ZXN0X3F1ZXVlOw0KKyAJCQlxLT5y
ZXF1ZXN0X2ZuKHEpOw0KKyAJCX0NCisgCX0NCisgDQogIAkvKg0KICAJICog
Tm93IHNlZSB3aGV0aGVyIHRoZXJlIGFyZSBvdGhlciBkZXZpY2VzIG9uIHRo
ZSBidXMgd2hpY2gNCiAgCSAqIG1pZ2h0IGJlIHN0YXJ2ZWQuICBJZiBzbywg
aGl0IHRoZSByZXF1ZXN0IGZ1bmN0aW9uLiAgSWYgd2UNCioqKioqKioqKioq
KioqKg0KKioqIDIzNCwyNDEgKioqKg0KICAJICogZmxhZyBhcyB0aGUgcXVl
dWUgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGxvY2sgYW5kIHRodXMgc29tZQ0K
ICAJICogb3RoZXIgZGV2aWNlIG1pZ2h0IGhhdmUgYmVjb21lIHN0YXJ2ZWQg
YWxvbmcgdGhlIHdheS4NCiAgCSAqLw0KLSAJU0RwbnQgPSAoU2NzaV9EZXZp
Y2UgKikgcS0+cXVldWVkYXRhOw0KLSAJU0hwbnQgPSBTRHBudC0+aG9zdDsN
CiAgCWFsbF9jbGVhciA9IDE7DQogIAlpZiAoU0hwbnQtPnNvbWVfZGV2aWNl
X3N0YXJ2ZWQpIHsNCiAgCQlmb3IgKFNEcG50ID0gU0hwbnQtPmhvc3RfcXVl
dWU7IFNEcG50OyBTRHBudCA9IFNEcG50LT5uZXh0KSB7DQotLS0gMjY4LDI3
MyAtLS0tDQoqKioqKioqKioqKioqKioNCioqKiAyNzQsMjc5ICoqKioNCi0t
LSAzMDYsMzE0IC0tLS0NCiAgICoNCiAgICogTm90ZXM6ICAgICAgIFRoaXMg
aXMgY2FsbGVkIGZvciBibG9jayBkZXZpY2UgcmVxdWVzdHMgaW4gb3JkZXIg
dG8NCiAgICogICAgICAgICAgICAgIG1hcmsgc29tZSBudW1iZXIgb2Ygc2Vj
dG9ycyBhcyBjb21wbGV0ZS4NCisgICogDQorICAqCQlXZSBhcmUgZ3VhcmFu
dGVlaW5nIHRoYXQgdGhlIHJlcXVlc3QgcXVldWUgd2lsbCBiZSBnb29zZWQN
CisgICoJCWF0IHNvbWUgcG9pbnQgZHVyaW5nIHRoaXMgY2FsbC4NCiAgICov
DQogIFNjc2lfQ21uZCAqc2NzaV9lbmRfcmVxdWVzdChTY3NpX0NtbmQgKiBT
Q3BudCwgaW50IHVwdG9kYXRlLCBpbnQgc2VjdG9ycykNCiAgew0KKioqKioq
KioqKioqKioqDQoqKiogMzExLDMxNyAqKioqDQotLS0gMzQ2LDM2MSAtLS0t
DQogIAkgKiB0byBxdWV1ZSB0aGUgcmVtYWluZGVyIG9mIHRoZW0uDQogIAkg
Ki8NCiAgCWlmIChyZXEtPmJoKSB7DQorICAgICAgICAgICAgICAgICByZXF1
ZXN0X3F1ZXVlX3QgKnE7DQorIA0KKyAgICAgICAgICAgICAgICAgcSA9ICZT
Q3BudC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOw0KKyANCiAgCQlyZXEtPmJ1
ZmZlciA9IGJoLT5iX2RhdGE7DQorIAkJLyoNCisgCQkgKiBCbGVhaC4gIExl
ZnRvdmVycyBhZ2Fpbi4gIFN0aWNrIHRoZSBsZWZ0b3ZlcnMgaW4NCisgCQkg
KiB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLCBhbmQgZ29vc2UgdGhlIHF1ZXVl
IGFnYWluLg0KKyAJCSAqLw0KKyAJCXNjc2lfcXVldWVfbmV4dF9yZXF1ZXN0
KHEsIFNDcG50KTsNCiAgCQlyZXR1cm4gU0NwbnQ7DQogIAl9DQogIAkvKg0K
KioqKioqKioqKioqKioqDQoqKiogMzIzLDMyOCAqKioqDQotLS0gMzY3LDM3
NyAtLS0tDQogIAkJdXAocmVxLT5zZW0pOw0KICAJfQ0KICAJYWRkX2Jsa2Rl
dl9yYW5kb21uZXNzKE1BSk9SKHJlcS0+cnFfZGV2KSk7DQorIA0KKyAJLyoN
CisgCSAqIFRoaXMgd2lsbCBnb29zZSB0aGUgcXVldWUgcmVxdWVzdCBmdW5j
dGlvbiBhdCB0aGUgZW5kLCBzbyB3ZSBkb24ndA0KKyAJICogbmVlZCB0byB3
b3JyeSBhYm91dCBsYXVuY2hpbmcgYW5vdGhlciBjb21tYW5kLg0KKyAJICov
DQogIAlzY3NpX3JlbGVhc2VfY29tbWFuZChTQ3BudCk7DQogIAlyZXR1cm4g
TlVMTDsNCiAgfQ0KKioqKioqKioqKioqKioqDQoqKiogMzUxLDM1NiAqKioq
DQotLS0gNDAwLDQxOCAtLS0tDQogIAlpbnQgdGhpc19jb3VudCA9IFNDcG50
LT5idWZmbGVuID4+IDk7DQogIAlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSAmU0Nw
bnQtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsNCiAgDQorIAkvKg0KKyAJICog
V2UgbXVzdCBkbyBvbmUgb2Ygc2V2ZXJhbCB0aGluZ3MgaGVyZToNCisgCSAq
DQorIAkgKglDYWxsIHNjc2lfZW5kX3JlcXVlc3QuICBUaGlzIHdpbGwgZmlu
aXNoIG9mZiB0aGUgc3BlY2lmaWVkDQorIAkgKgludW1iZXIgb2Ygc2VjdG9y
cy4gIElmIHdlIGFyZSBkb25lLCB0aGUgY29tbWFuZCBibG9jayB3aWxsDQor
IAkgKgliZSByZWxlYXNlZCwgYW5kIHRoZSBxdWV1ZSBmdW5jdGlvbiB3aWxs
IGJlIGdvb3NlZC4gIElmIHdlDQorIAkgKglhcmUgbm90IGRvbmUsIHRoZW4g
c2NzaV9lbmRfcmVxdWVzdCB3aWxsIGRpcmVjdGx5IGdvb3NlDQorIAkgKgl0
aGUgdGhlIHF1ZXVlLg0KKyAJICoNCisgCSAqCVdlIGNhbiBqdXN0IHVzZSBz
Y3NpX3F1ZXVlX25leHRfcmVxdWVzdCgpIGhlcmUuICBUaGlzDQorIAkgKgl3
b3VsZCBiZSB1c2VkIGlmIHdlIGp1c3Qgd2FudGVkIHRvIHJldHJ5LCBmb3Ig
ZXhhbXBsZS4NCisgCSAqDQorIAkgKi8NCiAgCUFTU0VSVF9MT0NLKCZpb19y
ZXF1ZXN0X2xvY2ssIDApOw0KICANCiAgCS8qDQoqKioqKioqKioqKioqKioN
CioqKiA0MTcsNDIzICoqKioNCiAgCQkgKiByZXN0IG9mIHRoZSBjb21tYW5k
LCBvciBzdGFydCBhIG5ldyBvbmUuDQogIAkJICovDQogIAkJaWYgKHJlc3Vs
dCA9PSAwKSB7DQotIAkJCXNjc2lfcXVldWVfbmV4dF9yZXF1ZXN0KHEsIFND
cG50KTsNCiAgCQkJcmV0dXJuOw0KICAJCX0NCiAgCX0NCi0tLSA0NzksNDg0
IC0tLS0NCioqKioqKioqKioqKioqKg0KKioqIDQ0Niw0NTggKioqKg0KICAJ
CQkJICovDQogIAkJCQlTQ3BudC0+ZGV2aWNlLT5jaGFuZ2VkID0gMTsNCiAg
CQkJCVNDcG50ID0gc2NzaV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgdGhpc19j
b3VudCk7DQotIAkJCQlzY3NpX3F1ZXVlX25leHRfcmVxdWVzdChxLCBTQ3Bu
dCk7DQogIAkJCQlyZXR1cm47DQogIAkJCX0gZWxzZSB7DQogIAkJCQkvKg0K
ISAJCQkJICogTXVzdCBoYXZlIGJlZW4gYSBwb3dlciBnbGl0Y2gsIG9yIGEg
YnVzIHJlc2V0Lg0KISAJCQkJICogQ291bGQgbm90IGhhdmUgYmVlbiBhIG1l
ZGlhIGNoYW5nZSwgc28gd2UganVzdCByZXRyeQ0KISAJCQkJICogdGhlIHJl
cXVlc3QgYW5kIHNlZSB3aGF0IGhhcHBlbnMuDQogIAkJCQkgKi8NCiAgCQkJ
CXNjc2lfcXVldWVfbmV4dF9yZXF1ZXN0KHEsIFNDcG50KTsNCiAgCQkJCXJl
dHVybjsNCi0tLSA1MDcsNTE5IC0tLS0NCiAgCQkJCSAqLw0KICAJCQkJU0Nw
bnQtPmRldmljZS0+Y2hhbmdlZCA9IDE7DQogIAkJCQlTQ3BudCA9IHNjc2lf
ZW5kX3JlcXVlc3QoU0NwbnQsIDAsIHRoaXNfY291bnQpOw0KICAJCQkJcmV0
dXJuOw0KICAJCQl9IGVsc2Ugew0KICAJCQkJLyoNCiEgCQkJCSAqIE11c3Qg
aGF2ZSBiZWVuIGEgcG93ZXIgZ2xpdGNoLCBvciBhDQohIAkJCQkgKiBidXMg
cmVzZXQuICBDb3VsZCBub3QgaGF2ZSBiZWVuIGENCiEgCQkJCSAqIG1lZGlh
IGNoYW5nZSwgc28gd2UganVzdCByZXRyeSB0aGUNCiEgCQkJCSAqIHJlcXVl
c3QgYW5kIHNlZSB3aGF0IGhhcHBlbnMuICANCiAgCQkJCSAqLw0KICAJCQkJ
c2NzaV9xdWV1ZV9uZXh0X3JlcXVlc3QocSwgU0NwbnQpOw0KICAJCQkJcmV0
dXJuOw0KKioqKioqKioqKioqKioqDQoqKiogNDY5LDQ3OSAqKioqDQogIAkJ
Y2FzZSBJTExFR0FMX1JFUVVFU1Q6DQogIAkJCWlmIChTQ3BudC0+ZGV2aWNl
LT50ZW4pIHsNCiAgCQkJCVNDcG50LT5kZXZpY2UtPnRlbiA9IDA7DQogIAkJ
CQlzY3NpX3F1ZXVlX25leHRfcmVxdWVzdChxLCBTQ3BudCk7DQogIAkJCQly
ZXN1bHQgPSAwOw0KICAJCQl9IGVsc2Ugew0KICAJCQkJU0NwbnQgPSBzY3Np
X2VuZF9yZXF1ZXN0KFNDcG50LCAwLCB0aGlzX2NvdW50KTsNCi0gCQkJCXNj
c2lfcXVldWVfbmV4dF9yZXF1ZXN0KHEsIFNDcG50KTsNCiAgCQkJCXJldHVy
bjsNCiAgCQkJfQ0KICAJCQlicmVhazsNCi0tLSA1MzAsNTQzIC0tLS0NCiAg
CQljYXNlIElMTEVHQUxfUkVRVUVTVDoNCiAgCQkJaWYgKFNDcG50LT5kZXZp
Y2UtPnRlbikgew0KICAJCQkJU0NwbnQtPmRldmljZS0+dGVuID0gMDsNCisg
CQkJCS8qDQorIAkJCQkgKiBUaGlzIHdpbGwgY2F1c2UgYSByZXRyeSB3aXRo
IGEgNi1ieXRlDQorIAkJCQkgKiBjb21tYW5kLg0KKyAJCQkJICovDQogIAkJ
CQlzY3NpX3F1ZXVlX25leHRfcmVxdWVzdChxLCBTQ3BudCk7DQogIAkJCQly
ZXN1bHQgPSAwOw0KICAJCQl9IGVsc2Ugew0KICAJCQkJU0NwbnQgPSBzY3Np
X2VuZF9yZXF1ZXN0KFNDcG50LCAwLCB0aGlzX2NvdW50KTsNCiAgCQkJCXJl
dHVybjsNCiAgCQkJfQ0KICAJCQlicmVhazsNCioqKioqKioqKioqKioqKg0K
KioqIDQ4MSw0ODcgKioqKg0KICAJCQlwcmludGsoS0VSTl9JTkZPICJEZXZp
Y2UgJXggbm90IHJlYWR5LlxuIiwNCiAgCQkJICAgICAgIFNDcG50LT5yZXF1
ZXN0LnJxX2Rldik7DQogIAkJCVNDcG50ID0gc2NzaV9lbmRfcmVxdWVzdChT
Q3BudCwgMCwgdGhpc19jb3VudCk7DQotIAkJCXNjc2lfcXVldWVfbmV4dF9y
ZXF1ZXN0KHEsIFNDcG50KTsNCiAgCQkJcmV0dXJuOw0KICAJCQlicmVhazsN
CiAgCQljYXNlIE1FRElVTV9FUlJPUjoNCi0tLSA1NDUsNTUwIC0tLS0NCioq
KioqKioqKioqKioqKg0KKioqIDQ5Miw0OTggKioqKg0KICAJCQlwcmludF9j
b21tYW5kKFNDcG50LT5jbW5kKTsNCiAgCQkJcHJpbnRfc2Vuc2UoInNkIiwg
U0NwbnQpOw0KICAJCQlTQ3BudCA9IHNjc2lfZW5kX3JlcXVlc3QoU0NwbnQs
IDAsIGJsb2NrX3NlY3RvcnMpOw0KLSAJCQlzY3NpX3F1ZXVlX25leHRfcmVx
dWVzdChxLCBTQ3BudCk7DQogIAkJCXJldHVybjsNCiAgCQlkZWZhdWx0Og0K
ICAJCQlicmVhazsNCi0tLSA1NTUsNTYwIC0tLS0NCioqKioqKioqKioqKioq
Kg0KKioqIDUwOCw1MTQgKioqKg0KICAJCWlmIChkcml2ZXJfYnl0ZShyZXN1
bHQpICYgRFJJVkVSX1NFTlNFKQ0KICAJCQlwcmludF9zZW5zZSgic2QiLCBT
Q3BudCk7DQogIAkJU0NwbnQgPSBzY3NpX2VuZF9yZXF1ZXN0KFNDcG50LCAw
LCBTQ3BudC0+cmVxdWVzdC5jdXJyZW50X25yX3NlY3RvcnMpOw0KLSAJCXNj
c2lfcXVldWVfbmV4dF9yZXF1ZXN0KHEsIFNDcG50KTsNCiAgCQlyZXR1cm47
DQogIAl9DQogIH0NCi0tLSA1NzAsNTc1IC0tLS0NCioqKioqKioqKioqKioq
Kg0KKioqIDYwMyw2MDkgKioqKg0KICAJICovDQogIAl3aGlsZSAoMSA9PSAx
KSB7DQogIAkJLyoNCiEgCQkgKiBJZiB0aGUgaG9zdCBjYW5ub3QgYWNjZXB0
IGFub3RoZXIgcmVxdWVzdCwgdGhlbiBxdWl0Lg0KICAJCSAqLw0KICAJCWlm
IChTRHBudC0+ZGV2aWNlX2Jsb2NrZWQpIHsNCiAgCQkJYnJlYWs7DQotLS0g
NjY0LDY3MCAtLS0tDQogIAkgKi8NCiAgCXdoaWxlICgxID09IDEpIHsNCiAg
CQkvKg0KISAJCSAqIElmIHRoZSBkZXZpY2UgY2Fubm90IGFjY2VwdCBhbm90
aGVyIHJlcXVlc3QsIHRoZW4gcXVpdC4NCiAgCQkgKi8NCiAgCQlpZiAoU0Rw
bnQtPmRldmljZV9ibG9ja2VkKSB7DQogIAkJCWJyZWFrOw0KKioqKioqKioq
KioqKioqDQoqKiogNjcxLDY3NyAqKioqDQogIAkJCQkgKi8NCiAgCQkJCXJl
Y291bnRfc2VnbWVudHMoU0NwbnQpOw0KICAJCQl9IGVsc2Ugew0KISAJCQkJ
U0NwbnQgPSBzY3NpX2FsbG9jYXRlX2RldmljZShTRHBudCwgRkFMU0UpOw0K
ICAJCQl9DQogIAkJCS8qDQogIAkJCSAqIElmIHNvLCB3ZSBhcmUgcmVhZHkg
dG8gZG8gc29tZXRoaW5nLiAgQnVtcCB0aGUgY291bnQNCi0tLSA3MzIsNzM4
IC0tLS0NCiAgCQkJCSAqLw0KICAJCQkJcmVjb3VudF9zZWdtZW50cyhTQ3Bu
dCk7DQogIAkJCX0gZWxzZSB7DQohIAkJCQlTQ3BudCA9IHNjc2lfYWxsb2Nh
dGVfZGV2aWNlKFNEcG50LCBGQUxTRSwgRkFMU0UpOw0KICAJCQl9DQogIAkJ
CS8qDQogIAkJCSAqIElmIHNvLCB3ZSBhcmUgcmVhZHkgdG8gZG8gc29tZXRo
aW5nLiAgQnVtcCB0aGUgY291bnQNCioqKioqKioqKioqKioqKg0KKioqIDc4
NSw4MTMgKioqKg0KICAJCSAqIHRoZSByZXF1ZXN0IHF1ZXVlIGFuZCB0cnkg
dG8gZmluZCBhbm90aGVyIGNvbW1hbmQuDQogIAkJICovDQogIAkJc3Bpbl9s
b2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsNCi0gCX0NCi0gDQotIAkvKg0K
LSAJICogSWYgdGhpcyBpcyBhIHNpbmdsZS1sdW4gZGV2aWNlLCBhbmQgd2Ug
YXJlIGN1cnJlbnRseSBmaW5pc2hlZA0KLSAJICogd2l0aCB0aGlzIGRldmlj
ZSwgdGhlbiBzZWUgaWYgd2UgbmVlZCB0byBnZXQgYW5vdGhlciBkZXZpY2UN
Ci0gCSAqIHN0YXJ0ZWQuDQotIAkgKi8NCi0gCWlmIChTRHBudC0+c2luZ2xl
X2x1bg0KLSAJICAgICYmIHEtPmN1cnJlbnRfcmVxdWVzdCA9PSBOVUxMDQot
IAkgICAgJiYgU0RwbnQtPmRldmljZV9idXN5ID09IDApIHsNCi0gCQlyZXF1
ZXN0X3F1ZXVlX3QgKnE7DQotIA0KLSAJCWZvciAoU0RwbnQgPSBTSHBudC0+
aG9zdF9xdWV1ZTsNCi0gCQkgICAgIFNEcG50Ow0KLSAJCSAgICAgU0RwbnQg
PSBTRHBudC0+bmV4dCkgew0KLSAJCQlpZiAoKChTSHBudC0+Y2FuX3F1ZXVl
ID4gMCkNCi0gCQkJICAgICAmJiAoU0hwbnQtPmhvc3RfYnVzeSA+PSBTSHBu
dC0+Y2FuX3F1ZXVlKSkNCi0gCQkJICAgIHx8IChTSHBudC0+aG9zdF9ibG9j
a2VkKQ0KLSAJCQkgICAgfHwgKFNEcG50LT5kZXZpY2VfYmxvY2tlZCkpIHsN
Ci0gCQkJCWJyZWFrOw0KLSAJCQl9DQotIAkJCXEgPSAmU0RwbnQtPnJlcXVl
c3RfcXVldWU7DQotIAkJCXEtPnJlcXVlc3RfZm4ocSk7DQotIAkJfQ0KICAJ
fQ0KICB9DQotLS0gODQ2LDg1MCAtLS0tDQpkaWZmIC1jIC1yIC4uL2xpbnV4
L2RyaXZlcnMvc2NzaS9zY3NpX3F1ZXVlLmMgLi9kcml2ZXJzL3Njc2kvc2Nz
aV9xdWV1ZS5jDQoqKiogLi4vbGludXgvZHJpdmVycy9zY3NpL3Njc2lfcXVl
dWUuYwlUdWUgRGVjIDE0IDIwOjAyOjQ5IDE5OTkNCi0tLSAuL2RyaXZlcnMv
c2NzaS9zY3NpX3F1ZXVlLmMJV2VkIERlYyAxNSAyMTozMjozMiAxOTk5DQoq
KioqKioqKioqKioqKioNCioqKiAxMDgsMTE0ICoqKioNCiAgCQkJfQ0KICAJ
CX0NCiAgCQlob3N0LT5ob3N0X2Jsb2NrZWQgPSBUUlVFOw0KLSAJCWNtZC0+
aG9zdF93YWl0ID0gVFJVRTsNCiAgCX0gZWxzZSB7DQogIAkJLyoNCiAgCQkg
KiBQcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiAgSWYgdGhlIGRl
dmljZSBpc24ndCBidXN5LA0KLS0tIDEwOCwxMTMgLS0tLQ0KKioqKioqKioq
KioqKioqDQoqKiogMTI0LDEzMCAqKioqDQogIAkJCX0NCiAgCQl9DQogIAkJ
Y21kLT5kZXZpY2UtPmRldmljZV9ibG9ja2VkID0gVFJVRTsNCi0gCQljbWQt
PmRldmljZV93YWl0ID0gVFJVRTsNCiAgCX0NCiAgDQogIAkvKg0KLS0tIDEy
MywxMjggLS0tLQ0KZGlmZiAtYyAtciAuLi9saW51eC9kcml2ZXJzL3Njc2kv
c2QuYyAuL2RyaXZlcnMvc2NzaS9zZC5jDQoqKiogLi4vbGludXgvZHJpdmVy
cy9zY3NpL3NkLmMJVHVlIERlYyAxNCAyMDowMjo0OSAxOTk5DQotLS0gLi9k
cml2ZXJzL3Njc2kvc2QuYwlXZWQgRGVjIDE1IDIxOjMyOjMyIDE5OTkNCioq
KioqKioqKioqKioqKg0KKioqIDcwNSw3MTEgKioqKg0KICAJICoganVzdCBh
ZnRlciBhIHNjc2kgYnVzIHJlc2V0Lg0KICAJICovDQogIA0KISAJU0NwbnQg
PSBzY3NpX2FsbG9jYXRlX2RldmljZShyc2NzaV9kaXNrc1tpXS5kZXZpY2Us
IDEpOw0KICANCiAgCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHNjc2lf
bWFsbG9jKDUxMik7DQogIA0KLS0tIDcwNSw3MTEgLS0tLQ0KICAJICoganVz
dCBhZnRlciBhIHNjc2kgYnVzIHJlc2V0Lg0KICAJICovDQogIA0KISAJU0Nw
bnQgPSBzY3NpX2FsbG9jYXRlX2RldmljZShyc2NzaV9kaXNrc1tpXS5kZXZp
Y2UsIDEsIEZBTFNFKTsNCiAgDQogIAlidWZmZXIgPSAodW5zaWduZWQgY2hh
ciAqKSBzY3NpX21hbGxvYyg1MTIpOw0KICANCioqKioqKioqKioqKioqKg0K
KioqIDk1MCw5NTYgKioqKg0KICAJU0NwbnQtPmRldmljZS0+cmVtYXAgPSAx
Ow0KICAJU0NwbnQtPmRldmljZS0+c2VjdG9yX3NpemUgPSBzZWN0b3Jfc2l6
ZTsNCiAgCS8qIFdha2UgdXAgYSBwcm9jZXNzIHdhaXRpbmcgZm9yIGRldmlj
ZSAqLw0KLSAJd2FrZV91cCgmU0NwbnQtPmRldmljZS0+ZGV2aWNlX3dhaXQp
Ow0KICAJc2NzaV9yZWxlYXNlX2NvbW1hbmQoU0NwbnQpOw0KICAJU0NwbnQg
PSBOVUxMOw0KICANCi0tLSA5NTAsOTU1IC0tLS0NCmRpZmYgLWMgLXIgLi4v
bGludXgvZHJpdmVycy9zY3NpL3NnLmMgLi9kcml2ZXJzL3Njc2kvc2cuYw0K
KioqIC4uL2xpbnV4L2RyaXZlcnMvc2NzaS9zZy5jCVR1ZSBEZWMgMTQgMjA6
MDM6NTIgMTk5OQ0KLS0tIC4vZHJpdmVycy9zY3NpL3NnLmMJV2VkIERlYyAx
NSAyMTozMjozMiAxOTk5DQoqKioqKioqKioqKioqKioNCioqKiA2NSw3MCAq
KioqDQotLS0gNjUsNzEgLS0tLQ0KICAjaW5jbHVkZSA8c2NzaS9zY3NpX2lv
Y3RsLmg+DQogICNpbmNsdWRlIDxzY3NpL3NnLmg+DQogIA0KKyBzdGF0aWMg
c3BpbmxvY2tfdCBzZ19yZXF1ZXN0X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NL
RUQ7DQogIA0KICBpbnQgc2dfYmlnX2J1ZmYgPSBTR19ERUZfUkVTRVJWRURf
U0laRTsgLyogc2dfYmlnX2J1ZmYgaXMgcm8gdGhyb3VnaCBzeXNjdGwgKi8N
CiAgLyogTi5CLiBUaGlzIGdsb2JhbCBpcyBoZXJlIHRvIGtlZXAgZXhpc3Rp
bmcgc29mdHdhcmUgaGFwcHkuIEl0IG5vdyBob2xkcw0KKioqKioqKioqKioq
KioqDQoqKiogNDMyLDQ0MCAqKioqDQogICAgICB9DQogIC8qICBTQ1NJX0xP
R19USU1FT1VUKDcsIHByaW50aygic2dfd3JpdGU6IGFsbG9jYXRpbmcgZGV2
aWNlXG4iKSk7ICovDQogICAgICBpZiAoISAoU0NwbnQgPSBzY3NpX2FsbG9j
YXRlX2RldmljZShzZHAtPmRldmljZSwgDQohICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAhKGZpbHAtPmZfZmxhZ3MgJiBPX05P
TkJMT0NLKSkpKSANCiEgICAgIHsNCiAgICAgICAgICBzZ19maW5pc2hfcmVt
X3JlcShzcnAsIE5VTEwsIDApOw0KICAgICAgICAgIHJldHVybiAtRUFHQUlO
OyAgIC8qIE5vIGF2YWlsYWJsZSBjb21tYW5kIGJsb2NrcyBhdCB0aGUgbW9t
ZW50ICovDQogICAgICB9DQogIC8qICBTQ1NJX0xPR19USU1FT1VUKDcsIHBy
aW50aygic2dfd3JpdGU6IGRldmljZSBhbGxvY2F0ZWRcbiIpKTsgKi8NCi0t
LSA0MzMsNDQ1IC0tLS0NCiAgICAgIH0NCiAgLyogIFNDU0lfTE9HX1RJTUVP
VVQoNywgcHJpbnRrKCJzZ193cml0ZTogYWxsb2NhdGluZyBkZXZpY2VcbiIp
KTsgKi8NCiAgICAgIGlmICghIChTQ3BudCA9IHNjc2lfYWxsb2NhdGVfZGV2
aWNlKHNkcC0+ZGV2aWNlLCANCiEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICEoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sp
LCANCiEgCQkJCQlUUlVFKSkpIHsNCiAgICAgICAgICBzZ19maW5pc2hfcmVt
X3JlcShzcnAsIE5VTEwsIDApOw0KKyAgICAgICAgIGlmKCBzaWduYWxfcGVu
ZGluZyhjdXJyZW50KSApDQorICAgICAgICAgew0KKyAgICAgICAgICAgICAg
ICAgcmV0dXJuIC1FSU5UUjsNCisgICAgICAgICB9DQogICAgICAgICAgcmV0
dXJuIC1FQUdBSU47ICAgLyogTm8gYXZhaWxhYmxlIGNvbW1hbmQgYmxvY2tz
IGF0IHRoZSBtb21lbnQgKi8NCiAgICAgIH0NCiAgLyogIFNDU0lfTE9HX1RJ
TUVPVVQoNywgcHJpbnRrKCJzZ193cml0ZTogZGV2aWNlIGFsbG9jYXRlZFxu
IikpOyAqLw0KKioqKioqKioqKioqKioqDQoqKiogMTA0MywxMDQ5ICoqKioN
CiAgICAgICAgICAgICAgY29udGludWU7ICAgLyogZGlydHkgYnV0IGxvd2Vy
cyBuZXN0aW5nICovDQogICAgICAgICAgaWYgKHNkcC0+aGVhZGZwKSB7DQog
IC8qIE5lZWQgdG8gc3RvcCBzZ19jb21tYW5kX2RvbmUoKSBwbGF5aW5nIHdp
dGggdGhpcyBsaXN0IGR1cmluZyB0aGlzIGxvb3AgKi8NCiEgICAgICAgICAg
ICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp
Ow0KICAgICAgICAgICAgICBzZnAgPSBzZHAtPmhlYWRmcDsNCiAgICAgICAg
ICAgICAgd2hpbGUgKHNmcCkgew0KICAgICAgICAgICAgICAgICAgc3JwID0g
c2ZwLT5oZWFkcnA7DQotLS0gMTA0OCwxMDU0IC0tLS0NCiAgICAgICAgICAg
ICAgY29udGludWU7ICAgLyogZGlydHkgYnV0IGxvd2VycyBuZXN0aW5nICov
DQogICAgICAgICAgaWYgKHNkcC0+aGVhZGZwKSB7DQogIC8qIE5lZWQgdG8g
c3RvcCBzZ19jb21tYW5kX2RvbmUoKSBwbGF5aW5nIHdpdGggdGhpcyBsaXN0
IGR1cmluZyB0aGlzIGxvb3AgKi8NCiEgICAgICAgICAgICAgc3Bpbl9sb2Nr
X2lycXNhdmUoJnNnX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KICAgICAgICAg
ICAgICBzZnAgPSBzZHAtPmhlYWRmcDsNCiAgICAgICAgICAgICAgd2hpbGUg
KHNmcCkgew0KICAgICAgICAgICAgICAgICAgc3JwID0gc2ZwLT5oZWFkcnA7
DQoqKioqKioqKioqKioqKioNCioqKiAxMDU0LDEwNjAgKioqKg0KICAgICAg
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgc2ZwID0gc2ZwLT5u
ZXh0ZnA7DQogICAgICAgICAgICAgIH0NCiEgICAgICAgICAgICAgc3Bpbl91
bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQog
ICAgICBTQ1NJX0xPR19USU1FT1VUKDMsIHByaW50aygic2dfZGV0YWNoOiBk
ZXY9JWQsIGRpcnR5LCBzbGVlcCgzKVxuIiwgaykpOw0KICAgICAgICAgICAg
ICBzY3NpX3NsZWVwKDMpOyAvKiBzbGVlcCAzIGppZmZpZXMsIGhvcGluZyBm
b3IgdGltZW91dCB0byBnbyBvZmYgKi8NCiAgICAgICAgICB9DQotLS0gMTA1
OSwxMDY1IC0tLS0NCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICAgICAgIHNmcCA9IHNmcC0+bmV4dGZwOw0KICAgICAgICAgICAgICB9DQoh
ICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNnX3JlcXVl
c3RfbG9jaywgZmxhZ3MpOw0KICAgICAgU0NTSV9MT0dfVElNRU9VVCgzLCBw
cmludGsoInNnX2RldGFjaDogZGV2PSVkLCBkaXJ0eSwgc2xlZXAoMylcbiIs
IGspKTsNCiAgICAgICAgICAgICAgc2NzaV9zbGVlcCgzKTsgLyogc2xlZXAg
MyBqaWZmaWVzLCBob3BpbmcgZm9yIHRpbWVvdXQgdG8gZ28gb2ZmICovDQog
ICAgICAgICAgfQ0KKioqKioqKioqKioqKioqDQoqKiogMTExNCwxMTIyICoq
KioNCiAgICAgICAgICBzY3NpX2FkZF90aW1lcihzY3BudCwgc2NwbnQtPnRp
bWVvdXRfcGVyX2NvbW1hbmQsDQogICAgICAgICAgICAgICAgICAgICAgICAg
c2NzaV9vbGRfdGltZXNfb3V0KTsNCiAgI2Vsc2UNCiEgICAgIHNwaW5fdW5s
b2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsNCiAgICAgIHNjc2lfc2xlZXAo
SFopOyAvKiBqdXN0IHNsZWVwIDEgc2Vjb25kIGFuZCBob3BlIC4uLiAqLw0K
ISAgICAgc3Bpbl9sb2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsNCiAgI2Vu
ZGlmDQogIH0NCiAgDQotLS0gMTExOSwxMTI3IC0tLS0NCiAgICAgICAgICBz
Y3NpX2FkZF90aW1lcihzY3BudCwgc2NwbnQtPnRpbWVvdXRfcGVyX2NvbW1h
bmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgc2NzaV9vbGRfdGltZXNf
b3V0KTsNCiAgI2Vsc2UNCiEgICAgIHNwaW5fdW5sb2NrX2lycSgmc2dfcmVx
dWVzdF9sb2NrKTsNCiAgICAgIHNjc2lfc2xlZXAoSFopOyAvKiBqdXN0IHNs
ZWVwIDEgc2Vjb25kIGFuZCBob3BlIC4uLiAqLw0KISAgICAgc3Bpbl9sb2Nr
X2lycSgmc2dfcmVxdWVzdF9sb2NrKTsNCiAgI2VuZGlmDQogIH0NCiAgDQpk
aWZmIC1jIC1yIC4uL2xpbnV4L2RyaXZlcnMvc2NzaS9zci5jIC4vZHJpdmVy
cy9zY3NpL3NyLmMNCioqKiAuLi9saW51eC9kcml2ZXJzL3Njc2kvc3IuYwlU
dWUgRGVjIDE0IDIwOjAyOjQ5IDE5OTkNCi0tLSAuL2RyaXZlcnMvc2NzaS9z
ci5jCVdlZCBEZWMgMTUgMjE6MzY6MjggMTk5OQ0KKioqKioqKioqKioqKioq
DQoqKiogNDg2LDQ5MiAqKioqDQogIAlidWZmZXIgPSAodW5zaWduZWQgY2hh
ciAqKSBzY3NpX21hbGxvYyg1MTIpOw0KICANCiAgDQohIAlTQ3BudCA9IHNj
c2lfYWxsb2NhdGVfZGV2aWNlKHNjc2lfQ0RzW2ldLmRldmljZSwgMSk7DQog
IA0KICAJcmV0cmllcyA9IDM7DQogIAlkbyB7DQotLS0gNDg2LDQ5MiAtLS0t
DQogIAlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBzY3NpX21hbGxvYyg1
MTIpOw0KICANCiAgDQohIAlTQ3BudCA9IHNjc2lfYWxsb2NhdGVfZGV2aWNl
KHNjc2lfQ0RzW2ldLmRldmljZSwgMSwgRkFMU0UpOw0KICANCiAgCXJldHJp
ZXMgPSAzOw0KICAJZG8gew0KKioqKioqKioqKioqKioqDQoqKiogNTA5LDUx
NSAqKioqDQogIAl9IHdoaWxlICh0aGVfcmVzdWx0ICYmIHJldHJpZXMpOw0K
ICANCiAgDQotIAl3YWtlX3VwKCZTQ3BudC0+ZGV2aWNlLT5kZXZpY2Vfd2Fp
dCk7DQogIAlzY3NpX3JlbGVhc2VfY29tbWFuZChTQ3BudCk7DQogIAlTQ3Bu
dCA9IE5VTEw7DQogIA0KLS0tIDUwOSw1MTQgLS0tLQ0KKioqKioqKioqKioq
KioqDQoqKiogNjU5LDY2NSAqKioqDQogIAlpbnQgYnVmbGVuOw0KICANCiAg
CS8qIGdldCB0aGUgZGV2aWNlICovDQohIAlTQ3BudCA9IHNjc2lfYWxsb2Nh
dGVfZGV2aWNlKGRldmljZSwgMSk7DQogIAlpZiAoU0NwbnQgPT0gTlVMTCkN
CiAgCQlyZXR1cm4gLUVOT0RFVjsJLyogdGhpcyBqdXN0IGRvZXNuJ3Qgc2Vl
bSByaWdodCAvYXhib2UgKi8NCiAgDQotLS0gNjU4LDY2NCAtLS0tDQogIAlp
bnQgYnVmbGVuOw0KICANCiAgCS8qIGdldCB0aGUgZGV2aWNlICovDQohIAlT
Q3BudCA9IHNjc2lfYWxsb2NhdGVfZGV2aWNlKGRldmljZSwgMSwgRkFMU0Up
Ow0KICAJaWYgKFNDcG50ID09IE5VTEwpDQogIAkJcmV0dXJuIC1FTk9ERVY7
CS8qIHRoaXMganVzdCBkb2Vzbid0IHNlZW0gcmlnaHQgL2F4Ym9lICovDQog
IA0KKioqKioqKioqKioqKioqDQoqKiogODY0LDg3MCAqKioqDQogIAkJc3Jf
aGFyZHNpemVzID0gTlVMTDsNCiAgCX0NCiAgCWJsa3NpemVfc2l6ZVtNQUpP
Ul9OUl0gPSBOVUxMOw0KISAgICAgICAgIGhhcmRzZWN0X3NpemVbTUFKT1Jf
TlJdID0gc3JfaGFyZHNpemVzOw0KICAJYmxrX2NsZWFudXBfcXVldWUoQkxL
X0RFRkFVTFRfUVVFVUUoTUFKT1JfTlIpKTsNCiAgCWJsa19zaXplW01BSk9S
X05SXSA9IE5VTEw7DQogIAlyZWFkX2FoZWFkW01BSk9SX05SXSA9IDA7DQot
LS0gODYzLDg2OSAtLS0tDQogIAkJc3JfaGFyZHNpemVzID0gTlVMTDsNCiAg
CX0NCiAgCWJsa3NpemVfc2l6ZVtNQUpPUl9OUl0gPSBOVUxMOw0KISAgICAg
ICAgIGhhcmRzZWN0X3NpemVbTUFKT1JfTlJdID0gTlVMTDsNCiAgCWJsa19j
bGVhbnVwX3F1ZXVlKEJMS19ERUZBVUxUX1FVRVVFKE1BSk9SX05SKSk7DQog
IAlibGtfc2l6ZVtNQUpPUl9OUl0gPSBOVUxMOw0KICAJcmVhZF9haGVhZFtN
QUpPUl9OUl0gPSAwOw0KZGlmZiAtYyAtciAuLi9saW51eC9kcml2ZXJzL3Nj
c2kvc3JfaW9jdGwuYyAuL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jDQoqKiog
Li4vbGludXgvZHJpdmVycy9zY3NpL3NyX2lvY3RsLmMJVHVlIERlYyAxNCAy
MDowMjo0OSAxOTk5DQotLS0gLi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwlX
ZWQgRGVjIDE1IDIxOjMyOjMyIDE5OTkNCioqKioqKioqKioqKioqKg0KKioq
IDU5LDY1ICoqKioNCiAgCWNoYXIgKmJvdW5jZV9idWZmZXI7DQogIA0KICAJ
U0RldiA9IHNjc2lfQ0RzW3RhcmdldF0uZGV2aWNlOw0KISAJU0NwbnQgPSBz
Y3NpX2FsbG9jYXRlX2RldmljZShzY3NpX0NEc1t0YXJnZXRdLmRldmljZSwg
MSk7DQogIA0KICAJLyogdXNlIElTQSBETUEgYnVmZmVyIGlmIG5lY2Vzc2Fy
eSAqLw0KICAJU0NwbnQtPnJlcXVlc3QuYnVmZmVyID0gYnVmZmVyOw0KLS0t
IDU5LDY1IC0tLS0NCiAgCWNoYXIgKmJvdW5jZV9idWZmZXI7DQogIA0KICAJ
U0RldiA9IHNjc2lfQ0RzW3RhcmdldF0uZGV2aWNlOw0KISAJU0NwbnQgPSBz
Y3NpX2FsbG9jYXRlX2RldmljZShzY3NpX0NEc1t0YXJnZXRdLmRldmljZSwg
MSwgRkFMU0UpOw0KICANCiAgCS8qIHVzZSBJU0EgRE1BIGJ1ZmZlciBpZiBu
ZWNlc3NhcnkgKi8NCiAgCVNDcG50LT5yZXF1ZXN0LmJ1ZmZlciA9IGJ1ZmZl
cjsNCioqKioqKioqKioqKioqKg0KKioqIDE0MiwxNDggKioqKg0KICAJfQ0K
ICAJcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsNCiAgCS8qIFdha2UgdXAgYSBw
cm9jZXNzIHdhaXRpbmcgZm9yIGRldmljZSAqLw0KLSAJd2FrZV91cCgmU0Nw
bnQtPmRldmljZS0+ZGV2aWNlX3dhaXQpOw0KICAJc2NzaV9yZWxlYXNlX2Nv
bW1hbmQoU0NwbnQpOw0KICAJU0NwbnQgPSBOVUxMOw0KICAJcmV0dXJuIGVy
cjsNCi0tLSAxNDIsMTQ3IC0tLS0NCmRpZmYgLWMgLXIgLi4vbGludXgvZHJp
dmVycy9zY3NpL3N0LmMgLi9kcml2ZXJzL3Njc2kvc3QuYw0KKioqIC4uL2xp
bnV4L2RyaXZlcnMvc2NzaS9zdC5jCVR1ZSBEZWMgMTQgMjA6MDI6NTAgMTk5
OQ0KLS0tIC4vZHJpdmVycy9zY3NpL3N0LmMJV2VkIERlYyAxNSAyMTozMjoz
MiAxOTk5DQoqKioqKioqKioqKioqKioNCioqKiAyODksMjk1ICoqKioNCiAg
CXVuc2lnbmVkIGNoYXIgKmJwOw0KICANCiAgCWlmIChTQ3BudCA9PSBOVUxM
KQ0KISAJCVNDcG50ID0gc2NzaV9hbGxvY2F0ZV9kZXZpY2UoU1RwLT5kZXZp
Y2UsIDEpOw0KICAJCWlmIChTQ3BudCA9PSBOVUxMKSB7DQogIAkJCXByaW50
ayhLRVJOX0VSUiAic3QlZDogQ2FuJ3QgZ2V0IFNDU0kgcmVxdWVzdC5cbiIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQVBFX05SKFNU
cC0+ZGV2dCkpOw0KLS0tIDI4OSwyOTUgLS0tLQ0KICAJdW5zaWduZWQgY2hh
ciAqYnA7DQogIA0KICAJaWYgKFNDcG50ID09IE5VTEwpDQohIAkJU0NwbnQg
PSBzY3NpX2FsbG9jYXRlX2RldmljZShTVHAtPmRldmljZSwgMSwgRkFMU0Up
Ow0KICAJCWlmIChTQ3BudCA9PSBOVUxMKSB7DQogIAkJCXByaW50ayhLRVJO
X0VSUiAic3QlZDogQ2FuJ3QgZ2V0IFNDU0kgcmVxdWVzdC5cbiIsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQVBFX05SKFNUcC0+ZGV2
dCkpOw0K
--1624180858-1503920187-945311825=:10419--

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post