Andre Hedrick wrote:
>
>
> > I am also seeing an occasional Ooops when using **FULL** linux AIO (I
> > call ll_rw_blk and don't call wait on buffer, instead signal the NWFS
> > LRU directly from the b_end_io callback routine). Also, do I have to
> > call run_task_queue(&tq_disk) call all the time to get the AIO subsystem
>
> HUH?
This is what I said too when I saw this. Here's the question of the
day. Take a look at the aReadDiskSector, aWriteSectors, and
aFillSectors functions in the attached, and let me know if you see why I
have to call the tq_disk queue all the time.
Jeff
>
> > to post the buffer-head request. If I don't call it, then the AIO's
> > just sit there and get processed about one every 10 seconds (???).
>
> Andre Hedrick
> The Linux ATA/IDE guy
--------------D425187AC46229B4DFF3015B
Content-Type: application/x-unknown-content-type-cfile;
name="Aio.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="Aio.c"
DQojaW5jbHVkZSAiZ2xvYmFscy5oIg0KDQojaWYgKExJTlVYXzIwIHwgTElOVVhfMjIgfCBM
SU5VWF8yNCkNCg0KZXh0ZXJuIFVMT05HIGluc2VydF9pbyhVTE9ORyBkaXNrLCBBU1lOQ0hf
SU8gKmlvKTsNCmV4dGVybiB2b2lkIFJ1bkFzeW5jaElPUXVldWUoVUxPTkcgZGlzayk7DQpl
eHRlcm4gdm9pZCBwcm9maWxlX2NvbXBsZXRlKHZvaWQpOw0KDQojaWYgKExJTlVYXzIyIHwg
TElOVVhfMjQpDQprbWVtX2NhY2hlX3QgKmJoX3AgPSAwOw0KI2VuZGlmDQoNCi8vDQovLyAg
bG93IGxldmVsIGRpc2sgc2VjdG9yIGludGVyZmFjZSByb3V0aW5lcw0KLy8NCg0KI2RlZmlu
ZSBBSU9fU0lHTkFUVVJFICAoVUxPTkcpIkFJT0QiDQoNCnR5cGVkZWYgc3RydWN0IF9BSU9f
REVTQ1JJUFRPUg0Kew0KICAgc3RydWN0IGJ1ZmZlcl9oZWFkIGJoOw0KICAgQVNZTkNIX0lP
ICppbzsNCiAgIFVMT05HIHNpZ25hdHVyZTsNCn0gQUlPX0RFU0NSSVBUT1I7DQoNCnN0cnVj
dCBidWZmZXJfaGVhZCAqYmhfaGVhZCA9IDA7DQpzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Rh
aWwgPSAwOw0KVUxPTkcgYmhfY291bnQgPSAwOw0KDQojaWYgKExJTlVYX1NMRUVQKQ0KTldG
U0luaXRNdXRleChiaF9zZW1hcGhvcmUpOw0KI2VuZGlmDQoNCnZvaWQgbG9ja19iaF9mcmVl
KHZvaWQpDQp7DQojaWYgKExJTlVYX1NMRUVQKQ0KICAgIGlmIChXYWl0T25TZW1hcGhvcmUo
JmJoX3NlbWFwaG9yZSkgPT0gLUVJTlRSKQ0KICAgICAgIE5XRlNQcmludCgibG9jayBiaCB3
YXMgaW50ZXJydXB0ZWRcbiIpOw0KI2VuZGlmDQp9DQoNCnZvaWQgdW5sb2NrX2JoX2ZyZWUo
dm9pZCkNCnsNCiNpZiAoTElOVVhfU0xFRVApDQogICAgU2lnbmFsU2VtYXBob3JlKCZiaF9z
ZW1hcGhvcmUpOw0KI2VuZGlmDQp9DQoNCnZvaWQgcHV0X2JoKHN0cnVjdCBidWZmZXJfaGVh
ZCAqYmgpDQp7DQogICAgbG9ja19iaF9mcmVlKCk7DQoNCiNpZiAoQ09OU0VSVkVfTUVNT1JZ
KQ0KICAgIGlmIChiaF9jb3VudCA+IE1BWF9CVUZGRVJfSEVBRFMpDQogICAgew0KICAgICAg
IHVubG9ja19iaF9mcmVlKCk7DQojaWYgKExJTlVYXzIwKQ0KICAgICAgIGtmcmVlKGJoKTsN
CiNlbGlmIChMSU5VWF8yMiB8IExJTlVYXzI0KQ0KICAgICAgIGlmIChiaF9wKQ0KICAgICAg
ICAgIGttZW1fY2FjaGVfZnJlZShiaF9wLCBiaCk7DQojZWxzZQ0KICAgICAgIE5XRlNGcmVl
KGJoKTsNCiNlbmRpZg0KICAgICAgIHJldHVybjsNCiAgICB9DQojZW5kaWYNCg0KICAgIGlm
ICghYmhfaGVhZCkNCiAgICB7DQogICAgICAgYmhfaGVhZCA9IGJoX3RhaWwgPSBiaDsNCiAg
ICAgICBiaC0+Yl9uZXh0X2ZyZWUgPSBiaC0+Yl9wcmV2X2ZyZWUgPSAwOw0KICAgIH0NCiAg
ICBlbHNlDQogICAgew0KICAgICAgIGJoX3RhaWwtPmJfbmV4dF9mcmVlID0gYmg7DQogICAg
ICAgYmgtPmJfbmV4dF9mcmVlID0gMDsNCiAgICAgICBiaC0+Yl9wcmV2X2ZyZWUgPSBiaF90
YWlsOw0KICAgICAgIGJoX3RhaWwgPSBiaDsNCiAgICB9DQogICAgYmhfY291bnQrKzsNCg0K
ICAgIHVubG9ja19iaF9mcmVlKCk7DQogICAgcmV0dXJuOw0KfQ0KDQpzdHJ1Y3QgYnVmZmVy
X2hlYWQgKmdldF9iaCh2b2lkKQ0Kew0KICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7DQoN
CiNpZiAoTElOVVhfMjIgfCBMSU5VWF8yNCkNCiAgICBpZiAoIWJoX3ApDQogICAgew0KICAg
ICAgIGJoX3AgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibndmc19idWZmZXJfaGVhZCIsIHNpemVv
ZihBSU9fREVTQ1JJUFRPUiksDQoJCQkgICAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwg
TlVMTCwgTlVMTCk7DQogICAgICAgaWYgKCFiaF9wKQ0KICAgICAgIHsNCiAgICAgICAgICBO
V0ZTUHJpbnQoIkNhbm5vdCBjcmVhdGUgYnVmZmVyIGhlYWQgU0xBQiBjYWNoZVxuIik7DQog
ICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgfQ0KICAgIH0NCiNlbmRpZg0KDQogICAgbG9j
a19iaF9mcmVlKCk7DQogICAgaWYgKGJoX2hlYWQpDQogICAgew0KICAgICAgIGJoID0gYmhf
aGVhZDsNCiAgICAgICBiaF9oZWFkID0gYmgtPmJfbmV4dF9mcmVlOw0KICAgICAgIGlmIChi
aF9oZWFkKQ0KCSAgYmhfaGVhZC0+Yl9wcmV2X2ZyZWUgPSBOVUxMOw0KICAgICAgIGVsc2UN
CgkgIGJoX3RhaWwgPSBOVUxMOw0KDQogICAgICAgaWYgKGJoX2NvdW50KQ0KCSAgYmhfY291
bnQtLTsNCg0KICAgICAgIGJoLT5iX25leHRfZnJlZSA9IGJoLT5iX3ByZXZfZnJlZSA9IDA7
DQogICAgICAgdW5sb2NrX2JoX2ZyZWUoKTsNCg0KICAgICAgIE5XRlNTZXQoYmgsIDAsIHNp
emVvZihBSU9fREVTQ1JJUFRPUikpOw0KICAgICAgIHJldHVybiBiaDsNCiAgICB9DQogICAg
ZWxzZQ0KICAgIHsNCiAgICAgICB1bmxvY2tfYmhfZnJlZSgpOw0KDQojaWYgKExJTlVYXzIw
KQ0KICAgICAgIGJoID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKWttYWxsb2Moc2l6ZW9mKEFJ
T19ERVNDUklQVE9SKSwgR0ZQX0JVRkZFUik7DQojZWxpZiAoTElOVVhfMjIgfCBMSU5VWF8y
NCkNCiAgICAgICBiaCA9IChzdHJ1Y3QgYnVmZmVyX2hlYWQgKilrbWVtX2NhY2hlX2FsbG9j
KGJoX3AsIFNMQUJfQlVGRkVSKTsNCiNlbHNlDQogICAgICAgYmggPSAoc3RydWN0IGJ1ZmZl
cl9oZWFkICopTldGU0lPQWxsb2Moc2l6ZW9mKEFJT19ERVNDUklQVE9SKSwgQkhfVEFHKTsN
CiNlbmRpZg0KICAgICAgIGlmICghYmgpDQoJICByZXR1cm4gMDsNCg0KICAgICAgIE5XRlNT
ZXQoYmgsIDAsIHNpemVvZihBSU9fREVTQ1JJUFRPUikpOw0KICAgICAgIHJldHVybiBiaDsN
CiAgICB9DQogICAgdW5sb2NrX2JoX2ZyZWUoKTsNCiAgICByZXR1cm4gMDsNCn0NCg0Kdm9p
ZCBmcmVlX2JoX2xpc3Qodm9pZCkNCnsNCiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOw0K
DQogICAgbG9ja19iaF9mcmVlKCk7DQogICAgd2hpbGUgKGJoX2hlYWQpDQogICAgew0KICAg
ICAgIGJoID0gYmhfaGVhZDsNCiAgICAgICBiaF9oZWFkID0gYmgtPmJfbmV4dF9mcmVlOw0K
DQogICAgICAgaWYgKGJoX2NvdW50KQ0KCSAgYmhfY291bnQtLTsNCg0KI2lmIChMSU5VWF8y
MCkNCiAgICAgICBrZnJlZShiaCk7DQojZWxpZiAoTElOVVhfMjIgfCBMSU5VWF8yNCkNCiAg
ICAgICBpZiAoYmhfcCkNCiAgICAgICAgICBrbWVtX2NhY2hlX2ZyZWUoYmhfcCwgYmgpOw0K
I2Vsc2UNCiAgICAgICBOV0ZTRnJlZShiaCk7DQojZW5kaWYNCiAgICB9DQogICAgYmhfaGVh
ZCA9IGJoX3RhaWwgPSAwOw0KICAgIHVubG9ja19iaF9mcmVlKCk7DQogICAgcmV0dXJuOw0K
fQ0KDQojaWYgKExJTlVYX0JVRkZFUl9DQUNIRSkNCg0KLy8NCi8vICBUaGUgMi4yLlggYnVm
ZmVyIGNhY2hlIGlzIG5vdCBTTVAgdGhyZWFkIHNhZmUsDQovLyAgc28gbG9jayB0aGUga2Vy
bmVsIHdoZW4gd2UgZW50ZXIgaXQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbg0KLy8g
IGZyb20gb2NjdXJyaW5nIG9uIFNNUCBzeXN0ZW1zLg0KLy8NCg0KVUxPTkcgcFJlYWREaXNr
U2VjdG9ycyhVTE9ORyBkaXNrLCBVTE9ORyBTdGFydGluZ0xCQSwgQllURSAqU2VjdG9yLA0K
CQkgICAgICBVTE9ORyBzZWN0b3JzLCBVTE9ORyByZWFkQWhlYWQpDQp7DQogICAgcmVnaXN0
ZXIgVUxPTkcgaSwgYnl0ZXNSZWFkID0gMDsNCiAgICByZWdpc3RlciBVTE9ORyBicHM7DQog
ICAgcmVnaXN0ZXIgTldESVNLICpOV0Rpc2s7DQogICAgcmVnaXN0ZXIgVUxPTkcgcmVhZF9l
cnJvciA9IDA7DQogICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaFtzZWN0b3JzXTsNCg0KICAg
IE5XRGlzayA9IFN5c3RlbURpc2tbZGlza107DQogICAgYnBzID0gTldEaXNrLT5CeXRlc1Bl
clNlY3RvcjsNCg0KI2lmIChWRVJCT1NFKQ0KICAgIE5XRlNQcmludCgicmVhZCBkaXNrLSVk
IGxiYS0lZCBmb3IgJWQgc2VjdG9yc1xuIiwgDQoJICAgICAoaW50KWRpc2ssIChpbnQpU3Rh
cnRpbmdMQkEsIChpbnQpc2VjdG9ycyk7DQojZW5kaWYNCiAgICANCiNpZiAoTElOVVhfMjIp
DQogICAgbG9ja19rZXJuZWwoKTsNCiNlbmRpZg0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9y
czsgaSsrKQ0KICAgIHsNCiAgICAgICBpZiAoIShiaFtpXSA9IGdldGJsaygoVUxPTkcpTldE
aXNrLT5QaHlzaWNhbERpc2tIYW5kbGUsDQoJCQkgICAgKFN0YXJ0aW5nTEJBICsgaSksIGJw
cykpKQ0KICAgICAgIHsNCgkgIGZvciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KCSAgICAg
aWYgKGJoW2ldKQ0KCQlicmVsc2UoYmhbaV0pOw0KI2lmIChMSU5VWF8yMikNCiAgICAgICAg
ICB1bmxvY2tfa2VybmVsKCk7DQojZW5kaWYNCgkgIHJldHVybiAwOw0KICAgICAgIH0NCiAg
ICB9DQoNCiAgICBsbF9yd19ibG9jayhSRUFELCBzZWN0b3JzLCBiaCk7DQogICAgZm9yKGk9
MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAgICAgd2FpdF9vbl9idWZmZXIoYmhb
aV0pOw0KICAgICAgIGlmIChidWZmZXJfdXB0b2RhdGUoYmhbaV0pKQ0KICAgICAgIHsNCgkg
IE5XRlNDb3B5KCZTZWN0b3JbaSAqIGJwc10sIGJoW2ldLT5iX2RhdGEsIGJwcyk7DQoJICBi
eXRlc1JlYWQgKz0gYnBzOw0KICAgICAgIH0NCiAgICAgICBlbHNlDQoJICByZWFkX2Vycm9y
ID0gMTsNCiAgICAgICBicmVsc2UoYmhbaV0pOw0KICAgIH0NCiNpZiAoTElOVVhfMjIpDQog
ICAgdW5sb2NrX2tlcm5lbCgpOw0KI2VuZGlmDQoNCiNpZiAoUFJPRklMRV9BSU8pDQogICAg
cHJvZmlsZV9jb21wbGV0ZSgpOw0KI2VuZGlmDQoNCiAgICByZXR1cm4gKHJlYWRfZXJyb3Ig
PyAwIDogYnl0ZXNSZWFkKTsNCg0KfQ0KDQpVTE9ORyBwV3JpdGVEaXNrU2VjdG9ycyhVTE9O
RyBkaXNrLCBVTE9ORyBTdGFydGluZ0xCQSwgQllURSAqU2VjdG9yLA0KCQkgICAgICAgVUxP
Tkcgc2VjdG9ycywgVUxPTkcgcmVhZEFoZWFkKQ0Kew0KICAgIHJlZ2lzdGVyIFVMT05HIGks
IGJ5dGVzV3JpdHRlbiA9IDA7DQogICAgcmVnaXN0ZXIgVUxPTkcgYnBzOw0KICAgIHN0cnVj
dCBidWZmZXJfaGVhZCAqYmhbc2VjdG9yc107DQogICAgcmVnaXN0ZXIgVUxPTkcgd3JpdGVf
ZXJyb3IgPSAwOw0KICAgIHJlZ2lzdGVyIE5XRElTSyAqTldEaXNrOw0KDQogICAgTldEaXNr
ID0gU3lzdGVtRGlza1tkaXNrXTsNCiAgICBicHMgPSBOV0Rpc2stPkJ5dGVzUGVyU2VjdG9y
Ow0KDQojaWYgKFZFUkJPU0UpDQogICAgTldGU1ByaW50KCJ3cml0ZSBkaXNrLSVkIGxiYS0l
ZCBmb3IgJWQgc2VjdG9yc1xuIiwNCgkgICAgIChpbnQpZGlzaywgKGludClTdGFydGluZ0xC
QSwgKGludClzZWN0b3JzKTsNCiNlbmRpZg0KDQojaWYgKExJTlVYXzIyKQ0KICAgIGxvY2tf
a2VybmVsKCk7DQojZW5kaWYNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAg
ICB7DQogICAgICAgaWYgKCEoYmhbaV0gPSBnZXRibGsoKFVMT05HKU5XRGlzay0+UGh5c2lj
YWxEaXNrSGFuZGxlLA0KCQkJICAgIChTdGFydGluZ0xCQSArIGkpLCBicHMpKSkNCiAgICAg
ICB7DQoJICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCgkgICAgIGlmIChiaFtpXSkN
CgkJYnJlbHNlKGJoW2ldKTsNCiNpZiAoTElOVVhfMjIpDQogICAgICAgICAgdW5sb2NrX2tl
cm5lbCgpOw0KI2VuZGlmDQoJICByZXR1cm4gMDsNCiAgICAgICB9DQogICAgICAgTldGU0Nv
cHkoYmhbaV0tPmJfZGF0YSwgJlNlY3RvcltpICogYnBzXSwgYnBzKTsNCiAgICAgICBtYXJr
X2J1ZmZlcl91cHRvZGF0ZShiaFtpXSwgMSk7DQogICAgICAgbWFya19idWZmZXJfZGlydHko
YmhbaV0sIDApOw0KICAgICAgIGJ5dGVzV3JpdHRlbiArPSBicHM7DQogICAgfQ0KDQogICAg
bGxfcndfYmxvY2soV1JJVEUsIHNlY3RvcnMsIGJoKTsNCiAgICBmb3IgKGk9MDsgaSA8IHNl
Y3RvcnM7IGkrKykNCiAgICB7DQogICAgICAgd2FpdF9vbl9idWZmZXIoYmhbaV0pOw0KICAg
ICAgIGlmICghYnVmZmVyX3VwdG9kYXRlKGJoW2ldKSkNCgkgIHdyaXRlX2Vycm9yID0gMTsN
CiAgICAgICBicmVsc2UoYmhbaV0pOw0KICAgIH0NCiNpZiAoTElOVVhfMjIpDQogICAgdW5s
b2NrX2tlcm5lbCgpOw0KI2VuZGlmDQoNCiNpZiAoUFJPRklMRV9BSU8pDQogICAgcHJvZmls
ZV9jb21wbGV0ZSgpOw0KI2VuZGlmDQoNCiAgICByZXR1cm4gKHdyaXRlX2Vycm9yID8gMCA6
IGJ5dGVzV3JpdHRlbik7DQoNCn0NCg0KVUxPTkcgcFplcm9GaWxsRGlza1NlY3RvcnMoVUxP
TkcgZGlzaywgVUxPTkcgU3RhcnRpbmdMQkEsIFVMT05HIHNlY3RvcnMsDQoJCQkgIFVMT05H
IHJlYWRBaGVhZCkNCnsNCiAgICByZWdpc3RlciBVTE9ORyBpLCBieXRlc1dyaXR0ZW4gPSAw
Ow0KICAgIHJlZ2lzdGVyIFVMT05HIGJwczsNCiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJo
W3NlY3RvcnNdOw0KICAgIHJlZ2lzdGVyIFVMT05HIHdyaXRlX2Vycm9yID0gMDsNCiAgICBy
ZWdpc3RlciBOV0RJU0sgKk5XRGlzazsNCg0KICAgIE5XRGlzayA9IFN5c3RlbURpc2tbZGlz
a107DQogICAgYnBzID0gTldEaXNrLT5CeXRlc1BlclNlY3RvcjsNCg0KI2lmIChWRVJCT1NF
KQ0KICAgIE5XRlNQcmludCgiemVybyBkaXNrLSVkIGxiYS0lZCBmb3IgJWQgc2VjdG9yc1xu
IiwgDQoJICAgICAoaW50KWRpc2ssIChpbnQpU3RhcnRpbmdMQkEsIChpbnQpc2VjdG9ycyk7
DQojZW5kaWYNCiAgICANCiNpZiAoTElOVVhfMjIpDQogICAgbG9ja19rZXJuZWwoKTsNCiNl
bmRpZg0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAgICAgICBp
ZiAoIShiaFtpXSA9IGdldGJsaygoVUxPTkcpTldEaXNrLT5QaHlzaWNhbERpc2tIYW5kbGUs
DQoJCQkgIChTdGFydGluZ0xCQSArIGkpLCBicHMpKSkNCiAgICAgICB7DQoJICBmb3IgKGk9
MDsgaSA8IHNlY3RvcnM7IGkrKykNCgkgICAgIGlmIChiaFtpXSkNCgkJYnJlbHNlKGJoW2ld
KTsNCiNpZiAoTElOVVhfMjIpDQogICAgICAgICAgdW5sb2NrX2tlcm5lbCgpOw0KI2VuZGlm
DQoJICByZXR1cm4gMDsNCiAgICAgICB9DQogICAgICAgTldGU1NldChiaFtpXS0+Yl9kYXRh
LCAwLCBicHMpOw0KICAgICAgIG1hcmtfYnVmZmVyX3VwdG9kYXRlKGJoW2ldLCAxKTsNCiAg
ICAgICBtYXJrX2J1ZmZlcl9kaXJ0eShiaFtpXSwgMCk7DQogICAgICAgYnl0ZXNXcml0dGVu
ICs9IGJwczsNCiAgICB9DQoNCiAgICBsbF9yd19ibG9jayhXUklURSwgc2VjdG9ycywgYmgp
Ow0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAgICAgICB3YWl0
X29uX2J1ZmZlcihiaFtpXSk7DQogICAgICAgaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhbaV0p
KQ0KCSAgd3JpdGVfZXJyb3IgPSAxOw0KICAgICAgIGJyZWxzZShiaFtpXSk7DQogICAgfQ0K
I2lmIChMSU5VWF8yMikNCiAgICB1bmxvY2tfa2VybmVsKCk7DQojZW5kaWYNCg0KI2lmIChQ
Uk9GSUxFX0FJTykNCiAgICBwcm9maWxlX2NvbXBsZXRlKCk7DQojZW5kaWYNCg0KICAgIHJl
dHVybiAod3JpdGVfZXJyb3IgPyAwIDogYnl0ZXNXcml0dGVuKTsNCn0NCg0KI2Vsc2UNCg0K
Ly8NCi8vIHRoaXMgY2FzZSBhc3N1bWVzIHdlIHdpbGwgdXNlIHRoZSBOV0ZTIGJ1ZmZlciBj
YWNoZSBhbmQgbm90IGFsbG93DQovLyBjYWNoZSBzaGFyaW5nIHdpdGggdGhlIGxpbnV4IGJ1
ZmZlciBjYWNoZS4NCi8vDQoNCg0KLy8NCi8vICAgTGludXggMi4wDQovLw0KDQojaWYgKExJ
TlVYXzIwKQ0KDQpVTE9ORyBwUmVhZERpc2tTZWN0b3JzKFVMT05HIGRpc2ssIFVMT05HIFN0
YXJ0aW5nTEJBLCBCWVRFICpTZWN0b3IsDQoJCSAgICAgIFVMT05HIHNlY3RvcnMsIFVMT05H
IHJlYWRBaGVhZCkNCnsNCiAgICByZWdpc3RlciBVTE9ORyBpLCBqLCBieXRlc1JlYWQgPSAw
Ow0KICAgIHJlZ2lzdGVyIFVMT05HIGJwczsNCiAgICByZWdpc3RlciBOV0RJU0sgKk5XRGlz
azsNCiAgICByZWdpc3RlciBVTE9ORyByZWFkX2Vycm9yID0gMDsNCiAgICBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKmJoW3NlY3RvcnNdOw0KDQogICAgTldEaXNrID0gU3lzdGVtRGlza1tkaXNr
XTsNCiAgICBicHMgPSBOV0Rpc2stPkJ5dGVzUGVyU2VjdG9yOw0KDQogICAgZm9yIChpPTA7
IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIGJoW2ldID0gZ2V0X2JoKCk7DQog
ICAgICAgaWYgKCFiaFtpXSkNCiAgICAgICB7DQoJICBmb3IgKGo9MDsgaiA8IGk7IGorKykN
CgkgICAgIGlmIChiaFtqXSkNCgkJcHV0X2JoKGJoW2pdKTsNCgkgIHJldHVybiAwOw0KICAg
ICAgIH0NCiAgICB9DQoNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7
DQogICAgICAgYmhbaV0tPmJfdGhpc19wYWdlID0gYmhbKGkgKyAxKSAlIHNlY3RvcnNdOyAv
LyBjcmVhdGUgY2lyY3VsYXIgbGlzdA0KICAgICAgIGJoW2ldLT5iX3N0YXRlID0gMDsNCiAg
ICAgICBiaFtpXS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopTlVMTDsN
CiAgICAgICBiaFtpXS0+Yl9zaXplID0gNTEyOw0KICAgICAgIGJoW2ldLT5iX2RhdGEgPSAo
Y2hhciAqKSZTZWN0b3JbaSAqIGJwc107DQogICAgICAgYmhbaV0tPmJfbGlzdCA9IEJVRl9D
TEVBTjsNCiAgICAgICBiaFtpXS0+Yl9kZXYgPSAoaW50KU5XRGlzay0+UGh5c2ljYWxEaXNr
SGFuZGxlOw0KICAgICAgIGJoW2ldLT5iX2Jsb2NrbnIgPSAoU3RhcnRpbmdMQkEgKyBpKTsN
CiAgICAgICBiaFtpXS0+Yl9jb3VudCA9IDE7DQogICAgICAgYmhbaV0tPmJfZmx1c2h0aW1l
ID0gMDsNCiAgICAgICBjbGVhcl9iaXQoQkhfVXB0b2RhdGUsICZiaFtpXS0+Yl9zdGF0ZSk7
DQogICAgfQ0KDQogICAgbGxfcndfYmxvY2soUkVBRCwgc2VjdG9ycywgYmgpOw0KICAgIGZv
cihpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIHdhaXRfb25fYnVmZmVy
KGJoW2ldKTsNCiAgICAgICBpZiAoYnVmZmVyX3VwdG9kYXRlKGJoW2ldKSkNCgkgIGJ5dGVz
UmVhZCArPSBicHM7DQogICAgICAgZWxzZQ0KCSAgcmVhZF9lcnJvciA9IDE7DQogICAgICAg
cHV0X2JoKGJoW2ldKTsNCiAgICB9DQoNCiNpZiAoUFJPRklMRV9BSU8pDQogICAgcHJvZmls
ZV9jb21wbGV0ZSgpOw0KI2VuZGlmDQoNCiAgICByZXR1cm4gKHJlYWRfZXJyb3IgPyAwIDog
Ynl0ZXNSZWFkKTsNCg0KfQ0KDQpVTE9ORyBwV3JpdGVEaXNrU2VjdG9ycyhVTE9ORyBkaXNr
LCBVTE9ORyBTdGFydGluZ0xCQSwgQllURSAqU2VjdG9yLA0KCQkgICAgICAgVUxPTkcgc2Vj
dG9ycywgVUxPTkcgcmVhZEFoZWFkKQ0Kew0KICAgIHJlZ2lzdGVyIFVMT05HIGksIGosIGJ5
dGVzV3JpdHRlbiA9IDA7DQogICAgcmVnaXN0ZXIgVUxPTkcgYnBzOw0KICAgIHJlZ2lzdGVy
IFVMT05HIHdyaXRlX2Vycm9yID0gMDsNCiAgICByZWdpc3RlciBOV0RJU0sgKk5XRGlzazsN
CiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoW3NlY3RvcnNdOw0KDQogICAgTldEaXNrID0g
U3lzdGVtRGlza1tkaXNrXTsNCiAgICBicHMgPSBOV0Rpc2stPkJ5dGVzUGVyU2VjdG9yOw0K
DQogICAgZm9yIChpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIGJoW2ld
ID0gZ2V0X2JoKCk7DQogICAgICAgaWYgKCFiaFtpXSkNCiAgICAgICB7DQoJICBmb3IgKGo9
MDsgaiA8IGk7IGorKykNCgkgICAgIGlmIChiaFtqXSkNCgkJcHV0X2JoKGJoW2pdKTsNCgkg
IHJldHVybiAwOw0KICAgICAgIH0NCiAgICB9DQoNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3Rv
cnM7IGkrKykNCiAgICB7DQogICAgICAgYmhbaV0tPmJfdGhpc19wYWdlID0gYmhbKGkgKyAx
KSAlIHNlY3RvcnNdOyAvLyBjcmVhdGUgY2lyY3VsYXIgbGlzdA0KICAgICAgIGJoW2ldLT5i
X3N0YXRlID0gMDsNCiAgICAgICBiaFtpXS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZl
cl9oZWFkICopIE5VTEw7DQogICAgICAgYmhbaV0tPmJfc2l6ZSA9IDUxMjsNCiAgICAgICBi
aFtpXS0+Yl9kYXRhID0gKGNoYXIgKikmU2VjdG9yW2kgKiBicHNdOw0KICAgICAgIGJoW2ld
LT5iX2xpc3QgPSBCVUZfQ0xFQU47DQogICAgICAgYmhbaV0tPmJfZGV2ID0gKGludClOV0Rp
c2stPlBoeXNpY2FsRGlza0hhbmRsZTsNCiAgICAgICBiaFtpXS0+Yl9ibG9ja25yID0gKFN0
YXJ0aW5nTEJBICsgaSk7DQogICAgICAgYmhbaV0tPmJfY291bnQgPSAxOw0KICAgICAgIGJo
W2ldLT5iX2ZsdXNodGltZSA9IDA7DQogICAgICAgc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJo
W2ldLT5iX3N0YXRlKTsNCiAgICAgICBzZXRfYml0KEJIX0RpcnR5LCAmYmhbaV0tPmJfc3Rh
dGUpOw0KICAgIH0NCg0KICAgIGxsX3J3X2Jsb2NrKFdSSVRFLCBzZWN0b3JzLCBiaCk7DQog
ICAgZm9yIChpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIHdhaXRfb25f
YnVmZmVyKGJoW2ldKTsNCiAgICAgICBpZiAoYnVmZmVyX3VwdG9kYXRlKGJoW2ldKSkNCgkg
IGJ5dGVzV3JpdHRlbiArPSBicHM7DQogICAgICAgZWxzZQ0KCSAgd3JpdGVfZXJyb3IgPSAx
Ow0KICAgICAgIHB1dF9iaChiaFtpXSk7DQogICAgfQ0KDQojaWYgKFBST0ZJTEVfQUlPKQ0K
ICAgIHByb2ZpbGVfY29tcGxldGUoKTsNCiNlbmRpZg0KDQogICAgcmV0dXJuICh3cml0ZV9l
cnJvciA/IDAgOiBieXRlc1dyaXR0ZW4pOw0KDQp9DQoNClVMT05HIHBaZXJvRmlsbERpc2tT
ZWN0b3JzKFVMT05HIGRpc2ssIFVMT05HIFN0YXJ0aW5nTEJBLCBVTE9ORyBzZWN0b3JzLA0K
CQkJICBVTE9ORyByZWFkQWhlYWQpDQp7DQogICAgcmVnaXN0ZXIgVUxPTkcgaSwgaiwgYnl0
ZXNXcml0dGVuID0gMDsNCiAgICByZWdpc3RlciBVTE9ORyBicHM7DQogICAgcmVnaXN0ZXIg
VUxPTkcgd3JpdGVfZXJyb3IgPSAwOw0KICAgIHJlZ2lzdGVyIE5XRElTSyAqTldEaXNrOw0K
ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhbc2VjdG9yc107DQoNCiAgICBOV0Rpc2sgPSBT
eXN0ZW1EaXNrW2Rpc2tdOw0KICAgIGJwcyA9IE5XRGlzay0+Qnl0ZXNQZXJTZWN0b3I7DQoN
CiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAgICAgYmhbaV0g
PSBnZXRfYmgoKTsNCiAgICAgICBpZiAoIWJoW2ldKQ0KICAgICAgIHsNCgkgIGZvciAoaj0w
OyBqIDwgaTsgaisrKQ0KCSAgICAgaWYgKGJoW2pdKQ0KCQlwdXRfYmgoYmhbal0pOw0KCSAg
cmV0dXJuIDA7DQogICAgICAgfQ0KICAgIH0NCg0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9y
czsgaSsrKQ0KICAgIHsNCiAgICAgICBiaFtpXS0+Yl90aGlzX3BhZ2UgPSBiaFsoaSArIDEp
ICUgc2VjdG9yc107IC8vIGNyZWF0ZSBjaXJjdWxhciBsaXN0DQogICAgICAgYmhbaV0tPmJf
c3RhdGUgPSAwOw0KICAgICAgIGJoW2ldLT5iX25leHRfZnJlZSA9IChzdHJ1Y3QgYnVmZmVy
X2hlYWQgKikgTlVMTDsNCiAgICAgICBiaFtpXS0+Yl9zaXplID0gNTEyOw0KICAgICAgIGJo
W2ldLT5iX2RhdGEgPSAoY2hhciAqKSBaZXJvQnVmZmVyOw0KICAgICAgIGJoW2ldLT5iX2xp
c3QgPSBCVUZfQ0xFQU47DQogICAgICAgYmhbaV0tPmJfZGV2ID0gKGludClOV0Rpc2stPlBo
eXNpY2FsRGlza0hhbmRsZTsNCiAgICAgICBiaFtpXS0+Yl9ibG9ja25yID0gKFN0YXJ0aW5n
TEJBICsgaSk7DQogICAgICAgYmhbaV0tPmJfY291bnQgPSAxOw0KICAgICAgIGJoW2ldLT5i
X2ZsdXNodGltZSA9IDA7DQogICAgICAgc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJoW2ldLT5i
X3N0YXRlKTsNCiAgICAgICBzZXRfYml0KEJIX0RpcnR5LCAmYmhbaV0tPmJfc3RhdGUpOw0K
ICAgIH0NCg0KICAgIGxsX3J3X2Jsb2NrKFdSSVRFLCBzZWN0b3JzLCBiaCk7DQogICAgZm9y
IChpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIHdhaXRfb25fYnVmZmVy
KGJoW2ldKTsNCiAgICAgICBpZiAoYnVmZmVyX3VwdG9kYXRlKGJoW2ldKSkNCgkgIGJ5dGVz
V3JpdHRlbiArPSBicHM7DQogICAgICAgZWxzZQ0KCSAgd3JpdGVfZXJyb3IgPSAxOw0KICAg
ICAgIHB1dF9iaChiaFtpXSk7DQogICAgfQ0KDQojaWYgKFBST0ZJTEVfQUlPKQ0KICAgIHBy
b2ZpbGVfY29tcGxldGUoKTsNCiNlbmRpZg0KDQogICAgcmV0dXJuICh3cml0ZV9lcnJvciA/
IDAgOiBieXRlc1dyaXR0ZW4pOw0KfQ0KDQojZW5kaWYNCg0KLy8NCi8vICBMaW51eCAyLjIN
Ci8vDQoNCiNpZiAoTElOVVhfMjIpDQoNCnZvaWQgZW5kX2lvKHN0cnVjdCBidWZmZXJfaGVh
ZCAqYmgsIGludCB1cHRvZGF0ZSkNCnsNCiAgICBtYXJrX2J1ZmZlcl91cHRvZGF0ZShiaCwg
dXB0b2RhdGUpOw0KICAgIHVubG9ja19idWZmZXIoYmgpOw0KDQogICAgcmV0dXJuOw0KfQ0K
DQpVTE9ORyBwUmVhZERpc2tTZWN0b3JzKFVMT05HIGRpc2ssIFVMT05HIFN0YXJ0aW5nTEJB
LCBCWVRFICpTZWN0b3IsDQoJCSAgICAgIFVMT05HIHNlY3RvcnMsIFVMT05HIHJlYWRBaGVh
ZCkNCnsNCiAgICByZWdpc3RlciBVTE9ORyBpLCBqLCBieXRlc1JlYWQgPSAwOw0KICAgIHJl
Z2lzdGVyIFVMT05HIGJwczsNCiAgICByZWdpc3RlciBOV0RJU0sgKk5XRGlzazsNCiAgICBy
ZWdpc3RlciBVTE9ORyByZWFkX2Vycm9yID0gMDsNCiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg
KmJoW3NlY3RvcnNdOw0KDQogICAgTldEaXNrID0gU3lzdGVtRGlza1tkaXNrXTsNCiAgICBi
cHMgPSBOV0Rpc2stPkJ5dGVzUGVyU2VjdG9yOw0KDQogICAgZm9yIChpPTA7IGkgPCBzZWN0
b3JzOyBpKyspDQogICAgew0KICAgICAgIGJoW2ldID0gZ2V0X2JoKCk7DQogICAgICAgaWYg
KCFiaFtpXSkNCiAgICAgICB7DQoJICBmb3IgKGo9MDsgaiA8IGk7IGorKykNCgkgICAgIGlm
IChiaFtqXSkNCgkJcHV0X2JoKGJoW2pdKTsNCgkgIHJldHVybiAwOw0KICAgICAgIH0NCiAg
ICB9DQoNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAgICAg
YmhbaV0tPmJfdGhpc19wYWdlID0gYmhbKGkgKyAxKSAlIHNlY3RvcnNdOyAvLyBjcmVhdGUg
Y2lyY3VsYXIgbGlzdA0KICAgICAgIGJoW2ldLT5iX3N0YXRlID0gMDsNCiAgICAgICBiaFtp
XS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopTlVMTDsNCiAgICAgICBi
aFtpXS0+Yl9zaXplID0gNTEyOw0KICAgICAgIGJoW2ldLT5iX2RhdGEgPSAoY2hhciAqKSZT
ZWN0b3JbaSAqIGJwc107DQogICAgICAgYmhbaV0tPmJfbGlzdCA9IEJVRl9DTEVBTjsNCiAg
ICAgICBiaFtpXS0+Yl9kZXYgPSAoaW50KU5XRGlzay0+UGh5c2ljYWxEaXNrSGFuZGxlOw0K
ICAgICAgIGJoW2ldLT5iX2Jsb2NrbnIgPSAoU3RhcnRpbmdMQkEgKyBpKTsNCiAgICAgICBi
aFtpXS0+Yl9jb3VudCA9IDE7DQogICAgICAgYmhbaV0tPmJfZmx1c2h0aW1lID0gMDsNCiAg
ICAgICBiaFtpXS0+Yl9lbmRfaW8gPSBlbmRfaW87DQogICAgICAgY2xlYXJfYml0KEJIX1Vw
dG9kYXRlLCAmYmhbaV0tPmJfc3RhdGUpOw0KICAgIH0NCg0KICAgIGxvY2tfa2VybmVsKCk7
DQogICAgbGxfcndfYmxvY2soUkVBRCwgc2VjdG9ycywgYmgpOw0KDQogICAgZm9yKGk9MDsg
aSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAgICAgd2FpdF9vbl9idWZmZXIoYmhbaV0p
Ow0KICAgICAgIGlmIChidWZmZXJfdXB0b2RhdGUoYmhbaV0pKQ0KCSAgYnl0ZXNSZWFkICs9
IGJwczsNCiAgICAgICBlbHNlDQoJICByZWFkX2Vycm9yID0gMTsNCiAgICAgICBwdXRfYmgo
YmhbaV0pOw0KICAgIH0NCiAgICB1bmxvY2tfa2VybmVsKCk7DQoNCiNpZiAoUFJPRklMRV9B
SU8pDQogICAgcHJvZmlsZV9jb21wbGV0ZSgpOw0KI2VuZGlmDQoNCiAgICByZXR1cm4gKHJl
YWRfZXJyb3IgPyAwIDogYnl0ZXNSZWFkKTsNCg0KfQ0KDQpVTE9ORyBwV3JpdGVEaXNrU2Vj
dG9ycyhVTE9ORyBkaXNrLCBVTE9ORyBTdGFydGluZ0xCQSwgQllURSAqU2VjdG9yLA0KCQkg
ICAgICAgVUxPTkcgc2VjdG9ycywgVUxPTkcgcmVhZEFoZWFkKQ0Kew0KICAgIHJlZ2lzdGVy
IFVMT05HIGksIGosIGJ5dGVzV3JpdHRlbiA9IDA7DQogICAgcmVnaXN0ZXIgVUxPTkcgYnBz
Ow0KICAgIHJlZ2lzdGVyIFVMT05HIHdyaXRlX2Vycm9yID0gMDsNCiAgICByZWdpc3RlciBO
V0RJU0sgKk5XRGlzazsNCiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoW3NlY3RvcnNdOw0K
DQogICAgTldEaXNrID0gU3lzdGVtRGlza1tkaXNrXTsNCiAgICBicHMgPSBOV0Rpc2stPkJ5
dGVzUGVyU2VjdG9yOw0KDQogICAgZm9yIChpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAg
ew0KICAgICAgIGJoW2ldID0gZ2V0X2JoKCk7DQogICAgICAgaWYgKCFiaFtpXSkNCiAgICAg
ICB7DQoJICBmb3IgKGo9MDsgaiA8IGk7IGorKykNCgkgICAgIGlmIChiaFtqXSkNCgkJcHV0
X2JoKGJoW2pdKTsNCgkgIHJldHVybiAwOw0KICAgICAgIH0NCiAgICB9DQoNCiAgICBmb3Ig
KGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAgICAgYmhbaV0tPmJfdGhpc19w
YWdlID0gYmhbKGkgKyAxKSAlIHNlY3RvcnNdOyAvLyBjcmVhdGUgY2lyY3VsYXIgbGlzdA0K
ICAgICAgIGJoW2ldLT5iX3N0YXRlID0gMDsNCiAgICAgICBiaFtpXS0+Yl9uZXh0X2ZyZWUg
PSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopIE5VTEw7DQogICAgICAgYmhbaV0tPmJfc2l6ZSA9
IDUxMjsNCiAgICAgICBiaFtpXS0+Yl9kYXRhID0gKGNoYXIgKikmU2VjdG9yW2kgKiBicHNd
Ow0KICAgICAgIGJoW2ldLT5iX2xpc3QgPSBCVUZfQ0xFQU47DQogICAgICAgYmhbaV0tPmJf
ZGV2ID0gKGludClOV0Rpc2stPlBoeXNpY2FsRGlza0hhbmRsZTsNCiAgICAgICBiaFtpXS0+
Yl9ibG9ja25yID0gKFN0YXJ0aW5nTEJBICsgaSk7DQogICAgICAgYmhbaV0tPmJfY291bnQg
PSAxOw0KICAgICAgIGJoW2ldLT5iX2ZsdXNodGltZSA9IDA7DQogICAgICAgYmhbaV0tPmJf
ZW5kX2lvID0gZW5kX2lvOw0KICAgICAgIHNldF9iaXQoQkhfVXB0b2RhdGUsICZiaFtpXS0+
Yl9zdGF0ZSk7DQogICAgICAgc2V0X2JpdChCSF9EaXJ0eSwgJmJoW2ldLT5iX3N0YXRlKTsN
CiAgICB9DQoNCiAgICBsb2NrX2tlcm5lbCgpOw0KICAgIGxsX3J3X2Jsb2NrKFdSSVRFLCBz
ZWN0b3JzLCBiaCk7DQogICAgZm9yIChpPTA7IGkgPCBzZWN0b3JzOyBpKyspDQogICAgew0K
ICAgICAgIHdhaXRfb25fYnVmZmVyKGJoW2ldKTsNCiAgICAgICBpZiAoYnVmZmVyX3VwdG9k
YXRlKGJoW2ldKSkNCgkgIGJ5dGVzV3JpdHRlbiArPSBicHM7DQogICAgICAgZWxzZQ0KCSAg
d3JpdGVfZXJyb3IgPSAxOw0KICAgICAgIHB1dF9iaChiaFtpXSk7DQogICAgfQ0KICAgIHVu
bG9ja19rZXJuZWwoKTsNCg0KI2lmIChQUk9GSUxFX0FJTykNCiAgICBwcm9maWxlX2NvbXBs
ZXRlKCk7DQojZW5kaWYNCg0KICAgIHJldHVybiAod3JpdGVfZXJyb3IgPyAwIDogYnl0ZXNX
cml0dGVuKTsNCg0KfQ0KDQpVTE9ORyBwWmVyb0ZpbGxEaXNrU2VjdG9ycyhVTE9ORyBkaXNr
LCBVTE9ORyBTdGFydGluZ0xCQSwgVUxPTkcgc2VjdG9ycywNCgkJCSAgVUxPTkcgcmVhZEFo
ZWFkKQ0Kew0KICAgIHJlZ2lzdGVyIFVMT05HIGksIGosIGJ5dGVzV3JpdHRlbiA9IDA7DQog
ICAgcmVnaXN0ZXIgVUxPTkcgYnBzOw0KICAgIHJlZ2lzdGVyIFVMT05HIHdyaXRlX2Vycm9y
ID0gMDsNCiAgICByZWdpc3RlciBOV0RJU0sgKk5XRGlzazsNCiAgICBzdHJ1Y3QgYnVmZmVy
X2hlYWQgKmJoW3NlY3RvcnNdOw0KDQogICAgTldEaXNrID0gU3lzdGVtRGlza1tkaXNrXTsN
CiAgICBicHMgPSBOV0Rpc2stPkJ5dGVzUGVyU2VjdG9yOw0KDQogICAgZm9yIChpPTA7IGkg
PCBzZWN0b3JzOyBpKyspDQogICAgew0KICAgICAgIGJoW2ldID0gZ2V0X2JoKCk7DQogICAg
ICAgaWYgKCFiaFtpXSkNCiAgICAgICB7DQoJICBmb3IgKGo9MDsgaiA8IGk7IGorKykNCgkg
ICAgIGlmIChiaFtqXSkNCgkJcHV0X2JoKGJoW2pdKTsNCgkgIHJldHVybiAwOw0KICAgICAg
IH0NCiAgICB9DQoNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQog
ICAgICAgYmhbaV0tPmJfdGhpc19wYWdlID0gYmhbKGkgKyAxKSAlIHNlY3RvcnNdOyAvLyBj
cmVhdGUgY2lyY3VsYXIgbGlzdA0KICAgICAgIGJoW2ldLT5iX3N0YXRlID0gMDsNCiAgICAg
ICBiaFtpXS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopIE5VTEw7DQog
ICAgICAgYmhbaV0tPmJfc2l6ZSA9IDUxMjsNCiAgICAgICBiaFtpXS0+Yl9kYXRhID0gKGNo
YXIgKikgWmVyb0J1ZmZlcjsNCiAgICAgICBiaFtpXS0+Yl9saXN0ID0gQlVGX0NMRUFOOw0K
ICAgICAgIGJoW2ldLT5iX2RldiA9IChpbnQpTldEaXNrLT5QaHlzaWNhbERpc2tIYW5kbGU7
DQogICAgICAgYmhbaV0tPmJfYmxvY2tuciA9IChTdGFydGluZ0xCQSArIGkpOw0KICAgICAg
IGJoW2ldLT5iX2NvdW50ID0gMTsNCiAgICAgICBiaFtpXS0+Yl9mbHVzaHRpbWUgPSAwOw0K
ICAgICAgIGJoW2ldLT5iX2VuZF9pbyA9IGVuZF9pbzsNCiAgICAgICBzZXRfYml0KEJIX1Vw
dG9kYXRlLCAmYmhbaV0tPmJfc3RhdGUpOw0KICAgICAgIHNldF9iaXQoQkhfRGlydHksICZi
aFtpXS0+Yl9zdGF0ZSk7DQogICAgfQ0KDQogICAgbG9ja19rZXJuZWwoKTsNCiAgICBsbF9y
d19ibG9jayhXUklURSwgc2VjdG9ycywgYmgpOw0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9y
czsgaSsrKQ0KICAgIHsNCiAgICAgICB3YWl0X29uX2J1ZmZlcihiaFtpXSk7DQogICAgICAg
aWYgKGJ1ZmZlcl91cHRvZGF0ZShiaFtpXSkpDQoJICBieXRlc1dyaXR0ZW4gKz0gYnBzOw0K
ICAgICAgIGVsc2UNCgkgIHdyaXRlX2Vycm9yID0gMTsNCiAgICAgICBwdXRfYmgoYmhbaV0p
Ow0KICAgIH0NCiAgICB1bmxvY2tfa2VybmVsKCk7DQoNCiNpZiAoUFJPRklMRV9BSU8pDQog
ICAgcHJvZmlsZV9jb21wbGV0ZSgpOw0KI2VuZGlmDQoNCiAgICByZXR1cm4gKHdyaXRlX2Vy
cm9yID8gMCA6IGJ5dGVzV3JpdHRlbik7DQp9DQoNCi8vDQovLw0KLy8NCg0Kdm9pZCBlbmRf
YXN5bmNoX2lvKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSkNCnsNCiAg
ICBVTE9ORyBmbGFnczsNCiAgICByZWdpc3RlciBpbnQgaTsNCiAgICBBSU9fREVTQ1JJUFRP
UiAqYWlvID0gKEFJT19ERVNDUklQVE9SICopYmg7DQogICAgQVNZTkNIX0lPICppbzsNCg0K
ICAgIG1hcmtfYnVmZmVyX3VwdG9kYXRlKGJoLCB1cHRvZGF0ZSk7DQogICAgdW5sb2NrX2J1
ZmZlcihiaCk7DQoNCiAgICBpZiAoIWFpby0+aW8pDQogICAgew0KICAgICAgIE5XRlNQcmlu
dCgibndmczogIGFpbyBjYWxsYmFjayBoYXMgTlVMTCBoYW5kbGVcbiIpOw0KICAgICAgIHJl
dHVybjsNCiAgICB9DQoNCiAgICBpbyA9IGFpby0+aW87DQogICAgaWYgKCF0ZXN0X2JpdChC
SF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRlKSkNCiAgICAgICBpby0+Y2NvZGUgPSBBU0lPX0lP
X0VSUk9SOw0KDQogICAgaW8tPmNvbXBsZXRlKys7DQogICAgaWYgKGlvLT5jb21wbGV0ZSA+
PSBpby0+Y291bnQpDQogICAgew0KICAgICAgIHNhdmVfZmxhZ3MoZmxhZ3MpOw0KICAgICAg
IGNsaSgpOw0KICAgICAgIGZvciAoaT0wOyBpIDwgaW8tPmNvdW50OyBpKyspDQogICAgICAg
ICAgcHV0X2JoKGlvLT5iaFtpXSk7DQogICAgICAgcmVzdG9yZV9mbGFncyhmbGFncyk7DQoN
CiAgICAgICBpZiAoaW8tPmNhbGxfYmFja19yb3V0aW5lKQ0KICAgICAgICAgIChpby0+Y2Fs
bF9iYWNrX3JvdXRpbmUpKGlvKTsNCiAgICAgICBpby0+c2lnbmF0dXJlID0gMDsNCg0KI2lm
IChQUk9GSUxFX0FJTykNCiAgICAgICBwcm9maWxlX2NvbXBsZXRlKCk7DQojZW5kaWYNCg0K
ICAgIH0NCiAgICByZXR1cm47DQp9DQoNClVMT05HIGFSZWFkRGlza1NlY3RvcnMoVUxPTkcg
ZGlzaywgVUxPTkcgU3RhcnRpbmdMQkEsIEJZVEUgKlNlY3RvciwNCgkJICAgICAgVUxPTkcg
c2VjdG9ycywgVUxPTkcgcmVhZEFoZWFkLCBBU1lOQ0hfSU8gKmlvKQ0Kew0KICAgIHJlZ2lz
dGVyIFVMT05HIGksIGosIGJ5dGVzUmVhZCA9IDA7DQogICAgcmVnaXN0ZXIgVUxPTkcgYnBz
Ow0KICAgIHJlZ2lzdGVyIE5XRElTSyAqTldEaXNrOw0KICAgIEFJT19ERVNDUklQVE9SICph
aW87DQoNCiAgICBpZiAoc2VjdG9ycyA+IDgpDQogICAgICAgcmV0dXJuIDA7DQoNCiAgICBO
V0Rpc2sgPSBTeXN0ZW1EaXNrW2Rpc2tdOw0KICAgIGJwcyA9IE5XRGlzay0+Qnl0ZXNQZXJT
ZWN0b3I7DQoNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7DQogICAg
ICAgaW8tPmJoW2ldID0gZ2V0X2JoKCk7DQogICAgICAgaWYgKCFpby0+YmhbaV0pDQogICAg
ICAgew0KCSAgZm9yIChqPTA7IGogPCBpOyBqKyspDQoJICAgICBpZiAoaW8tPmJoW2pdKQ0K
CQlwdXRfYmgoaW8tPmJoW2pdKTsNCgkgIHJldHVybiAwOw0KICAgICAgIH0NCiAgICB9DQoN
CiAgICBpby0+Y2NvZGUgPSAwOw0KICAgIGlvLT5jb3VudCA9IHNlY3RvcnM7DQogICAgaW8t
PmNvbXBsZXRlID0gMDsNCiAgICBmb3IgKGk9MDsgaSA8IHNlY3RvcnM7IGkrKykNCiAgICB7
DQogICAgICAgYWlvID0gKEFJT19ERVNDUklQVE9SICopaW8tPmJoW2ldOw0KICAgICAgIGFp
by0+aW8gPSBpbzsNCiAgICAgICBhaW8tPnNpZ25hdHVyZSA9IEFJT19TSUdOQVRVUkU7DQog
ICAgICAgaW8tPmJoW2ldLT5iX3RoaXNfcGFnZSA9IGlvLT5iaFsoaSArIDEpICUgc2VjdG9y
c107IC8vIGNyZWF0ZSBjaXJjdWxhciBsaXN0DQogICAgICAgaW8tPmJoW2ldLT5iX3N0YXRl
ID0gMDsNCiAgICAgICBpby0+YmhbaV0tPmJfbmV4dF9mcmVlID0gKHN0cnVjdCBidWZmZXJf
aGVhZCAqKU5VTEw7DQogICAgICAgaW8tPmJoW2ldLT5iX3NpemUgPSA1MTI7DQogICAgICAg
aW8tPmJoW2ldLT5iX2RhdGEgPSAoY2hhciAqKSZTZWN0b3JbaSAqIGJwc107DQogICAgICAg
aW8tPmJoW2ldLT5iX2xpc3QgPSBCVUZfQ0xFQU47DQogICAgICAgaW8tPmJoW2ldLT5iX2Rl
diA9IChpbnQpTldEaXNrLT5QaHlzaWNhbERpc2tIYW5kbGU7DQogICAgICAgaW8tPmJoW2ld
LT5iX2Jsb2NrbnIgPSAoU3RhcnRpbmdMQkEgKyBpKTsNCiAgICAgICBpby0+YmhbaV0tPmJf
Y291bnQgPSAxOw0KICAgICAgIGlvLT5iaFtpXS0+Yl9mbHVzaHRpbWUgPSAwOw0KICAgICAg
IGlvLT5iaFtpXS0+Yl9lbmRfaW8gPSBlbmRfYXN5bmNoX2lvOw0KICAgICAgIGNsZWFyX2Jp
dChCSF9VcHRvZGF0ZSwgJmlvLT5iaFtpXS0+Yl9zdGF0ZSk7DQogICAgfQ0KDQogICAgbG9j
a19rZXJuZWwoKTsNCiAgICBsbF9yd19ibG9jayhSRUFELCBzZWN0b3JzLCAmaW8tPmJoWzBd
KTsNCiAgICBydW5fdGFza19xdWV1ZSgmdHFfZGlzayk7DQogICAgdW5sb2NrX2tlcm5lbCgp
Ow0KDQojaWYgKERFQlVHX0FJTykNCiAgICBOV0ZTUHJpbnQoImlvIGFzeW5jaCByZWFkIGRp
c2stJWQgbGJhLSVkXG4iLCAoaW50KWRpc2ssIChpbnQpU3RhcnRpbmdMQkEpOw0KI2VuZGlm
DQoNCiAgICBieXRlc1JlYWQgPSAoc2VjdG9ycyAqIGJwcyk7DQogICAgcmV0dXJuIChieXRl
c1JlYWQpOw0KDQp9DQoNClVMT05HIGFXcml0ZURpc2tTZWN0b3JzKFVMT05HIGRpc2ssIFVM
T05HIFN0YXJ0aW5nTEJBLCBCWVRFICpTZWN0b3IsDQoJCSAgICAgICBVTE9ORyBzZWN0b3Jz
LCBVTE9ORyByZWFkQWhlYWQsIEFTWU5DSF9JTyAqaW8pDQp7DQogICAgcmVnaXN0ZXIgVUxP
TkcgaSwgaiwgYnl0ZXNXcml0dGVuID0gMDsNCiAgICByZWdpc3RlciBVTE9ORyBicHM7DQog
ICAgcmVnaXN0ZXIgTldESVNLICpOV0Rpc2s7DQogICAgQUlPX0RFU0NSSVBUT1IgKmFpbzsN
Cg0KICAgIGlmIChzZWN0b3JzID4gOCkNCiAgICAgICByZXR1cm4gMDsNCg0KICAgIE5XRGlz
ayA9IFN5c3RlbURpc2tbZGlza107DQogICAgYnBzID0gTldEaXNrLT5CeXRlc1BlclNlY3Rv
cjsNCg0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAgICAgICBp
by0+YmhbaV0gPSBnZXRfYmgoKTsNCiAgICAgICBpZiAoIWlvLT5iaFtpXSkNCiAgICAgICB7
DQoJICBmb3IgKGo9MDsgaiA8IGk7IGorKykNCgkgICAgIGlmIChpby0+Ymhbal0pDQoJCXB1
dF9iaChpby0+Ymhbal0pOw0KCSAgcmV0dXJuIDA7DQogICAgICAgfQ0KICAgIH0NCg0KICAg
IGlvLT5jY29kZSA9IDA7DQogICAgaW8tPmNvdW50ID0gc2VjdG9yczsNCiAgICBpby0+Y29t
cGxldGUgPSAwOw0KICAgIGZvciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAg
ICAgICBhaW8gPSAoQUlPX0RFU0NSSVBUT1IgKilpby0+YmhbaV07DQogICAgICAgYWlvLT5p
byA9IGlvOw0KICAgICAgIGFpby0+c2lnbmF0dXJlID0gQUlPX1NJR05BVFVSRTsNCiAgICAg
ICBpby0+YmhbaV0tPmJfdGhpc19wYWdlID0gaW8tPmJoWyhpICsgMSkgJSBzZWN0b3JzXTsg
Ly8gY3JlYXRlIGNpcmN1bGFyIGxpc3QNCiAgICAgICBpby0+YmhbaV0tPmJfc3RhdGUgPSAw
Ow0KICAgICAgIGlvLT5iaFtpXS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZlcl9oZWFk
ICopIE5VTEw7DQogICAgICAgaW8tPmJoW2ldLT5iX3NpemUgPSA1MTI7DQogICAgICAgaW8t
PmJoW2ldLT5iX2RhdGEgPSAoY2hhciAqKSZTZWN0b3JbaSAqIGJwc107DQogICAgICAgaW8t
PmJoW2ldLT5iX2xpc3QgPSBCVUZfQ0xFQU47DQogICAgICAgaW8tPmJoW2ldLT5iX2RldiA9
IChpbnQpTldEaXNrLT5QaHlzaWNhbERpc2tIYW5kbGU7DQogICAgICAgaW8tPmJoW2ldLT5i
X2Jsb2NrbnIgPSAoU3RhcnRpbmdMQkEgKyBpKTsNCiAgICAgICBpby0+YmhbaV0tPmJfY291
bnQgPSAxOw0KICAgICAgIGlvLT5iaFtpXS0+Yl9mbHVzaHRpbWUgPSAwOw0KICAgICAgIGlv
LT5iaFtpXS0+Yl9lbmRfaW8gPSBlbmRfYXN5bmNoX2lvOw0KICAgICAgIHNldF9iaXQoQkhf
VXB0b2RhdGUsICZpby0+YmhbaV0tPmJfc3RhdGUpOw0KICAgICAgIHNldF9iaXQoQkhfRGly
dHksICZpby0+YmhbaV0tPmJfc3RhdGUpOw0KICAgIH0NCg0KICAgIGxvY2tfa2VybmVsKCk7
DQogICAgbGxfcndfYmxvY2soV1JJVEUsIHNlY3RvcnMsICZpby0+YmhbMF0pOw0KICAgIHJ1
bl90YXNrX3F1ZXVlKCZ0cV9kaXNrKTsNCiAgICB1bmxvY2tfa2VybmVsKCk7DQoNCiNpZiAo
REVCVUdfQUlPKQ0KICAgIE5XRlNQcmludCgiaW8gYXN5bmNoIHdyaXRlIGRpc2stJWQgbGJh
LSVkXG4iLCAoaW50KWRpc2ssIChpbnQpU3RhcnRpbmdMQkEpOw0KI2VuZGlmDQoNCiAgICBi
eXRlc1dyaXR0ZW4gPSAoc2VjdG9ycyAqIGJwcyk7DQogICAgcmV0dXJuIChieXRlc1dyaXR0
ZW4pOw0KDQp9DQoNClVMT05HIGFaZXJvRmlsbERpc2tTZWN0b3JzKFVMT05HIGRpc2ssIFVM
T05HIFN0YXJ0aW5nTEJBLCBVTE9ORyBzZWN0b3JzLA0KCQkJICBVTE9ORyByZWFkQWhlYWQs
IEFTWU5DSF9JTyAqaW8pDQp7DQogICAgcmVnaXN0ZXIgVUxPTkcgaSwgaiwgYnl0ZXNXcml0
dGVuID0gMDsNCiAgICByZWdpc3RlciBVTE9ORyBicHM7DQogICAgcmVnaXN0ZXIgTldESVNL
ICpOV0Rpc2s7DQogICAgQUlPX0RFU0NSSVBUT1IgKmFpbzsNCg0KICAgIGlmIChzZWN0b3Jz
ID4gOCkNCiAgICAgICByZXR1cm4gMDsNCg0KICAgIE5XRGlzayA9IFN5c3RlbURpc2tbZGlz
a107DQogICAgYnBzID0gTldEaXNrLT5CeXRlc1BlclNlY3RvcjsNCg0KICAgIGZvciAoaT0w
OyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAgICAgICBpby0+YmhbaV0gPSBnZXRfYmgo
KTsNCiAgICAgICBpZiAoIWlvLT5iaFtpXSkNCiAgICAgICB7DQoJICBmb3IgKGo9MDsgaiA8
IGk7IGorKykNCgkgICAgIGlmIChpby0+Ymhbal0pDQoJCXB1dF9iaChpby0+Ymhbal0pOw0K
CSAgcmV0dXJuIDA7DQogICAgICAgfQ0KICAgIH0NCg0KICAgIGlvLT5jY29kZSA9IDA7DQog
ICAgaW8tPmNvdW50ID0gc2VjdG9yczsNCiAgICBpby0+Y29tcGxldGUgPSAwOw0KICAgIGZv
ciAoaT0wOyBpIDwgc2VjdG9yczsgaSsrKQ0KICAgIHsNCiAgICAgICBhaW8gPSAoQUlPX0RF
U0NSSVBUT1IgKilpby0+YmhbaV07DQogICAgICAgYWlvLT5pbyA9IGlvOw0KICAgICAgIGFp
by0+c2lnbmF0dXJlID0gQUlPX1NJR05BVFVSRTsNCiAgICAgICBpby0+YmhbaV0tPmJfdGhp
c19wYWdlID0gaW8tPmJoWyhpICsgMSkgJSBzZWN0b3JzXTsgLy8gY3JlYXRlIGNpcmN1bGFy
IGxpc3QNCiAgICAgICBpby0+YmhbaV0tPmJfc3RhdGUgPSAwOw0KICAgICAgIGlvLT5iaFtp
XS0+Yl9uZXh0X2ZyZWUgPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopIE5VTEw7DQogICAgICAg
aW8tPmJoW2ldLT5iX3NpemUgPSA1MTI7DQogICAgICAgaW8tPmJoW2ldLT5iX2RhdGEgPSAo
Y2hhciAqKSBaZXJvQnVmZmVyOw0KICAgICAgIGlvLT5iaFtpXS0+Yl9saXN0ID0gQlVGX0NM
RUFOOw0KICAgICAgIGlvLT5iaFtpXS0+Yl9kZXYgPSAoaW50KU5XRGlzay0+UGh5c2ljYWxE
aXNrSGFuZGxlOw0KICAgICAgIGlvLT5iaFtpXS0+Yl9ibG9ja25yID0gKFN0YXJ0aW5nTEJB
ICsgaSk7DQogICAgICAgaW8tPmJoW2ldLT5iX2NvdW50ID0gMTsNCiAgICAgICBpby0+Ymhb
aV0tPmJfZmx1c2h0aW1lID0gMDsNCiAgICAgICBpby0+YmhbaV0tPmJfZW5kX2lvID0gZW5k
X2FzeW5jaF9pbzsNCiAgICAgICBzZXRfYml0KEJIX1VwdG9kYXRlLCAmaW8tPmJoW2ldLT5i
X3N0YXRlKTsNCiAgICAgICBzZXRfYml0KEJIX0RpcnR5LCAmaW8tPmJoW2ldLT5iX3N0YXRl
KTsNCiAgICB9DQoNCiAgICBsb2NrX2tlcm5lbCgpOw0KICAgIGxsX3J3X2Jsb2NrKFdSSVRF
LCBzZWN0b3JzLCAmaW8tPmJoWzBdKTsNCiAgICBydW5fdGFza19xdWV1ZSgmdHFfZGlzayk7
DQogICAgdW5sb2NrX2tlcm5lbCgpOw0KDQojaWYgKERFQlVHX0FJTykNCiAgICBOV0ZTUHJp
bnQoImlvIGFzeW5jaCBmaWxsIGRpc2stJWQgbGJhLSVkXG4iLCAoaW50KWRpc2ssIChpbnQp
U3RhcnRpbmdMQkEpOw0KI2VuZGlmDQoNCiAgICBieXRlc1dyaXR0ZW4gPSAoc2VjdG9ycyAq
IGJwcyk7DQogICAgcmV0dXJuIChieXRlc1dyaXR0ZW4pOw0KfQ0KDQojZW5kaWYNCg0K
--------------D425187AC46229B4DFF3015B--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/