Alternate ncr driver SMP changes.

Gerard Roudier (groudier@club-internet.fr)
Sun, 12 Apr 1998 18:16:34 +0200 (MET DST)


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.

--8323328-59187499-892397794=:395
Content-Type: TEXT/PLAIN; charset=US-ASCII

I have attached to this mail my latest version of the SMP changes for
the ncr53c8xx driver. The patch is against linux-2.1.95/driver 2.5f.?.

This patch still uses a lock per controller even if this seems not
needed for current Linux and very probably for linux-2.2.

Linux-2.1.95 uses a lock named 'io_request_lock' that seems to be a
global lock for the entire block IO subsystem. The way that have been
chosen to fix the SMP block IO stuff is to let all the components of
the block IO stuff be aware of the 'io_request_lock', including low-level
drivers.
Looking into the code, and assuming that I did understand correctly this
code, I ended up agreeing that it is likely the quickest and most
pragmatic way to fix up the SCSI code for SMP.

This patch will be included into the 2.1.9X kernel, only if Linus is
ok about, given that the current ncr driver code should behave correctly.
In any case, this patch (or the final one) will be available at
linux.wauug.org when it will be complete and tested ok.

Disadvantages of this patch:
- A couple of n/usec lost to uselessly lock the controller data.
- It is large (20 Kb).

Advantages:
- It is not broken by design IMO, and allows the driver to be more
resistant to bugs or bad changes in the block IO subsystem.
- The most part of the interrupt code is grained as wished.

Regards, Gerard.

--8323328-59187499-892397794=:395
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ncr53c8xx-pre-2.5g-2.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95.980412181634.395C@localhost>
Content-Description:

LS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguaC5PUklHCVNhdCBB
cHIgMTEgMDk6MzI6MzYgMTk5OA0KKysrIGxpbnV4L2RyaXZlcnMvc2NzaS9u
Y3I1M2M4eHguaAlTdW4gQXByIDEyIDE3OjI0OjI0IDE5OTgNCkBAIC00NSw3
ICs0NSw3IEBADQogLyoNCiAqKglOYW1lIGFuZCByZXZpc2lvbiBvZiB0aGUg
ZHJpdmVyDQogKi8NCi0jZGVmaW5lIFNDU0lfTkNSX0RSSVZFUl9OQU1FCQki
bmNyNTNjOHh4IC0gcmV2aXNpb24gMi41ZiINCisjZGVmaW5lIFNDU0lfTkNS
X0RSSVZFUl9OQU1FCQkibmNyNTNjOHh4IC0gcmV2aXNpb24gcHJlLTIuNWct
MiINCiANCiAvKg0KICoqCUNoZWNrIHN1cHBvcnRlZCBMaW51eCB2ZXJzaW9u
cw0KLS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYy5PUklHCVNh
dCBBcHIgMTEgMDk6MzI6MjcgMTk5OA0KKysrIGxpbnV4L2RyaXZlcnMvc2Nz
aS9uY3I1M2M4eHguYwlTdW4gQXByIDEyIDE3OjA0OjQ3IDE5OTgNCkBAIC02
Nyw3ICs2Nyw3IEBADQogKi8NCiANCiAvKg0KLSoqCTIgSmFudWFyeSAxOTk4
LCB2ZXJzaW9uIDIuNWYNCisqKgkxMiBBcHJpbCAxOTk4LCB2ZXJzaW9uIHBy
ZS0yLjVnLTINCiAqKg0KICoqCVN1cHBvcnRlZCBTQ1NJLUlJIGZlYXR1cmVz
Og0KICoqCSAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbg0KQEAgLTI4Nyw2
ICsyODcsNjEgQEANCiAjZW5kaWYNCiANCiAvKg0KKyoqCVNNUCB0aHJlYWRp
bmcuDQorKioNCisqKglBc3N1bWluZyB0aGF0IFNNUCBzeXN0ZW1zIGFyZSBn
ZW5lcmFsbHkgaGlnaCBlbmQgc3lzdGVtcyBhbmQgbWF5IA0KKyoqCXVzZSBz
ZXZlcmFsIFNDU0kgYWRhcHRlcnMsIHdlIGFyZSB1c2luZyBvbmUgbG9jayBw
ZXIgY29udHJvbGxlciANCisqKglpbnN0ZWFkIG9mIHNvbWUgZ2xvYmFsIG9u
ZS4gRm9yIHRoZSBtb21lbnQgKGxpbnV4LTIuMS45NSksIGRyaXZlcidzIA0K
KyoqCWVudHJ5IHBvaW50cyBhcmUgY2FsbGVkIHdpdGggdGhlICdpb19yZXF1
ZXN0X2xvY2snIGxvY2sgaGVsZCwgc286DQorKioJLSBXZSBhcmUgdXNlbGVz
c2x5IGxvb3NpbmcgYSBjb3VwbGUgb2YgbWljcm8tc2Vjb25kcyB0byBsb2Nr
IHRoZSANCisqKgkgIGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUuDQorKioJ
LSBCdXQgdGhlIGRyaXZlciBpcyBub3QgYnJva2VuIGJ5IGRlc2lnbiBmb3Ig
U01QIGFuZCBzbyBjYW4gYmUgDQorKioJICBtb3JlIHJlc2lzdGFudCB0byBi
dWdzIG9yIGJhZCBjaGFuZ2VzIGluIHRoZSBJTyBzdWItc3lzdGVtIGNvZGUu
DQorKioJLSBBIHNtYWxsIGFkdmFudGFnZSBjb3VsZCBiZSB0aGF0IHRoZSBp
bnRlcnJ1cHQgY29kZSBpcyBncmFpbmVkIGFzIA0KKyoqCSAgd2lzaGVkIChl
LmcuOiB0aHJlYWRlZCBieSBjb250cm9sbGVyKS4NCisqLw0KKw0KKyNpZiBM
SU5VWF9WRVJTSU9OX0NPREUgPj0gTGludXhWZXJzaW9uQ29kZSgyLDEsOTMp
DQorDQorI2lmIDAJLyogbm90IHlldCBuZWVkZWQgKi8NCitzdGF0aWMgc3Bp
bmxvY2tfdCBkcml2ZXJfbG9jazsNCisjZGVmaW5lCU5DUl9MT0NLX0RSSVZF
UihmbGFncykgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfbG9jaywg
ZmxhZ3MpDQorI2RlZmluZQlOQ1JfVU5MT0NLX0RSSVZFUihmbGFncykgICBz
cGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfbG9jaywgZmxhZ3MpDQor
I2VuZGlmDQorDQorI2RlZmluZQlOQ1JfTE9DS19OQ0IobnAsIGZsYWdzKSAg
ICBzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPnNtcF9sb2NrLCBmbGFncykNCisj
ZGVmaW5lCU5DUl9VTkxPQ0tfTkNCKG5wLCBmbGFncykgIHNwaW5fdW5sb2Nr
X2lycXJlc3RvcmUoJm5wLT5zbXBfbG9jaywgZmxhZ3MpDQorDQorIwlpZiBM
SU5VWF9WRVJTSU9OX0NPREUgPCBMaW51eFZlcnNpb25Db2RlKDIsMyw5OSkN
CisNCisjCWRlZmluZQlOQ1JfTE9DS19TQ1NJX0RPTkUobnAsIGZsYWdzKSBc
DQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFn
cykNCisjCWRlZmluZQlOQ1JfVU5MT0NLX1NDU0lfRE9ORShucCwgZmxhZ3Mp
IFwNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9j
aywgZmxhZ3MpDQorDQorIwllbHNlDQorDQorIwlkZWZpbmUJTkNSX0xPQ0tf
U0NTSV9ET05FKG5wLCBmbGFncykgICAgZG8gezt9IHdoaWxlICgwKQ0KKyMJ
ZGVmaW5lCU5DUl9VTkxPQ0tfU0NTSV9ET05FKG5wLCBmbGFncykgIGRvIHs7
fSB3aGlsZSAoMCkNCisNCisjCWVuZGlmDQorDQorI2Vsc2UNCisNCisjaWYg
MAkvKiBub3QgeWV0IG5lZWRlZCAqLw0KKyNkZWZpbmUJTkNSX0xPQ0tfRFJJ
VkVSKGZsYWdzKSAgICAgZG8gezt9IHdoaWxlICgwKQ0KKyNkZWZpbmUJTkNS
X1VOTE9DS19EUklWRVIoZmxhZ3MpICAgZG8gezt9IHdoaWxlICgwKQ0KKyNl
bmRpZg0KKw0KKyNkZWZpbmUJTkNSX0xPQ0tfTkNCKG5wLCBmbGFncykgICAg
ZG8geyBzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7IH0gd2hpbGUgKDApDQor
I2RlZmluZQlOQ1JfVU5MT0NLX05DQihucCwgZmxhZ3MpICBkbyB7IHJlc3Rv
cmVfZmxhZ3MoZmxhZ3MpOyB9IHdoaWxlICgwKQ0KKw0KKyNkZWZpbmUJTkNS
X0xPQ0tfU0NTSV9ET05FKG5wLCBmbGFncykgICAgZG8gezt9IHdoaWxlICgw
KQ0KKyNkZWZpbmUJTkNSX1VOTE9DS19TQ1NJX0RPTkUobnAsIGZsYWdzKSAg
ZG8gezt9IHdoaWxlICgwKQ0KKw0KKyNlbmRpZg0KKw0KKy8qDQogKioJQWRk
cmVzcyB0cmFuc2xhdGlvbg0KICoqDQogKioJT24gTGludXggMS4zLlgsIHZp
cnRfdG9fYnVzKCkgbXVzdCBiZSB1c2VkIHRvIHRyYW5zbGF0ZQ0KQEAgLTE2
MzksNiArMTY5NCwxMSBAQA0KIAlpbnQJbmNyX2NhY2hlOwkJLyogQ2FjaGUg
dGVzdCB2YXJpYWJsZSAgICAgICAgICAgICAgICovDQogCVNjc2lfQ21uZCAq
d2FpdGluZ19saXN0OwkvKiBXYWl0aW5nIGxpc3QgaGVhZGVyIGZvciBjb21t
YW5kcyAgKi8NCiAJCQkJCS8qIHRoYXQgd2UgY2FuJ3QgcHV0IGludG8gdGhl
IHNxdWV1ZSAqLw0KKwlTY3NpX0NtbmQgKmRvbmVfbGlzdDsJCS8qIFdhaXRp
bmcgbGlzdCBoZWFkZXIgZm9yIGNvbW1hbmRzICAqLw0KKwkJCQkJLyogdGhh
dCBoYXZlIGNvbXBsZXRlZAkJICAgICAqLw0KKyNpZiBMSU5VWF9WRVJTSU9O
X0NPREUgPj0gTGludXhWZXJzaW9uQ29kZSgyLDEsOTMpDQorCXNwaW5sb2Nr
X3Qgc21wX2xvY2s7CQkvKiBDb250cm9sbGVyIGxvY2sgZm9yIFNNUCB0aHJl
YWRpbmcgKi8NCisjZW5kaWYNCiAJdV9sb25nCXNldHRsZV90aW1lOwkJLyog
UmVzZXQgaW4gcHJvZ2VzcwkJICAgICAqLw0KIAl1X2NoYXIJcmVsZWFzZV9z
dGFnZTsJCS8qIFN5bmNocm9uaXNhdGlvbiBzdGFnZSBvbiByZWxlYXNlICAq
Lw0KIAl1X2NoYXIJdmVyYm9zZTsJCS8qIEJvb3QgdmVyYm9zaXR5IGZvciB0
aGlzIGNvbnRyb2xsZXIqLw0KQEAgLTE5NzAsNyArMjAzMCw3IEBADQogc3Rh
dGljCXZvaWQJbmNyX2dldGNsb2NrCShuY2JfcCBucCwgaW50IG11bHQpOw0K
IHN0YXRpYwl2b2lkCW5jcl9zZWxlY3RjbG9jawkobmNiX3AgbnAsIHVfY2hh
ciBzY250bDMpOw0KIHN0YXRpYwljY2JfcAluY3JfZ2V0X2NjYgkobmNiX3Ag
bnAsIHVfbG9uZyB0LHVfbG9uZyBsKTsNCi1zdGF0aWMJdm9pZAluY3JfaW5p
dAkobmNiX3AgbnAsIGNoYXIgKiBtc2csIHVfbG9uZyBjb2RlKTsNCitzdGF0
aWMJdm9pZAluY3JfaW5pdAkobmNiX3AgbnAsIGludCByZXNldCwgY2hhciAq
IG1zZywgdV9sb25nIGNvZGUpOw0KIHN0YXRpYwlpbnQJbmNyX2ludF9zYm1j
CShuY2JfcCBucCk7DQogc3RhdGljCWludAluY3JfaW50X3BhcgkobmNiX3Ag
bnApOw0KIHN0YXRpYwl2b2lkCW5jcl9pbnRfbWEJKG5jYl9wIG5wKTsNCkBA
IC00NjM1LDE0ICs0Njk1LDEzIEBADQogCSoqCWlmIGludGVycnVwdHMgYXJl
IG5vdCBlbmFibGVkIHlldC4NCiAJKioJVGhlbiBlbmFibGUgZGlzY29ubmVj
dHMuDQogCSovDQotCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsNCisJTkNS
X0xPQ0tfTkNCKG5wLCBmbGFncyk7DQogCWlmIChuY3JfcmVzZXRfc2NzaV9i
dXMobnAsIDEsIGRyaXZlcl9zZXR1cC5zZXR0bGVfZGVsYXkpICE9IDApIHsN
CiAJCXByaW50ZigiJXM6IEZBVEFMIEVSUk9SOiBDSEVDSyBTQ1NJIEJVUyAt
IENBQkxFUywgVEVSTUlOQVRJT04sIERFVklDRSBQT1dFUiBldGMuIVxuIiwg
bmNyX25hbWUobnApKTsNCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0KKwkJ
TkNSX1VOTE9DS19OQ0IobnAsIGZsYWdzKTsNCiAJCWdvdG8gYXR0YWNoX2Vy
cm9yOw0KIAl9DQogCW5jcl9leGNlcHRpb24gKG5wKTsNCi0JcmVzdG9yZV9m
bGFncyhmbGFncyk7DQogDQogCW5wLT5kaXNjID0gMTsNCiANCkBAIC00Njc1
LDYgKzQ3MzQsOCBAQA0KIAlucC0+b3JkZXIgPSBNX1NJTVBMRV9UQUc7DQog
I2VuZGlmDQogDQorCU5DUl9VTkxPQ0tfTkNCKG5wLCBmbGFncyk7DQorDQog
CS8qDQogCSoqICBEb25lLg0KIAkqLw0KQEAgLTQ3MjMsNiArNDc4NCw0NCBA
QA0KICAgICAgICAgcmV0dXJuIC0xOw0KICB9DQogDQorDQorLyo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQorKioNCisqKg0KKyoqCURvbmUgU0NTSSBjb21tYW5kcyBsaXN0
IG1hbmFnZW1lbnQuDQorKioNCisqKglXZSBkb25ub3QgZW50ZXIgdGhlIHNj
c2lfZG9uZSgpIGNhbGxiYWNrIGltbWVkaWF0ZWx5IA0KKyoqCWFmdGVyIGEg
Y29tbWFuZCBoYXMgYmVlbiBzZWVuIGFzIGNvbXBsZXRlZCBidXQgd2UgDQor
KioJaW5zZXJ0IGl0IGludG8gYSBsaXN0IHdoaWNoIGlzIGZsdXNoZWQgb3V0
c2lkZSBhbnkga2luZCANCisqKglvZiBkcml2ZXIgY3JpdGljYWwgc2VjdGlv
bi4NCisqKglUaGlzIGFsbG93cyB0byBkbyBtaW5pbWFsIHN0dWZmIHVuZGVy
IGludGVycnVwdCBhbmQgDQorKioJaW5zaWRlIGNyaXRpY2FsIHNlY3Rpb25z
IGFuZCB0byBhbHNvIGF2b2lkIGxvY2tpbmcgdXAgDQorKioJb24gcmVjdXJz
aXZlIGNhbGxzIHRvIGRyaXZlciBlbnRyeSBwb2ludHMgdW5kZXIgU01QLg0K
KyoqCUluIGZhY3QsIHRoZSBvbmx5IGtlcm5lbCBwb2ludCB3aGljaCBpcyBl
bnRlcmVkIGJ5IHRoZSANCisqKglkcml2ZXIgd2l0aCBhIGRyaXZlciBsb2Nr
IHNldCBpcyBrbWFsbG9jKEdGUF9BVE9NSUMpIA0KKyoqCXRoYXQgc2hhbGwg
bm90IHJlZW50ZXIgdGhlIGRyaXZlciB1bmRlciBhbnkgY2lyY3Vtc3RhbmNl
cywNCisqKglBRkFJSy4NCisqKg0KKyoqPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyovDQor
c3RhdGljIGlubGluZSB2b2lkIG5jcl9xdWV1ZV9kb25lX2NtZChuY2JfcCBu
cCwgU2NzaV9DbW5kICpjbWQpDQorew0KKwljbWQtPmhvc3Rfc2NyaWJibGUg
PSAoY2hhciAqKSBucC0+ZG9uZV9saXN0Ow0KKwlucC0+ZG9uZV9saXN0ID0g
Y21kOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbmNyX2ZsdXNoX2Rv
bmVfY21kcyhTY3NpX0NtbmQgKmxjbWQpDQorew0KKwlTY3NpX0NtbmQgKmNt
ZDsNCisgICAgDQorCXdoaWxlIChsY21kKSB7DQorCQljbWQgPSBsY21kOw0K
KwkJbGNtZCA9IChTY3NpX0NtbmQgKikgY21kLT5ob3N0X3NjcmliYmxlOw0K
KwkJY21kLT5zY3NpX2RvbmUoY21kKTsNCisJfQ0KK30NCisNCisNCiAvKj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCiAqKg0KICoqDQpAQCAtNDczMiwxMiArNDgzMSw5IEBA
DQogKioNCiAqKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCiAqLw0KLWludCBuY3JfcXVldWVf
Y29tbWFuZCAoU2NzaV9DbW5kICpjbWQsIHZvaWQgKCogZG9uZSkoU2NzaV9D
bW5kICopKQ0KK2ludCBuY3JfcXVldWVfY29tbWFuZCAobmNiX3AgbnAsIFNj
c2lfQ21uZCAqY21kKQ0KIHsNCi0gICAgICAgIHN0cnVjdCBTY3NpX0hvc3Qg
ICAqaG9zdCAgICAgID0gY21kLT5ob3N0Ow0KIC8qCVNjc2lfRGV2aWNlICAg
ICAgICAqZGV2aWNlICAgID0gY21kLT5kZXZpY2U7ICovDQotCXN0cnVjdCBo
b3N0X2RhdGEgICAqaG9zdF9kYXRhID0gKHN0cnVjdCBob3N0X2RhdGEgKikg
aG9zdC0+aG9zdGRhdGE7DQotCW5jYl9wIG5wICAgICAgICAgICAgICAgICAg
ICAgID0gaG9zdF9kYXRhLT5uY2I7DQogCXRjYl9wIHRwICAgICAgICAgICAg
ICAgICAgICAgID0gJm5wLT50YXJnZXRbY21kLT50YXJnZXRdOw0KIA0KIAlj
Y2JfcCBjcDsNCkBAIC00NzQ2LDE0ICs0ODQyLDggQEANCiAJaW50CXNlZ21l
bnRzOw0KIAl1X2NoYXIJcWlkeCwgbmVnbywgaWRtc2csICptc2dwdHI7DQog
CXVfaW50ICBtc2dsZW4sIG1zZ2xlbjI7DQotCXVfbG9uZwlmbGFnczsNCiAJ
aW50CXhmZXJfZGlyZWN0aW9uOw0KIA0KLQljbWQtPnNjc2lfZG9uZSAgICAg
PSBkb25lOw0KLQljbWQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOw0KLQljbWQt
PlNDcC5wdHIgICAgICAgPSBOVUxMOw0KLQljbWQtPlNDcC5idWZmZXIgICAg
PSBOVUxMOw0KLQ0KIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KIAkqKg0KIAkqKiAgICAgIFNvbWUgc2hvcnRj
dXRzIC4uLg0KQEAgLTQ3OTUsOCArNDg4NSw2IEBADQogCSoqDQogCSoqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQ0KIAkqLw0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7DQotDQog
CWlmIChucC0+c2V0dGxlX3RpbWUgJiYgY21kLT50aW1lb3V0X3Blcl9jb21t
YW5kID49IEhaICYmDQogCQlucC0+c2V0dGxlX3RpbWUgPiBqaWZmaWVzICsg
Y21kLT50aW1lb3V0X3Blcl9jb21tYW5kIC0gSFopIHsNCiAJCW5wLT5zZXR0
bGVfdGltZSA9IGppZmZpZXMgKyBjbWQtPnRpbWVvdXRfcGVyX2NvbW1hbmQg
LSBIWjsNCkBAIC00ODA0LDcgKzQ4OTIsNiBAQA0KIA0KICAgICAgICAgaWYg
KG5wLT5zZXR0bGVfdGltZSB8fCAhKGNwPW5jcl9nZXRfY2NiIChucCwgY21k
LT50YXJnZXQsIGNtZC0+bHVuKSkpIHsNCiAJCWluc2VydF9pbnRvX3dhaXRp
bmdfbGlzdChucCwgY21kKTsNCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0K
IAkJcmV0dXJuKERJRF9PSyk7DQogCX0NCiAJY3AtPmNtZCA9IGNtZDsNCkBA
IC01MDMxLDcgKzUxMTgsNiBAQA0KIA0KIAlpZiAoc2VnbWVudHMgPCAwKSB7
DQogCQluY3JfZnJlZV9jY2IobnAsIGNwLCBjbWQtPnRhcmdldCwgY21kLT5s
dW4pOw0KLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7DQogCQlyZXR1cm4oRElE
X0VSUk9SKTsNCiAJfQ0KIA0KQEAgLTUyMDksMTEgKzUyOTUsNiBAQA0KIAlP
VVRCIChuY19pc3RhdCwgU0lHUCk7DQogDQogCS8qDQotCSoqCWFuZCByZWVu
YWJsZSBpbnRlcnJ1cHRzDQotCSovDQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3Mp
Ow0KLQ0KLQkvKg0KIAkqKglDb21tYW5kIGlzIHN1Y2Nlc3NmdWxseSBxdWV1
ZWQuDQogCSovDQogDQpAQCAtNTIzNCwxNCArNTMxNSw5IEBADQogKi8NCiBz
dGF0aWMgdm9pZCBuY3Jfc3RhcnRfcmVzZXQobmNiX3AgbnAsIGludCBzZXR0
bGVfZGVsYXkpDQogew0KLQl1X2xvbmcgZmxhZ3M7DQotDQotCXNhdmVfZmxh
Z3MoZmxhZ3MpOyBjbGkoKTsNCi0NCiAJaWYgKCFucC0+c2V0dGxlX3RpbWUp
IHsNCiAJCSh2b2lkKSBuY3JfcmVzZXRfc2NzaV9idXMobnAsIDEsIHNldHRs
ZV9kZWxheSk7DQogCX0NCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7DQogfQ0K
IA0KIHN0YXRpYyBpbnQgbmNyX3Jlc2V0X3Njc2lfYnVzKG5jYl9wIG5wLCBp
bnQgZW5hYl9pbnQsIGludCBzZXR0bGVfZGVsYXkpDQpAQCAtNTI2MSw2ICs1
MzM3LDEyIEBADQogCU9VVEIgKG5jX2lzdGF0LCAwKTsNCiAJaWYgKGVuYWJf
aW50KQ0KIAkJT1VUVyAobmNfc2llbiwgUlNUKTsNCisJLyoNCisJKioJRW5h
YmxlIFRvbGVyYW50LCByZXNldCBJUlFEIGlmIHByZXNlbnQgYW5kIA0KKwkq
Kglwcm9wZXJseSBzZXQgSVJRIG1vZGUsIHByaW9yIHRvIHJlc2V0dGluZyB0
aGUgYnVzLg0KKwkqLw0KKwlPVVRCIChuY19zdGVzdDMsIFRFKTsNCisJT1VU
QiAobmNfZGNudGwsIChucC0+cnZfZGNudGwgJiBJUlFNKSk7DQogCU9VVEIg
KG5jX3NjbnRsMSwgQ1JTVCk7DQogCURFTEFZICgxMDApOw0KIA0KQEAgLTUz
MDYsMTQgKzUzODgsMTAgQEANCiAqKg0KICoqPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICov
DQotaW50IG5jcl9yZXNldF9idXMgKFNjc2lfQ21uZCAqY21kLCBpbnQgc3lu
Y19yZXNldCkNCitpbnQgbmNyX3Jlc2V0X2J1cyAobmNiX3AgbnAsIFNjc2lf
Q21uZCAqY21kLCBpbnQgc3luY19yZXNldCkNCiB7DQotICAgICAgICBzdHJ1
Y3QgU2NzaV9Ib3N0ICAgKmhvc3QgICAgICA9IGNtZC0+aG9zdDsNCiAvKglT
Y3NpX0RldmljZSAgICAgICAgKmRldmljZSAgICA9IGNtZC0+ZGV2aWNlOyAq
Lw0KLQlzdHJ1Y3QgaG9zdF9kYXRhICAgKmhvc3RfZGF0YSA9IChzdHJ1Y3Qg
aG9zdF9kYXRhICopIGhvc3QtPmhvc3RkYXRhOw0KLQluY2JfcCBucCAgICAg
ICAgICAgICAgICAgICAgICA9IGhvc3RfZGF0YS0+bmNiOw0KIAljY2JfcCBj
cDsNCi0JdV9sb25nIGZsYWdzOw0KIAlpbnQgZm91bmQ7DQogDQogI2lmZGVm
CVNDU0lfTkNSX0RFQlVHX0VSUk9SX1JFQ09WRVJZX1NVUFBPUlQNCkBAIC01
MzIxLDEyICs1Mzk5LDEwIEBADQogCQlucC0+c3RhbGxpbmcgPSAwOw0KICNl
bmRpZg0KIA0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7DQogLyoNCiAg
KiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgcmVzZXQgaXMgaW4gcHJvZ3Jlc3Mu
DQogICovDQogCWlmIChucC0+c2V0dGxlX3RpbWUpIHsNCi0JCXJlc3RvcmVf
ZmxhZ3MoZmxhZ3MpOw0KIAkJcmV0dXJuIFNDU0lfUkVTRVRfUFVOVDsNCiAJ
fQ0KIC8qDQpAQCAtNTM3MCwxMSArNTQ0Niw5IEBADQogICovDQogCWlmICgh
Zm91bmQgJiYgc3luY19yZXNldCAmJiAhcmV0cmlldmVfZnJvbV93YWl0aW5n
X2xpc3QoMCwgbnAsIGNtZCkpIHsNCiAJCWNtZC0+cmVzdWx0ID0gU2NzaVJl
c3VsdChESURfUkVTRVQsIDApOw0KLQkJY21kLT5zY3NpX2RvbmUoY21kKTsN
CisJCW5jcl9xdWV1ZV9kb25lX2NtZChucCwgY21kKTsNCiAJfQ0KIA0KLQly
ZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCi0NCiAJcmV0dXJuIFNDU0lfUkVTRVRf
U1VDQ0VTUzsNCiB9DQogDQpAQCAtNTM4NywxNCArNTQ2MSwxMCBAQA0KICoq
DQogKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQogKi8NCi1zdGF0aWMgaW50IG5jcl9hYm9y
dF9jb21tYW5kIChTY3NpX0NtbmQgKmNtZCkNCitzdGF0aWMgaW50IG5jcl9h
Ym9ydF9jb21tYW5kIChuY2JfcCBucCwgU2NzaV9DbW5kICpjbWQpDQogew0K
LSAgICAgICAgc3RydWN0IFNjc2lfSG9zdCAgICpob3N0ICAgICAgPSBjbWQt
Pmhvc3Q7DQogLyoJU2NzaV9EZXZpY2UgICAgICAgICpkZXZpY2UgICAgPSBj
bWQtPmRldmljZTsgKi8NCi0Jc3RydWN0IGhvc3RfZGF0YSAgICpob3N0X2Rh
dGEgPSAoc3RydWN0IGhvc3RfZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsNCi0J
bmNiX3AgbnAgICAgICAgICAgICAgICAgICAgICAgPSBob3N0X2RhdGEtPm5j
YjsNCiAJY2NiX3AgY3A7DQotCXVfbG9uZyBmbGFnczsNCiAJaW50IGZvdW5k
Ow0KIAlpbnQgcmV0djsNCiANCkBAIC01NDAzLDE0ICs1NDczLDEyIEBADQog
CQlucC0+c3RhbGxpbmcgPSAwOw0KICNlbmRpZg0KIA0KLQlzYXZlX2ZsYWdz
KGZsYWdzKTsgY2xpKCk7DQogLyoNCiAgKiBGaXJzdCwgbG9vayBmb3IgdGhl
IHNjc2kgY29tbWFuZCBpbiB0aGUgd2FpdGluZyBsaXN0DQogICovDQogCWlm
IChyZW1vdmVfZnJvbV93YWl0aW5nX2xpc3QobnAsIGNtZCkpIHsNCiAJCWNt
ZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfQUJPUlQsIDApOw0KLQkJY21k
LT5zY3NpX2RvbmUoY21kKTsNCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0K
KwkJbmNyX3F1ZXVlX2RvbmVfY21kKG5wLCBjbWQpOw0KIAkJcmV0dXJuIFND
U0lfQUJPUlRfU1VDQ0VTUzsNCiAJfQ0KIA0KQEAgLTU0MjksMTIgKzU0OTcs
MTAgQEANCiAJfQ0KIA0KIAlpZiAoIWZvdW5kKSB7DQotCQlyZXN0b3JlX2Zs
YWdzKGZsYWdzKTsNCiAJCXJldHVybiBTQ1NJX0FCT1JUX05PVF9SVU5OSU5H
Ow0KIAl9DQogDQogCWlmIChucC0+c2V0dGxlX3RpbWUpIHsNCi0JCXJlc3Rv
cmVfZmxhZ3MoZmxhZ3MpOw0KIAkJcmV0dXJuIFNDU0lfQUJPUlRfU05PT1pF
Ow0KIAl9DQogDQpAQCAtNTQ2Niw4ICs1NTMyLDYgQEANCiAjZW5kaWYNCiAJ
T1VUQiAobmNfaXN0YXQsIFNJR1ApOw0KIA0KLQlyZXN0b3JlX2ZsYWdzKGZs
YWdzKTsNCi0NCiAJcmV0dXJuIHJldHY7DQogfQ0KIA0KQEAgLTU5MjYsOSAr
NTk5MCw5IEBADQogCWlmIChucC0+d2FpdGluZ19saXN0KSByZXF1ZXVlX3dh
aXRpbmdfbGlzdChucCk7DQogDQogCS8qDQotCSoqCXNpZ25hbCBjb21wbGV0
aW9uIHRvIGdlbmVyaWMgZHJpdmVyLg0KKwkqKglRdWV1ZSB0aGlzIGNvbW1h
bmQgdG8gdGhlIGRvbmUgbGlzdC4NCiAJKi8NCi0JY21kLT5zY3NpX2RvbmUg
KGNtZCk7DQorCW5jcl9xdWV1ZV9kb25lX2NtZChucCwgY21kKTsNCiB9DQog
DQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpAQCAtNTk4NiwxNiArNjA1MCwyMSBAQA0K
ICoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KICovDQogDQotdm9pZCBuY3JfaW5pdCAobmNi
X3AgbnAsIGNoYXIgKiBtc2csIHVfbG9uZyBjb2RlKQ0KK3ZvaWQgbmNyX2lu
aXQgKG5jYl9wIG5wLCBpbnQgcmVzZXQsIGNoYXIgKiBtc2csIHVfbG9uZyBj
b2RlKQ0KIHsNCiAJaW50CWk7DQogDQogCS8qDQotCSoqCVJlc2V0IGNoaXAu
DQorCSoqCVJlc2V0IGNoaXAgaWYgYXNrZWQsIG90aGVyd2lzZSBqdXN0IGNs
ZWFyIGZpZm9zLg0KIAkqLw0KLQ0KLQlPVVRCIChuY19pc3RhdCwgIFNSU1Qp
Ow0KLQlERUxBWSAoMTAwMDApOw0KKwlpZiAocmVzZXQpIHsNCisJCU9VVEIg
KG5jX2lzdGF0LCAgU1JTVCk7DQorCQlERUxBWSAoMTAwMDApOw0KKwl9DQor
CWVsc2Ugew0KKwkJT1VUQiAobmNfc3Rlc3QzLCBURXxDU0YpOw0KKwkJT1VU
T05CIChuY19jdGVzdDMsIENMRik7DQorCX0NCiANCiAJLyoNCiAJKioJTWVz
c2FnZS4NCkBAIC02NjkyLDcgKzY3NjEsNiBAQA0KIAl1X2xvbmcJdGhpc3Rp
bWUgPSBqaWZmaWVzOw0KIAl1X2xvbmcJY291bnQgPSAwOw0KIAljY2JfcCBj
cDsNCi0JdV9sb25nIGZsYWdzOw0KIA0KIAkvKg0KIAkqKglJZiByZWxlYXNl
IHByb2Nlc3MgaW4gcHJvZ3Jlc3MsIGxldCdzIGdvDQpAQCAtNjcyNSwxMSAr
Njc5Myw5IEBADQogCQlpZiAobnAtPnNldHRsZV90aW1lIDw9IHRoaXN0aW1l
KSB7DQogCQkJaWYgKGJvb3R2ZXJib3NlID4gMSkNCiAJCQkJcHJpbnRmKCIl
czogY29tbWFuZCBwcm9jZXNzaW5nIHJlc3VtZWRcbiIsIG5jcl9uYW1lKG5w
KSk7DQotCQkJc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOw0KIAkJCW5wLT5z
ZXR0bGVfdGltZQk9IDA7DQogCQkJbnAtPmRpc2MJPSAxOw0KIAkJCXJlcXVl
dWVfd2FpdGluZ19saXN0KG5wKTsNCi0JCQlyZXN0b3JlX2ZsYWdzKGZsYWdz
KTsNCiAJCX0NCiAJCXJldHVybjsNCiAJfQ0KQEAgLTY3NDMsOCArNjgwOSw2
IEBADQogCQkvKg0KIAkJKioJYmxvY2sgbmNyIGludGVycnVwdHMNCiAJCSov
DQotCQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7DQotDQogCQlucC0+bGFz
dHRpbWUgPSB0aGlzdGltZTsNCiANCiAJCS8qDQpAQCAtNjgzMSw3ICs2ODk1
LDYgQEANCiAjZW5kaWYNCiAJCQlPVVRCIChuY19pc3RhdCwgU0lHUCk7DQog
CQl9DQotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCiAJfQ0KIA0KICNpZmRl
ZiBTQ1NJX05DUl9CUk9LRU5fSU5UUg0KQEAgLTY4NDAsMTEgKzY5MDMsOSBA
QA0KIAkJLyoNCiAJCSoqCVByb2Nlc3MgcGVuZGluZyBpbnRlcnJ1cHRzLg0K
IAkJKi8NCi0JCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsNCiAJCWlmIChE
RUJVR19GTEFHUyAmIERFQlVHX1RJTlkpIHByaW50ZiAoInsiKTsNCiAJCW5j
cl9leGNlcHRpb24gKG5wKTsNCiAJCWlmIChERUJVR19GTEFHUyAmIERFQlVH
X1RJTlkpIHByaW50ZiAoIn0iKTsNCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3Mp
Ow0KIAl9DQogI2VuZGlmIC8qIFNDU0lfTkNSX0JST0tFTl9JTlRSICovDQog
fQ0KQEAgLTcwNjMsNyArNzEyNCw3IEBADQogCSovDQogDQogCWlmIChzaXN0
ICYgUlNUKSB7DQotCQluY3JfaW5pdCAobnAsIGJvb3R2ZXJib3NlID8gInNj
c2kgcmVzZXQiIDogTlVMTCwgSFNfUkVTRVQpOw0KKwkJbmNyX2luaXQgKG5w
LCAxLCBib290dmVyYm9zZSA/ICJzY3NpIHJlc2V0IiA6IE5VTEwsIEhTX1JF
U0VUKTsNCiAJCXJldHVybjsNCiAJfTsNCiANCkBAIC03MTg0LDcgKzcyNDUs
NyBAQA0KIAkJT1VUTCAobmNfZHNwLCBOQ0JfU0NSSVBUX1BIWVMgKG5wLCBz
dGFydCkpOw0KIAkJcmV0dXJuOw0KIAl9Ow0KLQluY3JfaW5pdCAobnAsICJz
ZWxlY3Rpb24gdGltZW91dCIsIEhTX0ZBSUwpOw0KKwluY3JfaW5pdCAobnAs
IDEsICJzZWxlY3Rpb24gdGltZW91dCIsIEhTX0ZBSUwpOw0KIAlucC0+ZGlz
YyA9IDE7DQogfQ0KIA0KQEAgLTcyMDksMTEgKzcyNzAsMTcgQEANCiB7DQog
CXVfY2hhciBzY3NpX21vZGUgPSBJTkIgKG5jX3N0ZXN0NCkgJiBTTU9ERTsN
CiANCi0JcHJpbnRmKCIlczogU0NTSSBidXMgbW9kZSBjaGFuZ2UgZnJvbSAl
eCB0byAleCwgcmVzZXR0aW5nIC4uLlxuIiwNCisJcHJpbnRmKCIlczogU0NT
SSBidXMgbW9kZSBjaGFuZ2UgZnJvbSAleCB0byAleC5cbiIsDQogCQluY3Jf
bmFtZShucCksIG5wLT5zY3NpX21vZGUsIHNjc2lfbW9kZSk7DQogDQogCW5w
LT5zY3NpX21vZGUgPSBzY3NpX21vZGU7DQotCW5jcl9zdGFydF9yZXNldChu
cCwgZHJpdmVyX3NldHVwLnNldHRsZV9kZWxheSk7DQorDQorCS8qDQorCSoq
CVN1c3BlbmQgY29tbWFuZCBwcm9jZXNzaW5nIGZvciAxIHNlY29uZCBhbmQg
DQorCSoqCXJlaW5pdGlhbGl6ZSBhbGwgZXhjZXB0IHRoZSBjaGlwLg0KKwkq
Lw0KKwlucC0+c2V0dGxlX3RpbWUJPSBqaWZmaWVzICsgSFo7DQorCW5jcl9p
bml0IChucCwgMCwgYm9vdHZlcmJvc2UgPyAic2NzaSBtb2RlIGNoYW5nZSIg
OiBOVUxMLCBIU19SRVNFVCk7DQogDQogCXJldHVybiAxOw0KIH0NCkBAIC04
ODEzLDcgKzg4ODAsNyBAQA0KIAlPVVRCKG5jX3N0ZXN0MywgSFNDKTsJCS8q
IEhhbHQgdGhlIHNjc2kgY2xvY2sJCSovDQogCU9VVEIobmNfc2NudGwzLAlz
Y250bDMpOw0KIAlPVVRCKG5jX3N0ZXN0MSwgKERCTEVOfERCTFNFTCkpOy8q
IFNlbGVjdCBjbG9jayBtdWx0aXBsaWVyCSovDQotCU9VVEIobmNfc3Rlc3Qz
LCAweDAwKTsJCS8qIFJlc3RhcnQgc2NzaSBjbG9jayAJCSovDQorCU9VVEIo
bmNfc3Rlc3QzLCAweDAwfFRFKTsJCS8qIFJlc3RhcnQgc2NzaSBjbG9jayAJ
CSovDQogfQ0KIA0KIA0KQEAgLTk3NTcsMjIgKzk4MjQsMzcgQEANCiANCiBp
bnQgbmNyNTNjOHh4X3F1ZXVlX2NvbW1hbmQgKFNjc2lfQ21uZCAqY21kLCB2
b2lkICgqIGRvbmUpKFNjc2lfQ21uZCAqKSkNCiB7DQorICAgICBuY2JfcCBu
cCA9ICgoc3RydWN0IGhvc3RfZGF0YSAqKSBjbWQtPmhvc3QtPmhvc3RkYXRh
KS0+bmNiOw0KKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCiAgICAgIGlu
dCBzdHM7DQorDQogI2lmZGVmIERFQlVHX05DUjUzQzhYWA0KIHByaW50aygi
bmNyNTNjOHh4X3F1ZXVlX2NvbW1hbmRcbiIpOw0KICNlbmRpZg0KIA0KLSAg
ICAgaWYgKChzdHMgPSBuY3JfcXVldWVfY29tbWFuZChjbWQsIGRvbmUpKSAh
PSBESURfT0spIHsNCisgICAgIGNtZC0+c2NzaV9kb25lICAgICA9IGRvbmU7
DQorICAgICBjbWQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOw0KKyAgICAgY21k
LT5TQ3AucHRyICAgICAgID0gTlVMTDsNCisgICAgIGNtZC0+U0NwLmJ1ZmZl
ciAgICA9IE5VTEw7DQorDQorICAgICBOQ1JfTE9DS19OQ0IobnAsIGZsYWdz
KTsNCisNCisgICAgIGlmICgoc3RzID0gbmNyX3F1ZXVlX2NvbW1hbmQobnAs
IGNtZCkpICE9IERJRF9PSykgew0KIAkgIGNtZC0+cmVzdWx0ID0gU2NzaVJl
c3VsdChzdHMsIDApOw0KLQkgIGRvbmUoY21kKTsNCiAjaWZkZWYgREVCVUdf
TkNSNTNDOFhYDQogcHJpbnRrKCJuY3I1M2M4eHggOiBjb21tYW5kIG5vdCBx
dWV1ZWQgLSByZXN1bHQ9JWRcbiIsIHN0cyk7DQogI2VuZGlmDQotICAgICAg
ICAgIHJldHVybiBzdHM7DQogICAgICB9DQogI2lmZGVmIERFQlVHX05DUjUz
QzhYWA0KKyAgICAgZWxzZQ0KIHByaW50aygibmNyNTNjOHh4IDogY29tbWFu
ZCBzdWNjZXNzZnVsbHkgcXVldWVkXG4iKTsNCiAjZW5kaWYNCisNCisgICAg
IE5DUl9VTkxPQ0tfTkNCKG5wLCBmbGFncyk7DQorDQorICAgICBpZiAoc3Rz
ICE9IERJRF9PSykNCisgICAgICAgICAgZG9uZShjbWQpOw0KKw0KICAgICAg
cmV0dXJuIHN0czsNCiB9DQogDQpAQCAtOTc4NiwyMSArOTg2OCwzNiBAQA0K
IA0KICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gTGludXhWZXJzaW9uQ29k
ZSgxLDMsNzApDQogc3RhdGljIHZvaWQgbmNyNTNjOHh4X2ludHIoaW50IGly
cSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpDQorI2Vs
c2UNCitzdGF0aWMgdm9pZCBuY3I1M2M4eHhfaW50cjIoaW50IGlycSwgdm9p
ZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpDQorI2VuZGlmDQog
ew0KICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCisgICAgIG5jYl9wIG5w
ID0gKG5jYl9wKSBkZXZfaWQ7DQorICAgICBTY3NpX0NtbmQgKmRvbmVfbGlz
dDsNCiANCiAjaWZkZWYgREVCVUdfTkNSNTNDOFhYDQogICAgICBwcmludGso
Im5jcjUzYzh4eCA6IGludGVycnVwdCByZWNlaXZlZFxuIik7DQogI2VuZGlm
DQogDQogICAgICBpZiAoREVCVUdfRkxBR1MgJiBERUJVR19USU5ZKSBwcmlu
dGYgKCJbIik7DQotICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVz
dF9sb2NrLCBmbGFncyk7DQotICAgICBuY3JfZXhjZXB0aW9uKChuY2JfcCkg
ZGV2X2lkKTsNCi0gICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3Jl
cXVlc3RfbG9jaywgZmxhZ3MpOw0KKw0KKyAgICAgTkNSX0xPQ0tfTkNCKG5w
LCBmbGFncyk7DQorICAgICBuY3JfZXhjZXB0aW9uKG5wKTsNCisgICAgIGRv
bmVfbGlzdCAgICAgPSBucC0+ZG9uZV9saXN0Ow0KKyAgICAgbnAtPmRvbmVf
bGlzdCA9IDA7DQorICAgICBOQ1JfVU5MT0NLX05DQihucCwgZmxhZ3MpOw0K
Kw0KICAgICAgaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfVElOWSkgcHJpbnRm
ICgiXVxuIik7DQorDQorICAgICBpZiAoZG9uZV9saXN0KSB7DQorICAgICAg
ICAgIE5DUl9MT0NLX1NDU0lfRE9ORShucCwgZmxhZ3MpOw0KKyAgICAgICAg
ICBuY3JfZmx1c2hfZG9uZV9jbWRzKGRvbmVfbGlzdCk7DQorICAgICAgICAg
IE5DUl9VTkxPQ0tfU0NTSV9ET05FKG5wLCBmbGFncyk7DQorICAgICB9DQog
fQ0KIA0KLSNlbHNlDQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IExpbnV4
VmVyc2lvbkNvZGUoMSwzLDcwKQ0KIHN0YXRpYyB2b2lkIG5jcjUzYzh4eF9p
bnRyKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICogcmVncykNCiB7DQogICAg
ICBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0Ow0KQEAgLTk4MDksOSArOTkwNiw4
IEBADQogICAgICBmb3IgKGhvc3QgPSBmaXJzdF9ob3N0OyBob3N0OyBob3N0
ID0gaG9zdC0+bmV4dCkgew0KIAkgIGlmIChob3N0LT5ob3N0dCA9PSB0aGVf
dGVtcGxhdGUgJiYgaG9zdC0+aXJxID09IGlycSkgew0KIAkgICAgICAgaG9z
dF9kYXRhID0gKHN0cnVjdCBob3N0X2RhdGEgKikgaG9zdC0+aG9zdGRhdGE7
DQotICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfVElO
WSkgcHJpbnRmICgiWyIpOw0KLSAgICAgICAgICAgICAgIG5jcl9leGNlcHRp
b24oaG9zdF9kYXRhLT5uY2IpOw0KLSAgICAgICAgICAgICAgIGlmIChERUJV
R19GTEFHUyAmIERFQlVHX1RJTlkpIHByaW50ZiAoIl1cbiIpOw0KKw0KKyAg
ICAgICAgICAgICAgIG5jcjUzYzh4eF9pbnRyMihpcnEsIGhvc2hvc3RfZGF0
YS0+bmNiLCByZWdzKTsNCiAJICB9DQogICAgICB9DQogfQ0KQEAgLTk4MjEs
OSArOTkxNywyMyBAQA0KICoqICAgTGludXggZW50cnkgcG9pbnQgb2YgdGhl
IHRpbWVyIGhhbmRsZXINCiAqLw0KIA0KLXN0YXRpYyB2b2lkIG5jcjUzYzh4
eF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgbnApDQorc3RhdGljIHZvaWQgbmNy
NTNjOHh4X3RpbWVvdXQodW5zaWduZWQgbG9uZyBucHJlZikNCiB7DQorICAg
ICBuY2JfcCBucCA9IChuY2JfcCkgbnByZWY7DQorICAgICB1bnNpZ25lZCBs
b25nIGZsYWdzOw0KKyAgICAgU2NzaV9DbW5kICpkb25lX2xpc3Q7DQorDQor
ICAgICBOQ1JfTE9DS19OQ0IobnAsIGZsYWdzKTsNCiAgICAgIG5jcl90aW1l
b3V0KChuY2JfcCkgbnApOw0KKyAgICAgZG9uZV9saXN0ICAgICA9IG5wLT5k
b25lX2xpc3Q7DQorICAgICBucC0+ZG9uZV9saXN0ID0gMDsNCisgICAgIE5D
Ul9VTkxPQ0tfTkNCKG5wLCBmbGFncyk7DQorDQorICAgICBpZiAoZG9uZV9s
aXN0KSB7DQorICAgICAgICAgIE5DUl9MT0NLX1NDU0lfRE9ORShucCwgZmxh
Z3MpOw0KKyAgICAgICAgICBuY3JfZmx1c2hfZG9uZV9jbWRzKGRvbmVfbGlz
dCk7DQorICAgICAgICAgIE5DUl9VTkxPQ0tfU0NTSV9ET05FKG5wLCBmbGFn
cyk7DQorICAgICB9DQogfQ0KIA0KIC8qDQpAQCAtOTgzNCwxMyArOTk0NCwx
NSBAQA0KIA0KIGludCBuY3I1M2M4eHhfcmVzZXQoU2NzaV9DbW5kICpjbWQs
IHVuc2lnbmVkIGludCByZXNldF9mbGFncykNCiB7DQorCW5jYl9wIG5wID0g
KChzdHJ1Y3QgaG9zdF9kYXRhICopIGNtZC0+aG9zdC0+aG9zdGRhdGEpLT5u
Y2I7DQogCWludCBzdHM7DQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCVNj
c2lfQ21uZCAqZG9uZV9saXN0Ow0KIA0KIAlwcmludGsoIm5jcjUzYzh4eF9y
ZXNldDogcGlkPSVsdSByZXNldF9mbGFncz0leCBzZXJpYWxfbnVtYmVyPSVs
ZCBzZXJpYWxfbnVtYmVyX2F0X3RpbWVvdXQ9JWxkXG4iLA0KIAkJY21kLT5w
aWQsIHJlc2V0X2ZsYWdzLCBjbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+c2Vy
aWFsX251bWJlcl9hdF90aW1lb3V0KTsNCiANCi0Jc2F2ZV9mbGFncyhmbGFn
cyk7IGNsaSgpOw0KKwlOQ1JfTE9DS19OQ0IobnAsIGZsYWdzKTsNCiANCiAJ
LyoNCiAJICogV2UgaGF2ZSB0byBqdXN0IGlnbm9yZSByZXNldCByZXF1ZXN0
cyBpbiBzb21lIHNpdHVhdGlvbnMuDQpAQCAtOTg1OCw3ICs5OTcwLDcgQEAN
CiAJICogYmVmb3JlIHJldHVybmluZyBTQ1NJX1JFU0VUX1NVQ0NFU1MuDQog
CSAqLw0KIA0KLQlzdHMgPSBuY3JfcmVzZXRfYnVzKGNtZCwNCisJc3RzID0g
bmNyX3Jlc2V0X2J1cyhucCwgY21kLA0KIAkocmVzZXRfZmxhZ3MgJiAoU0NT
SV9SRVNFVF9TWU5DSFJPTk9VUyB8IFNDU0lfUkVTRVRfQVNZTkNIUk9OT1VT
KSkgPT0gU0NTSV9SRVNFVF9TWU5DSFJPTk9VUyk7DQogCS8qDQogCSAqIFNp
bmNlIHdlIGFsd2F5cyByZXNldCB0aGUgY29udHJvbGxlciwgd2hlbiB3ZSBy
ZXR1cm4gc3VjY2VzcywgDQpAQCAtOTg3MCw3ICs5OTgyLDEyIEBADQogI2Vu
ZGlmDQogDQogb3V0Og0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCisJZG9u
ZV9saXN0ICAgICA9IG5wLT5kb25lX2xpc3Q7DQorCW5wLT5kb25lX2xpc3Qg
PSAwOw0KKwlOQ1JfVU5MT0NLX05DQihucCwgZmxhZ3MpOw0KKw0KKwluY3Jf
Zmx1c2hfZG9uZV9jbWRzKGRvbmVfbGlzdCk7DQorDQogCXJldHVybiBzdHM7
DQogfQ0KICNlbHNlDQpAQCAtOTg4NSwxOCArMTAwMDIsMjMgQEANCiAqKiAg
IExpbnV4IGVudHJ5IHBvaW50IG9mIGFib3J0KCkgZnVuY3Rpb24NCiAqLw0K
IA0KLSNpZiBkZWZpbmVkIFNDU0lfUkVTRVRfU1lOQ0hST05PVVMgJiYgZGVm
aW5lZCBTQ1NJX1JFU0VUX0FTWU5DSFJPTk9VUw0KLQ0KIGludCBuY3I1M2M4
eHhfYWJvcnQoU2NzaV9DbW5kICpjbWQpDQogew0KKwluY2JfcCBucCA9ICgo
c3RydWN0IGhvc3RfZGF0YSAqKSBjbWQtPmhvc3QtPmhvc3RkYXRhKS0+bmNi
Ow0KIAlpbnQgc3RzOw0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlTY3Np
X0NtbmQgKmRvbmVfbGlzdDsNCiANCisjaWYgZGVmaW5lZCBTQ1NJX1JFU0VU
X1NZTkNIUk9OT1VTICYmIGRlZmluZWQgU0NTSV9SRVNFVF9BU1lOQ0hST05P
VVMNCiAJcHJpbnRrKCJuY3I1M2M4eHhfYWJvcnQ6IHBpZD0lbHUgc2VyaWFs
X251bWJlcj0lbGQgc2VyaWFsX251bWJlcl9hdF90aW1lb3V0PSVsZFxuIiwN
CiAJCWNtZC0+cGlkLCBjbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+c2VyaWFs
X251bWJlcl9hdF90aW1lb3V0KTsNCisjZWxzZQ0KKwlwcmludGsoIm5jcjUz
Yzh4eF9hYm9ydDogY29tbWFuZCBwaWQgJWx1XG4iLCBjbWQtPnBpZCk7DQor
I2VuZGlmDQogDQotCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsNCisJTkNS
X0xPQ0tfTkNCKG5wLCBmbGFncyk7DQogDQorI2lmIGRlZmluZWQgU0NTSV9S
RVNFVF9TWU5DSFJPTk9VUyAmJiBkZWZpbmVkIFNDU0lfUkVTRVRfQVNZTkNI
Uk9OT1VTDQogCS8qDQogCSAqIFdlIGhhdmUgdG8ganVzdCBpZ25vcmUgYWJv
cnQgcmVxdWVzdHMgaW4gc29tZSBzaXR1YXRpb25zLg0KIAkgKi8NCkBAIC05
OTA0LDE5ICsxMDAyNiwxOSBAQA0KIAkJc3RzID0gU0NTSV9BQk9SVF9OT1Rf
UlVOTklORzsNCiAJCWdvdG8gb3V0Ow0KIAl9DQorI2VuZGlmDQogDQotCXN0
cyA9IG5jcl9hYm9ydF9jb21tYW5kKGNtZCk7DQorCXN0cyA9IG5jcl9hYm9y
dF9jb21tYW5kKG5wLCBjbWQpOw0KIG91dDoNCi0JcmVzdG9yZV9mbGFncyhm
bGFncyk7DQorCWRvbmVfbGlzdCAgICAgPSBucC0+ZG9uZV9saXN0Ow0KKwlu
cC0+ZG9uZV9saXN0ID0gMDsNCisJTkNSX1VOTE9DS19OQ0IobnAsIGZsYWdz
KTsNCisNCisJbmNyX2ZsdXNoX2RvbmVfY21kcyhkb25lX2xpc3QpOw0KKw0K
IAlyZXR1cm4gc3RzOw0KIH0NCi0jZWxzZQ0KLWludCBuY3I1M2M4eHhfYWJv
cnQoU2NzaV9DbW5kICpjbWQpDQotew0KLQlwcmludGsoIm5jcjUzYzh4eF9h
Ym9ydDogY29tbWFuZCBwaWQgJWx1XG4iLCBjbWQtPnBpZCk7DQotCXJldHVy
biBuY3JfYWJvcnRfY29tbWFuZChjbWQpOw0KLX0NCi0jZW5kaWYNCisNCiAN
CiAjaWZkZWYgTU9EVUxFDQogaW50IG5jcjUzYzh4eF9yZWxlYXNlKHN0cnVj
dCBTY3NpX0hvc3QgKmhvc3QpDQpAQCAtOTk5OSwxNCArMTAxMjEsMTQgQEAN
CiAjaWZkZWYgREVCVUdfV0FJVElOR19MSVNUDQogCXByaW50ZigiJXM6IGNt
ZCAlbHggdHJ5aW5nIHRvIHJlcXVldWVcbiIsIG5jcl9uYW1lKG5wKSwgKHVf
bG9uZykgd2NtZCk7DQogI2VuZGlmDQotCQkJc3RzID0gbmNyX3F1ZXVlX2Nv
bW1hbmQod2NtZCwgd2NtZC0+c2NzaV9kb25lKTsNCisJCQlzdHMgPSBuY3Jf
cXVldWVfY29tbWFuZChucCwgd2NtZCk7DQogCQl9DQogCQlpZiAoc3RzICE9
IERJRF9PSykgew0KICNpZmRlZiBERUJVR19XQUlUSU5HX0xJU1QNCiAJcHJp
bnRmKCIlczogY21kICVseCBkb25lIGZvcmNlZCBzdHM9JWRcbiIsIG5jcl9u
YW1lKG5wKSwgKHVfbG9uZykgd2NtZCwgc3RzKTsNCiAjZW5kaWYNCiAJCQl3
Y21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KHN0cywgMCk7DQotCQkJd2NtZC0+
c2NzaV9kb25lKHdjbWQpOw0KKwkJCW5jcl9xdWV1ZV9kb25lX2NtZChucCwg
d2NtZCk7DQogCQl9DQogCX0NCiB9DQpAQCAtMTAyODAsOSArMTA0MDIsOSBA
QA0KIAllbHNlIHsNCiAJCWxvbmcgZmxhZ3M7DQogDQotCQlzYXZlX2ZsYWdz
KGZsYWdzKTsgY2xpKCk7DQorCQlOQ1JfTE9DS19OQ0IobnAsIGZsYWdzKTsN
CiAJCW5jcl91c2VyY21kIChucCk7DQotCQlyZXN0b3JlX2ZsYWdzKGZsYWdz
KTsNCisJCU5DUl9VTkxPQ0tfTkNCKG5wLCBmbGFncyk7DQogCX0NCiAJcmV0
dXJuIGxlbmd0aDsNCiB9DQo=
--8323328-59187499-892397794=:395--

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