[SMP patch] io-apic-patch-2.1.101-J

MOLNAR Ingo (mingo@chiara.csoma.elte.hu)
Thu, 14 May 1998 12:02:09 +0200 (CEST)


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.

---1247997369-1788761421-895140129=:14525
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Thu, 14 May 1998, Harald Hoyer wrote:

> But not this one, if this is a typo:
>
> - irq_desc[i].handler = &ioapic_level_irq_type;
> + irq_desc[i].handler = &ioapic_edge_irq_type;

no, it's not a typo, it's in the announcement -F, it's a debugging
thing:). We can handle edge triggered IRQs with the new level-triggered
handler. But this does not mean we set it up as level-triggered. If you
think about it, it's valid, but suboptimal for edge-triggered IRQs. But i
wanted to test the new level-triggered part, the edge triggered stuff was
working almost always.

> Besides that the -F and -I patch break serial interrupts, after
> switching console from svga-apps or X-Server on my computer. Only one
> interrupt is served in 2 seconds. pre-2.1.102 works fine...

yes, this is already fixed in io-apic-patch-2.1.101-J. The problem was
setup_x86_irq()/free_irq(), they have to atomically change irq
descriptors, and they have to mask/umask IRQs properly.

this fix also has a chance to fix other problems, most notably maybe the
'double IRQs on NE2000' problem, and/or the BusLogic boot-hang? Please
re-report if there are still problems. The io-apic-patch-2.1.101-J patch
is against vanilla pre-patch-2.1.102.

-- mingo

---1247997369-1788761421-895140129=:14525
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="io-apic-patch-2.1.101-J"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.980514120209.14525B@chiara.csoma.elte.hu>
Content-Description:

LS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMub3JpZwlNb24gTWF5
IDE4IDA0OjQxOjI2IDE5OTgNCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVs
L3NtcC5jCU1vbiBNYXkgMTggMDQ6NTc6MzIgMTk5OA0KQEAgLTYzNiw5ICs2
MzYsMTYgQEANCiAgCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7DQog
IAl2YWx1ZSB8PSAoMTw8OCk7CQkvKiBFbmFibGUgQVBJQyAoYml0PT0xKSAq
Lw0KICAJdmFsdWUgJj0gfigxPDw5KTsJCS8qIEVuYWJsZSBmb2N1cyBwcm9j
ZXNzb3IgKGJpdD09MCkgKi8NCisJdmFsdWUgfD0gMHhmZjsJCQkvKiBTZXQg
c3B1cmlvdXMgSVJRIHZlY3RvciB0byAweGZmICovDQogIAlhcGljX3dyaXRl
KEFQSUNfU1BJVix2YWx1ZSk7DQogDQorIAl2YWx1ZSA9IGFwaWNfcmVhZChB
UElDX1RBU0tQUkkpOw0KKyAJdmFsdWUgJj0gfkFQSUNfVFBSSV9NQVNLOwkv
KiBTZXQgVGFzayBQcmlvcml0eSB0byAnYWNjZXB0IGFsbCcgKi8NCisgCWFw
aWNfd3JpdGUoQVBJQ19UQVNLUFJJLHZhbHVlKTsNCisNCiAJdWRlbGF5KDEw
MCk7CQkJLyogQiBzYWZlICovDQorCWFja19BUElDX2lycSgpOw0KKwl1ZGVs
YXkoMTAwKTsNCiB9DQogDQogX19pbml0ZnVuYyh2b2lkIHNtcF9jYWxsaW4o
dm9pZCkpDQpAQCAtMTE1MiwxMiArMTE1OSw2IEBADQogCV9fcmVzdG9yZV9m
bGFncyhmbGFncyk7DQogfQ0KIA0KLXZvaWQgZnVubnkgKHZvaWQpDQotew0K
LQlzZW5kX0lQSShBUElDX0RFU1RfQUxMQlVULDB4MzAgLypJT19BUElDX1ZF
Q1RPUigxMSkqLyk7DQotCWZvcig7OylfX2NsaSgpOw0KLX0NCi0NCiAvKg0K
ICAqIEEgbm9uIHdhaXQgbWVzc2FnZSBjYW5ub3QgcGFzcyBkYXRhIG9yIGNw
dSBzb3VyY2UgaW5mby4gVGhpcyBjdXJyZW50IHNldHVwDQogICogaXMgb25s
eSBzYWZlIGJlY2F1c2UgdGhlIGtlcm5lbCBsb2NrIG93bmVyIGlzIHRoZSBv
bmx5IHBlcnNvbiB3aG8gY2FuIHNlbmQNCkBAIC0xNDc0LDE5ICsxNDc1LDE4
IEBADQogfQ0KIA0KIC8qDQotICoJUmVzY2hlZHVsZSBjYWxsIGJhY2sNCisg
KiBSZXNjaGVkdWxlIGNhbGwgYmFjayAobm90IHVzZWQgY3VycmVudGx5KQ0K
ICAqLw0KKw0KIGFzbWxpbmthZ2Ugdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRl
cnJ1cHQodm9pZCkNCiB7DQogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lk
KCk7DQogDQogCWFja19BUElDX2lycSgpOw0KLQlmb3IgKDs7KSBfX2NsaSgp
Ow0KIAkvKg0KIAkgKiBUaGlzIGxvb2tzIHNpbGx5LCBidXQgd2UgYWN0dWFs
bHkgZG8gbmVlZCB0byB3YWl0DQogCSAqIGZvciB0aGUgZ2xvYmFsIGludGVy
cnVwdCBsb2NrLg0KIAkgKi8NCi0JcHJpbnRrKCJodWgsIHRoaXMgaXMgdXNl
ZCwgd2hlcmU/Pz9cbiIpOw0KIAlpcnFfZW50ZXIoY3B1LCAwKTsNCiAJbmVl
ZF9yZXNjaGVkID0gMTsNCiAJaXJxX2V4aXQoY3B1LCAwKTsNCkBAIC0xNTE5
LDYgKzE1MTksMTUgQEANCiB7DQogCWFja19BUElDX2lycSAoKTsNCiAJaWYg
KG10cnJfaG9vaykgKCptdHJyX2hvb2spICgpOw0KK30NCisNCisvKg0KKyAq
IFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91
ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUNCisgKi8NCithc21saW5rYWdlIHZv
aWQgc21wX3NwdXJpb3VzX2ludGVycnVwdCh2b2lkKQ0KK3sNCisJYWNrX0FQ
SUNfaXJxICgpOw0KKwlwcmludGsoInNwdXJpb3VzIEFQSUMgaW50ZXJydXB0
LCBheWllZSwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIpOw0KIH0NCiANCiAv
Kg0KLS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMub3JpZwlNb24g
TWF5IDE4IDA0OjQxOjMzIDE5OTgNCisrKyBsaW51eC9hcmNoL2kzODYva2Vy
bmVsL2lycS5jCVdlZCBNYXkgMjAgMDA6MDY6NDEgMTk5OA0KQEAgLTEwOCw3
ICsxMDgsMTEgQEANCiANCiAvKg0KICAqIExldmVsIGFuZCBlZGdlIHRyaWdn
ZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxp
bmcsDQotICogc28gd2UgdXNlIHR3byBzZXBhcmF0ZSBpcnEgZGVzY3JpcHRv
cnM6DQorICogc28gd2UgdXNlIHR3byBzZXBhcmF0ZSBpcnEgZGVzY3JpcHRv
cnMuIGVkZ2UgdHJpZ2dlcmVkIElSUXMgY2FuIGJlDQorICogaGFuZGxlZCB3
aXRoIHRoZSBsZXZlbC10cmlnZ2VyZWQgZGVzY3JpcHRvciwgYnV0IHRoYXQg
b25lIGhhcyBzbGlnaHRseQ0KKyAqIG1vcmUgb3ZlcmhlYWQuIExldmVsLXRy
aWdnZXJlZCBpbnRlcnJ1cHRzIGNhbm5vdCBiZSBoYW5kbGVkIHdpdGggdGhl
DQorICogZWRnZS10cmlnZ2VyZWQgaGFuZGxlciwgd2l0aG91dCByaXNraW5n
IElSUSBzdG9ybXMgYW5kIG90aGVyIHVnbHkNCisgKiByYWNlcy4NCiAgKi8N
CiANCiBzdGF0aWMgdm9pZCBkb19lZGdlX2lvYXBpY19JUlEgKHVuc2lnbmVk
IGludCBpcnEsIGludCBjcHUsDQpAQCAtMjA3LDE3ICsyMTEsNiBAQA0KIAl9
DQogfQ0KIA0KLXZvaWQgdW5tYXNrX2dlbmVyaWNfaXJxKHVuc2lnbmVkIGlu
dCBpcnEpDQotew0KLQlpcnFfZGVzY1tpcnFdLnN0YXR1cyA9IDA7DQotCWlm
IChJT19BUElDX0lSUShpcnEpKQ0KLQkJZW5hYmxlX0lPX0FQSUNfaXJxKGly
cSk7DQotCWVsc2Ugew0KLQkJY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBp
cnEpOw0KLQkJc2V0XzgyNTlBX2lycV9tYXNrKGlycSk7DQotCX0NCi19DQot
DQogLyoNCiAgKiBUaGlzIGJ1aWxkcyB1cCB0aGUgSVJRIGhhbmRsZXIgc3R1
YnMgdXNpbmcgc29tZSB1Z2x5IG1hY3JvcyBpbiBpcnEuaA0KICAqDQpAQCAt
Mjc3LDYgKzI3MCw3IEBADQogQlVJTERfU01QX0lOVEVSUlVQVChpbnZhbGlk
YXRlX2ludGVycnVwdCkNCiBCVUlMRF9TTVBfSU5URVJSVVBUKHN0b3BfY3B1
X2ludGVycnVwdCkNCiBCVUlMRF9TTVBfSU5URVJSVVBUKG10cnJfaW50ZXJy
dXB0KQ0KK0JVSUxEX1NNUF9JTlRFUlJVUFQoc3B1cmlvdXNfaW50ZXJydXB0
KQ0KIA0KIC8qDQogICogZXZlcnkgcGVudGl1bSBsb2NhbCBBUElDIGhhcyB0
d28gJ2xvY2FsIGludGVycnVwdHMnLCB3aXRoIGENCkBAIC0zNzYsNiArMzcw
LDcgQEANCiAJcCArPSBzcHJpbnRmKHAsICJOTUk6ICUxMHVcbiIsIGF0b21p
Y19yZWFkKCZubWlfY291bnRlcikpOw0KICNpZmRlZiBfX1NNUF9fDQogCXAg
Kz0gc3ByaW50ZihwLCAiSVBJOiAlMTBsdVxuIiwgaXBpX2NvdW50KTsNCisJ
cHJpbnRfSU9fQVBJQygpOw0KICNlbmRpZgkJDQogCXJldHVybiBwIC0gYnVm
Ow0KIH0NCkBAIC02OTUsNiArNjkwLDE2IEBADQogCXNldF84MjU5QV9pcnFf
bWFzayhpcnEpOw0KIH0NCiANCitpbnQgaTgyNTlBX2lycV9wZW5kaW5nICh1
bnNpZ25lZCBpbnQgaXJxKQ0KK3sNCisJdW5zaWduZWQgaW50IG1hc2sgPSAx
PDxpcnE7DQorDQorCWlmIChpcnEgPCA4KQ0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKGluYigweDIwKSAmIG1hc2spOw0KKyAgICAgICAgcmV0dXJuIChp
bmIoMHhBMCkgJiAobWFzayA+PiA4KSk7DQorfQ0KKw0KKw0KIHZvaWQgbWFr
ZV84MjU5QV9pcnEgKHVuc2lnbmVkIGludCBpcnEpDQogew0KIAlpb19hcGlj
X2lycXMgJj0gfigxPDxpcnEpOw0KQEAgLTc3MSwyOSArNzc2LDIwIEBADQog
ew0KIH0NCiANCi0vKg0KLSAqIGlmIHdlIGVuYWJsZSB0aGlzLCB3aHkgZG9l
cyBpdCBjYXVzZSBhIGhhbmcgaW4gdGhlIEJ1c0xvZ2ljDQotICogZHJpdmVy
LCB3aGVuIGxldmVsIHRyaWdnZXJlZCBQQ0kgSVJRcyBhcmUgdXNlZD8NCi0g
Ki8NCi0jZGVmaW5lIE5PVF9CUk9LRU4gMA0KLQ0KIHN0YXRpYyB2b2lkIGVu
YWJsZV9sZXZlbF9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpDQogew0K
LSNpZiBOT1RfQlJPS0VODQogCWVuYWJsZV9JT19BUElDX2lycShpcnEpOw0K
LSNlbmRpZg0KIAlzZWxmX0lQSShpcnEpOw0KIH0NCiANCiBzdGF0aWMgdm9p
ZCBkaXNhYmxlX2xldmVsX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkN
CiB7DQotI2lmIE5PVF9CUk9LRU4NCiAJZGlzYWJsZV9JT19BUElDX2lycShp
cnEpOw0KLSNlbmRpZg0KIH0NCiANCiAvKg0KLSAqIEhhcyB0byBiZSBjYWxs
ZWQgd2l0aCB0aGUgaXJxIGNvbnRyb2xsZXIgbG9ja2VkDQorICogSGFzIHRv
IGJlIGNhbGxlZCB3aXRoIHRoZSBpcnEgY29udHJvbGxlciBsb2NrZWQsIGFu
ZCBoYXMgdG8gZXhpdA0KKyAqIHdpdGggd2l0aCB0aGUgbG9jayBoZWxkIGFz
IHdlbGwuDQogICovDQogc3RhdGljIHZvaWQgaGFuZGxlX2lvYXBpY19ldmVu
dCAodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSwNCiAJCQkJCQlzdHJ1Y3Qg
cHRfcmVncyAqIHJlZ3MpDQpAQCAtODA4LDEzICs4MDQsMTggQEANCiAJd2hp
bGUgKHRlc3RfYml0KDAsJmdsb2JhbF9pcnFfbG9jaykpIGJhcnJpZXIoKTsN
CiANCiAJZm9yICg7Oykgew0KLQkJaW50IHBlbmRpbmc7DQorCQlpbnQgcGVu
ZGluZywgaGFuZGxlcjsNCiANCi0JCS8qIElmIHRoZXJlIGlzIG5vIElSUSBo
YW5kbGVyLCBleGl0IGVhcmx5LCBsZWF2aW5nIHRoZSBpcnEgImluIHByb2dy
ZXNzIiAqLw0KLQkJaWYgKCFoYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncykp
DQotCQkJZ290byBub19oYW5kbGVyOw0KKwkJLyoNCisJCSAqIElmIHRoZXJl
IGlzIG5vIElSUSBoYW5kbGVyLCBleGl0IGVhcmx5LCBsZWF2aW5nIHRoZSBp
cnENCisJCSAqICJpbiBwcm9ncmVzcyINCisJCSAqLw0KKwkJaGFuZGxlciA9
IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCByZWdzKTsNCiANCiAJCXNwaW5fbG9j
aygmaXJxX2NvbnRyb2xsZXJfbG9jayk7DQorCQlpZiAoIWhhbmRsZXIpDQor
CQkJZ290byBub19oYW5kbGVyOw0KKw0KIAkJcGVuZGluZyA9IGRlc2MtPmV2
ZW50czsNCiAJCWRlc2MtPmV2ZW50cyA9IDA7DQogCQlpZiAoIXBlbmRpbmcp
DQpAQCAtODIyLDcgKzgyMyw2IEBADQogCQlzcGluX3VubG9jaygmaXJxX2Nv
bnRyb2xsZXJfbG9jayk7DQogCX0NCiAJZGVzYy0+c3RhdHVzICY9IElSUV9E
SVNBQkxFRDsNCi0Jc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2sp
Ow0KIA0KIG5vX2hhbmRsZXI6DQogfQ0KQEAgLTg1MCw2ICs4NTAsNyBAQA0K
IAl9DQogDQogCWhhbmRsZV9pb2FwaWNfZXZlbnQoaXJxLGNwdSxyZWdzKTsN
CisJc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOw0KIA0KIAlo
YXJkaXJxX2V4aXQoY3B1KTsNCiAJcmVsZWFzZV9pcnFsb2NrKGNwdSk7DQpA
QCAtODYyLDEzICs4NjMsMTQgQEANCiANCiAJc3Bpbl9sb2NrKCZpcnFfY29u
dHJvbGxlcl9sb2NrKTsNCiAJLyoNCi0JICogaW4gdGhlIGxldmVsIHRyaWdn
ZXJlZCBjYXNlIHdlIGZpcnN0IGRpc2FibGUgdGhlIElSUQ0KKwkgKiBJbiB0
aGUgbGV2ZWwgdHJpZ2dlcmVkIGNhc2Ugd2UgZmlyc3QgZGlzYWJsZSB0aGUg
SVJRDQogCSAqIGluIHRoZSBJTy1BUElDLCB0aGVuIHdlICdlYXJseSBBQ0sn
IHRoZSBJUlEsIHRoZW4gd2UNCiAJICogaGFuZGxlIGl0IGFuZCBlbmFibGUg
dGhlIElSUSB3aGVuIGZpbmlzaGVkLg0KKwkgKg0KKwkgKiBkaXNhYmxlIGhh
cyB0byBoYXBwZW4gYmVmb3JlIHRoZSBBQ0ssIHRvIGF2b2lkIElSUSBzdG9y
bXMuDQorCSAqIFNvIHRoaXMgYWxsIGhhcyB0byBiZSB3aXRoaW4gdGhlIHNw
aW5sb2NrLg0KIAkgKi8NCi0jaWYgTk9UX0JST0tFTg0KIAlkaXNhYmxlX0lP
X0FQSUNfaXJxKGlycSk7DQotI2VuZGlmDQogCWFja19BUElDX2lycSgpOw0K
IAlkZXNjLT5pcGkgPSAwOw0KIA0KQEAgLTg4Myw2ICs4ODUsMTAgQEANCiAJ
fQ0KIA0KIAloYW5kbGVfaW9hcGljX2V2ZW50KGlycSxjcHUscmVncyk7DQor
CS8qIHdlIHN0aWxsIGhhdmUgdGhlIHNwaW5sb2NrIGhlbGQgaGVyZSAqLw0K
Kw0KKwllbmFibGVfSU9fQVBJQ19pcnEoaXJxKTsNCisJc3Bpbl91bmxvY2so
JmlycV9jb250cm9sbGVyX2xvY2spOw0KIA0KIAloYXJkaXJxX2V4aXQoY3B1
KTsNCiAJcmVsZWFzZV9pcnFsb2NrKGNwdSk7DQpAQCAtOTgxLDExICs5ODcs
MzQgQEANCiAJc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKnA7DQogCXVuc2ln
bmVkIGxvbmcgZmxhZ3M7DQogDQorCS8qDQorCSAqIFNvbWUgZHJpdmVycyBs
aWtlIHNlcmlhbC5jIHVzZSByZXF1ZXN0X2lycSgpIGhlYXZpbHksDQorCSAq
IHNvIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50ZXJmZXJlIHdp
dGggYQ0KKwkgKiBydW5uaW5nIHN5c3RlbS4NCisJICovDQorCWlmIChuZXct
PmZsYWdzICYgU0FfU0FNUExFX1JBTkRPTSkgew0KKwkJLyoNCisJCSAqIFRo
aXMgZnVuY3Rpb24gbWlnaHQgc2xlZXAsIHdlIHdhbnQgdG8gY2FsbCBpdCBm
aXJzdCwNCisJCSAqIG91dHNpZGUgb2YgdGhlIGF0b21pYyBibG9jay4NCisJ
CSAqIFllcywgdGhpcyBtaWdodCBjbGVhciB0aGUgZW50cm9weSBwb29sIGlm
IHRoZSB3cm9uZw0KKwkJICogZHJpdmVyIGlzIGF0dGVtcHRlZCB0byBiZSBs
b2FkZWQsIHdpdGhvdXQgYWN0dWFsbHkNCisJCSAqIGluc3RhbGxpbmcgYSBu
ZXcgaGFuZGxlciwgYnV0IGlzIHRoaXMgcmVhbGx5IGEgcHJvYmxlbSwNCisJ
CSAqIG9ubHkgdGhlIHN5c2FkbWluIGlzIGFibGUgdG8gZG8gdGhpcy4NCisJ
CSAqLw0KKwkJcmFuZF9pbml0aWFsaXplX2lycShpcnEpOw0KKwl9DQorDQor
CS8qDQorCSAqIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBoYXMgdG8g
YmUgZXhlY3V0ZWQgYXRvbWljYWxseQ0KKwkgKi8NCisJc3Bpbl9sb2NrX2ly
cXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssZmxhZ3MpOw0KIAlwID0gJmly
cV9kZXNjW2lycV0uYWN0aW9uOw0KIAlpZiAoKG9sZCA9ICpwKSAhPSBOVUxM
KSB7DQogCQkvKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3Ro
IGFncmVlIHRvICovDQotCQlpZiAoIShvbGQtPmZsYWdzICYgbmV3LT5mbGFn
cyAmIFNBX1NISVJRKSkNCisJCWlmICghKG9sZC0+ZmxhZ3MgJiBuZXctPmZs
YWdzICYgU0FfU0hJUlEpKSB7DQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSgmaXJxX2NvbnRyb2xsZXJfbG9jayxmbGFncyk7DQogCQkJcmV0dXJuIC1F
QlVTWTsNCisJCX0NCiANCiAJCS8qIGFkZCBuZXcgaW50ZXJydXB0IGF0IGVu
ZCBvZiBpcnEgcXVldWUgKi8NCiAJCWRvIHsNCkBAIC05OTUsMTUgKzEwMjQs
OSBAQA0KIAkJc2hhcmVkID0gMTsNCiAJfQ0KIA0KLQlpZiAobmV3LT5mbGFn
cyAmIFNBX1NBTVBMRV9SQU5ET00pDQotCQlyYW5kX2luaXRpYWxpemVfaXJx
KGlycSk7DQotDQotCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KLQljbGkoKTsNCiAJ
KnAgPSBuZXc7DQogDQogCWlmICghc2hhcmVkKSB7DQotCQlzcGluX2xvY2so
JmlycV9jb250cm9sbGVyX2xvY2spOw0KICNpZmRlZiBfX1NNUF9fDQogCQlp
ZiAoSU9fQVBJQ19JUlEoaXJxKSkgew0KIAkJCWlmIChJT19BUElDX1ZFQ1RP
UihpcnEpID4gMHhmZSkNCkBAIC0xMDE2LDE0ICsxMDM5LDIwIEBADQogCQkJ
ICogRmlyc3QgZGlzYWJsZSBpdCBpbiB0aGUgODI1OUE6DQogCQkJICovDQog
CQkJY2FjaGVkX2lycV9tYXNrIHw9IDEgPDwgaXJxOw0KLQkJCWlmIChpcnEg
PCAxNikNCisJCQlpZiAoaXJxIDwgMTYpIHsNCiAJCQkJc2V0XzgyNTlBX2ly
cV9tYXNrKGlycSk7DQorCQkJCS8qDQorCQkJCSAqIHRyYW5zcG9ydCBwZW5k
aW5nIElTQSBJUlFzIHRvDQorCQkJCSAqIHRoZSBuZXcgZGVzY3JpcHRvcg0K
KwkJCQkgKi8NCisJCQkJaWYgKGk4MjU5QV9pcnFfcGVuZGluZyhpcnEpKQ0K
KwkJCQkJaXJxX2Rlc2NbaXJxXS5ldmVudHMgPSAxOw0KKwkJCX0NCiAJCX0N
CiAjZW5kaWYNCi0JCXVubWFza19nZW5lcmljX2lycShpcnEpOw0KLQkJc3Bp
bl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOw0KKwkJaXJxX2Rlc2Nb
aXJxXS5oYW5kbGVyLT5lbmFibGUoaXJxKTsNCiAJfQ0KLQlyZXN0b3JlX2Zs
YWdzKGZsYWdzKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Nv
bnRyb2xsZXJfbG9jayxmbGFncyk7DQogCXJldHVybiAwOw0KIH0NCiANCkBA
IC0xMDY1LDIzICsxMDk0LDIzIEBADQogCXN0cnVjdCBpcnFhY3Rpb24gKiBh
Y3Rpb24sICoqcDsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiANCi0JaWYg
KGlycSA+PSBOUl9JUlFTKSB7DQotCQlwcmludGsoIlRyeWluZyB0byBmcmVl
IElSUSVkXG4iLGlycSk7DQorCWlmIChpcnEgPj0gTlJfSVJRUykNCiAJCXJl
dHVybjsNCi0JfQ0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRy
b2xsZXJfbG9jayxmbGFncyk7DQogCWZvciAocCA9ICZpcnFfZGVzY1tpcnFd
LmFjdGlvbjsgKGFjdGlvbiA9ICpwKSAhPSBOVUxMOyBwID0gJmFjdGlvbi0+
bmV4dCkgew0KIAkJaWYgKGFjdGlvbi0+ZGV2X2lkICE9IGRldl9pZCkNCiAJ
CQljb250aW51ZTsNCiANCiAJCS8qIEZvdW5kIGl0IC0gbm93IGZyZWUgaXQg
Ki8NCi0JCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KLQkJY2xpKCk7DQogCQkqcCA9
IGFjdGlvbi0+bmV4dDsNCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0KIAkJ
a2ZyZWUoYWN0aW9uKTsNCi0JCXJldHVybjsNCisJCWlycV9kZXNjW2lycV0u
aGFuZGxlci0+ZGlzYWJsZShpcnEpOw0KKwkJZ290byBvdXQ7DQogCX0NCiAJ
cHJpbnRrKCJUcnlpbmcgdG8gZnJlZSBmcmVlIElSUSVkXG4iLGlycSk7DQor
b3V0Og0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxl
cl9sb2NrLGZsYWdzKTsNCiB9DQogDQogLyoNCkBAIC0xMTAzLDcgKzExMzIs
NyBAQA0KIAlzcGluX2xvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsN
CiAJZm9yIChpID0gTlJfSVJRUy0xOyBpID4gMDsgaS0tKSB7DQogCQlpZiAo
IWlycV9kZXNjW2ldLmFjdGlvbikgew0KLQkJCXVubWFza19nZW5lcmljX2ly
cShpKTsNCisJCQlpcnFfZGVzY1tpXS5oYW5kbGVyLT5lbmFibGUoaSk7DQog
CQkJaXJxcyB8PSAoMSA8PCBpKTsNCiAJCX0NCiAJfQ0KQEAgLTExNzAsOCAr
MTE5OSw4IEBADQogCQkgICAgKElPX0FQSUNfSVJRKGkpKSkgew0KIAkJCWlm
IChJT19BUElDX2lycV90cmlnZ2VyKGkpKQ0KIAkJCQlpcnFfZGVzY1tpXS5o
YW5kbGVyID0gJmlvYXBpY19sZXZlbF9pcnFfdHlwZTsNCi0JCQllbHNlDQot
CQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaW9hcGljX2VkZ2VfaXJxX3R5
cGU7DQorCQkJZWxzZSAvKiBlZGdlICovDQorCQkJCWlycV9kZXNjW2ldLmhh
bmRsZXIgPSAmaW9hcGljX2xldmVsX2lycV90eXBlOw0KIAkJCS8qDQogCQkJ
ICogZGlzYWJsZSBpdCBpbiB0aGUgODI1OUE6DQogCQkJICovDQpAQCAtMTIz
Myw2ICsxMjYyLDggQEANCiAJLyogSVBJIGZvciBNVFJSIGNvbnRyb2wgKi8N
CiAJc2V0X2ludHJfZ2F0ZSgweDUwLCBtdHJyX2ludGVycnVwdCk7DQogDQor
CS8qIElQSSB2ZWN0b3IgZm9yIEFQSUMgc3B1cmlvdXMgaW50ZXJydXB0cyAq
Lw0KKwlzZXRfaW50cl9nYXRlKDB4ZmYsIHNwdXJpb3VzX2ludGVycnVwdCk7
DQogI2VuZGlmCQ0KIAlyZXF1ZXN0X3JlZ2lvbigweDIwLDB4MjAsInBpYzEi
KTsNCiAJcmVxdWVzdF9yZWdpb24oMHhhMCwweDIwLCJwaWMyIik7DQotLS0g
bGludXgvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMub3JpZwlNb24gTWF5
IDE4IDA0OjQxOjQzIDE5OTgNCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVs
L2lvX2FwaWMuYwlXZWQgTWF5IDIwIDAwOjA4OjM2IDE5OTgNCkBAIC0xMTAs
NiArMTEwLDEyIEBADQogaW50IG1wY19kZWZhdWx0X3R5cGUgPSAwOwkJCS8q
IG5vbi0wIGlmIGRlZmF1bHQgKHRhYmxlLWxlc3MpDQogCQkJCQkJICAgTVAg
Y29uZmlndXJhdGlvbiAqLw0KIA0KKw0KKy8qDQorICogVGhpcyBpcyBwZXJm
b3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpDQorICov
DQorc3RhdGljIGludCBpcnFfMl9waW5bTlJfSVJRU107DQorDQogdW5zaWdu
ZWQgaW50IGlvX2FwaWNfcmVhZCAodW5zaWduZWQgaW50IHJlZykNCiB7DQog
CSpJT19BUElDX0JBU0UgPSByZWc7DQpAQCAtMTIyLDMyICsxMjgsMzIgQEAN
CiAJKihJT19BUElDX0JBU0UrNCkgPSB2YWx1ZTsNCiB9DQogDQotdm9pZCBl
bmFibGVfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpDQorLyoNCisg
KiBXZSBkaXNhYmxlIElPLUFQSUMgSVJRcyBieSBzZXR0aW5nIHRoZWlyICdk
ZXN0aW5hdGlvbiBDUFUgbWFzaycgdG8NCisgKiB6ZXJvLiBUcmljaywgdHJp
Y2suDQorICovDQordm9pZCBkaXNhYmxlX0lPX0FQSUNfaXJxKHVuc2lnbmVk
IGludCBpcnEpDQogew0KKwlpbnQgcGluID0gaXJxXzJfcGluW2lycV07DQog
CXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5Ow0KIA0KLQkvKg0K
LQkgKiBFbmFibGUgaXQgaW4gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFi
bGU6DQotCSAqLw0KLQkqKCgoaW50ICopJmVudHJ5KSswKSA9IGlvX2FwaWNf
cmVhZCgweDEwK2lycSoyKTsNCi0JZW50cnkubWFzayA9IDA7DQotCWlvX2Fw
aWNfd3JpdGUoMHgxMCsyKmlycSwgKigoKGludCAqKSZlbnRyeSkrMCkpOw0K
KwlpZiAocGluICE9IC0xKSB7DQorCQkqKCgoaW50ICopJmVudHJ5KSsxKSA9
IGlvX2FwaWNfcmVhZCgweDExK3BpbioyKTsNCisJCWVudHJ5LmRlc3QubG9n
aWNhbC5sb2dpY2FsX2Rlc3QgPSAweDA7DQorCQlpb19hcGljX3dyaXRlKDB4
MTErMipwaW4sICooKChpbnQgKikmZW50cnkpKzEpKTsNCisJfQ0KIH0NCiAN
Ci0vKg0KLSAqIHRoaXMgZnVuY3Rpb24gaXMganVzdCBoZXJlIHRvIG1ha2Ug
dGhpbmdzIGNvbXBsZXRlLCBvdGhlcndpc2UgaXQncw0KLSAqIHVudXNlZA0K
LSAqLw0KLXZvaWQgZGlzYWJsZV9JT19BUElDX2lycSAodW5zaWduZWQgaW50
IGlycSkNCit2b2lkIGVuYWJsZV9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQg
aXJxKQ0KIHsNCisJaW50IHBpbiA9IGlycV8yX3BpbltpcnFdOw0KIAlzdHJ1
Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsNCiANCi0JLyoNCi0JICog
RGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToN
Ci0JICovDQotCSooKChpbnQgKikmZW50cnkpKzApID0gaW9fYXBpY19yZWFk
KDB4MTAraXJxKjIpOw0KLQllbnRyeS5tYXNrID0gMTsNCi0JaW9fYXBpY193
cml0ZSgweDEwKzIqaXJxLCAqKCgoaW50ICopJmVudHJ5KSswKSk7DQorCWlm
IChwaW4gIT0gLTEpIHsNCisJCSooKChpbnQgKikmZW50cnkpKzEpID0gaW9f
YXBpY19yZWFkKDB4MTErcGluKjIpOw0KKwkJZW50cnkuZGVzdC5sb2dpY2Fs
LmxvZ2ljYWxfZGVzdCA9IDB4ZmY7DQorCQlpb19hcGljX3dyaXRlKDB4MTEr
MipwaW4sICooKChpbnQgKikmZW50cnkpKzEpKTsNCisJfQ0KIH0NCiANCiB2
b2lkIGNsZWFyX0lPX0FQSUNfcGluICh1bnNpZ25lZCBpbnQgcGluKQ0KQEAg
LTE2Myw2ICsxNjksNyBAQA0KIAlpb19hcGljX3dyaXRlKDB4MTErMipwaW4s
ICooKChpbnQgKikmZW50cnkpKzEpKTsNCiB9DQogDQorDQogLyoNCiAgKiBz
dXBwb3J0IGZvciBicm9rZW4gTVAgQklPU2VzLCBlbmFibGVzIGhhbmQtcmVk
aXJlY3Rpb24gb2YgUElSUTAtNyB0bw0KICAqIHNwZWNpZmljIENQVS1zaWRl
IElSUXMuDQpAQCAtMjU4LDEyOSArMjY1LDE3NiBAQA0KIAlyZXR1cm4gLTE7
DQogfQ0KIA0KLXN0YXRpYyBpbnQgaXJxX3RyaWdnZXIoaW50IGlkeCkNCisv
Kg0KKyAqIFRoZXJlIGFyZSBicm9rZW4gbXB0YWJsZXMgd2hpY2ggcmVnaXN0
ZXIgSVNBK2hpZ2gtYWN0aXZlK2xldmVsIElSUXMsDQorICogdGhlc2UgYXJl
IGlsbGVnYWwgYW5kIGFyZSBjb252ZXJ0ZWQgaGVyZSB0byBJU0EraGlnaC1h
Y3RpdmUrZWRnZQ0KKyAqIElSUSBzb3VyY2VzLiBDYXJlZnVsLCBJU0ErbG93
LWFjdGl2ZStsZXZlbCBpcyBhbm90aGVyIGJyb2tlbiBlbnRyeQ0KKyAqIHR5
cGUsIGl0IHJlcHJlc2VudHMgUENJIElSUXMgJ2VtYmVkZGVkIGludG8gYW4g
SVNBIGJ1cycsIHRoZXkgaGF2ZQ0KKyAqIHRvIGJlIGFjY2VwdGVkLiBZZXMs
IHVnaC4NCisgKi8NCisNCitzdGF0aWMgaW50IE1QQklPU19wb2xhcml0eShp
bnQgaWR4KQ0KIHsNCiAJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcGNfc3Jj
YnVzOw0KLQlpbnQgdHJpZ2dlcjsNCisJaW50IHBvbGFyaXR5Ow0KIA0KIAkv
Kg0KLQkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAoZWRnZSBvciBs
ZXZlbCBzZW5zaXRpdmUpOg0KKwkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9s
YXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOg0KIAkgKi8NCi0J
c3dpdGNoICgobXBfaXJxc1tpZHhdLm1wY19pcnFmbGFnPj4yKSAmIDMpDQor
CXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wY19pcnFmbGFnICYgMykNCiAJew0K
LQkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVu
dCAqLw0KKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRl
cGVuZGVudCBwb2xhcml0eSAqLw0KIAkJew0KIAkJCXN3aXRjaCAobXBfYnVz
X2lkX3RvX3R5cGVbYnVzXSkNCiAJCQl7DQotCQkJCWNhc2UgTVBfQlVTX0lT
QTogLyogSVNBIHBpbiwgZWRnZSAqLw0KKwkJCQljYXNlIE1QX0JVU19JU0E6
IC8qIElTQSBwaW4gKi8NCiAJCQkJew0KLQkJCQkJdHJpZ2dlciA9IDA7DQor
CQkJCQlwb2xhcml0eSA9IDA7DQogCQkJCQlicmVhazsNCiAJCQkJfQ0KLQkJ
CQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4sIGxldmVsICovDQorCQkJ
CWNhc2UgTVBfQlVTX1BDSTogLyogUENJIHBpbiAqLw0KIAkJCQl7DQotCQkJ
CQl0cmlnZ2VyID0gMTsNCisJCQkJCXBvbGFyaXR5ID0gMTsNCiAJCQkJCWJy
ZWFrOw0KIAkJCQl9DQogCQkJCWRlZmF1bHQ6DQogCQkJCXsNCiAJCQkJCXBy
aW50aygiYnJva2VuIEJJT1MhIVxuIik7DQotCQkJCQl0cmlnZ2VyID0gMTsN
CisJCQkJCXBvbGFyaXR5ID0gMTsNCiAJCQkJCWJyZWFrOw0KIAkJCQl9DQog
CQkJfQ0KIAkJCWJyZWFrOw0KIAkJfQ0KLQkJY2FzZSAxOiAvKiBlZGdlICov
DQorCQljYXNlIDE6IC8qIGhpZ2ggYWN0aXZlICovDQogCQl7DQotCQkJdHJp
Z2dlciA9IDA7DQorCQkJcG9sYXJpdHkgPSAwOw0KIAkJCWJyZWFrOw0KIAkJ
fQ0KIAkJY2FzZSAyOiAvKiByZXNlcnZlZCAqLw0KIAkJew0KIAkJCXByaW50
aygiYnJva2VuIEJJT1MhIVxuIik7DQotCQkJdHJpZ2dlciA9IDE7DQorCQkJ
cG9sYXJpdHkgPSAxOw0KIAkJCWJyZWFrOw0KIAkJfQ0KLQkJY2FzZSAzOiAv
KiBsZXZlbCAqLw0KKwkJY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovDQogCQl7
DQotCQkJdHJpZ2dlciA9IDE7DQorCQkJcG9sYXJpdHkgPSAxOw0KIAkJCWJy
ZWFrOw0KIAkJfQ0KIAkJZGVmYXVsdDogLyogaW52YWxpZCAqLw0KIAkJew0K
IAkJCXByaW50aygiYnJva2VuIEJJT1MhIVxuIik7DQotCQkJdHJpZ2dlciA9
IDA7DQorCQkJcG9sYXJpdHkgPSAxOw0KIAkJCWJyZWFrOw0KIAkJfQ0KIAl9
DQotCXJldHVybiB0cmlnZ2VyOw0KKwlyZXR1cm4gcG9sYXJpdHk7DQogfQ0K
IA0KLV9faW5pdGZ1bmMoc3RhdGljIGludCBpcnFfcG9sYXJpdHkoaW50IGlk
eCkpDQorDQorc3RhdGljIGludCBNUEJJT1NfdHJpZ2dlcihpbnQgaWR4KQ0K
IHsNCiAJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcGNfc3JjYnVzOw0KLQlp
bnQgcG9sYXJpdHk7DQorCWludCB0cmlnZ2VyOw0KIA0KIAkvKg0KLQkgKiBE
ZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxv
dyBhY3RpdmUpOg0KKwkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAo
ZWRnZSBvciBsZXZlbCBzZW5zaXRpdmUpOg0KIAkgKi8NCi0Jc3dpdGNoICht
cF9pcnFzW2lkeF0ubXBjX2lycWZsYWcgJiAzKQ0KKwlzd2l0Y2ggKChtcF9p
cnFzW2lkeF0ubXBjX2lycWZsYWc+PjIpICYgMykNCiAJew0KLQkJY2FzZSAw
OiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0
eSAqLw0KKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRl
cGVuZGVudCAqLw0KIAkJew0KIAkJCXN3aXRjaCAobXBfYnVzX2lkX3RvX3R5
cGVbYnVzXSkNCiAJCQl7DQotCQkJCWNhc2UgTVBfQlVTX0lTQTogLyogSVNB
IHBpbiAqLw0KKwkJCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4sIGVk
Z2UgKi8NCiAJCQkJew0KLQkJCQkJcG9sYXJpdHkgPSAwOw0KKwkJCQkJdHJp
Z2dlciA9IDA7DQogCQkJCQlicmVhazsNCiAJCQkJfQ0KLQkJCQljYXNlIE1Q
X0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8NCisJCQkJY2FzZSBNUF9CVVNfUENJ
OiAvKiBQQ0kgcGluLCBsZXZlbCAqLw0KIAkJCQl7DQotCQkJCQlwb2xhcml0
eSA9IDE7DQorCQkJCQl0cmlnZ2VyID0gMTsNCiAJCQkJCWJyZWFrOw0KIAkJ
CQl9DQogCQkJCWRlZmF1bHQ6DQogCQkJCXsNCiAJCQkJCXByaW50aygiYnJv
a2VuIEJJT1MhIVxuIik7DQotCQkJCQlwb2xhcml0eSA9IDE7DQorCQkJCQl0
cmlnZ2VyID0gMTsNCiAJCQkJCWJyZWFrOw0KIAkJCQl9DQogCQkJfQ0KIAkJ
CWJyZWFrOw0KIAkJfQ0KLQkJY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLw0K
KwkJY2FzZSAxOiAvKiBlZGdlICovDQogCQl7DQotCQkJcG9sYXJpdHkgPSAw
Ow0KKwkJCXRyaWdnZXIgPSAwOw0KIAkJCWJyZWFrOw0KIAkJfQ0KIAkJY2Fz
ZSAyOiAvKiByZXNlcnZlZCAqLw0KIAkJew0KIAkJCXByaW50aygiYnJva2Vu
IEJJT1MhIVxuIik7DQotCQkJcG9sYXJpdHkgPSAxOw0KKwkJCXRyaWdnZXIg
PSAxOw0KIAkJCWJyZWFrOw0KIAkJfQ0KLQkJY2FzZSAzOiAvKiBsb3cgYWN0
aXZlICovDQorCQljYXNlIDM6IC8qIGxldmVsICovDQogCQl7DQotCQkJcG9s
YXJpdHkgPSAxOw0KKwkJCXRyaWdnZXIgPSAxOw0KIAkJCWJyZWFrOw0KIAkJ
fQ0KIAkJZGVmYXVsdDogLyogaW52YWxpZCAqLw0KIAkJew0KIAkJCXByaW50
aygiYnJva2VuIEJJT1MhIVxuIik7DQotCQkJcG9sYXJpdHkgPSAxOw0KKwkJ
CXRyaWdnZXIgPSAwOw0KIAkJCWJyZWFrOw0KIAkJfQ0KIAl9DQotCXJldHVy
biBwb2xhcml0eTsNCisJcmV0dXJuIHRyaWdnZXI7DQorfQ0KKw0KK3N0YXRp
YyBpbnQgdHJpZ2dlcl9mbGFnX2Jyb2tlbiAoaW50IGlkeCkNCit7DQorCWlu
dCBidXMgPSBtcF9pcnFzW2lkeF0ubXBjX3NyY2J1czsNCisJaW50IHBvbGFy
aXR5ID0gTVBCSU9TX3BvbGFyaXR5KGlkeCk7DQorCWludCB0cmlnZ2VyID0g
TVBCSU9TX3RyaWdnZXIoaWR4KTsNCisNCisJaWYgKCAobXBfYnVzX2lkX3Rv
X3R5cGVbYnVzXSA9PSBNUF9CVVNfSVNBKSAmJg0KKwkJKHBvbGFyaXR5ID09
IDApIC8qIGFjdGl2ZS1oaWdoICovICYmDQorCQkodHJpZ2dlciA9PSAxKSAv
KiBsZXZlbCAqLyApDQorDQorCQlyZXR1cm4gMTsgLyogYnJva2VuICovDQor
DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlycV9wb2xhcml0
eSAoaW50IGlkeCkNCit7DQorCS8qDQorCSAqIFRoZXJlIGFyZSBubyBrbm93
biBCSU9TIGJ1Z3Mgd3J0IHBvbGFyaXR5LiAgICAgICAgICAgICAgICB5ZXQu
DQorCSAqLw0KKwlyZXR1cm4gTVBCSU9TX3BvbGFyaXR5KGlkeCk7DQogfQ0K
IA0KLV9faW5pdGZ1bmMoc3RhdGljIGludCBwaW5fMl9pcnEgKGludCBpZHgs
IGludCBwaW4pKQ0KK3N0YXRpYyBpbnQgaXJxX3RyaWdnZXIgKGludCBpZHgp
DQorew0KKwlpbnQgdHJpZ2dlciA9IE1QQklPU190cmlnZ2VyKGlkeCk7DQor
DQorCWlmICh0cmlnZ2VyX2ZsYWdfYnJva2VuIChpZHgpKQ0KKwkJdHJpZ2dl
ciA9IDA7DQorCXJldHVybiB0cmlnZ2VyOw0KK30NCisNCitzdGF0aWMgaW50
IHBpbl8yX2lycSAoaW50IGlkeCwgaW50IHBpbikNCiB7DQogCWludCBpcnE7
DQogCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBjX3NyY2J1czsNCiANCisJ
LyoNCisJICogRGVidWdnaW5nIGNoZWNrLCB3ZSBhcmUgaW4gYmlnIHRyb3Vi
bGUgaWYgdGhpcyBtZXNzYWdlIHBvcHMgdXAhDQorCSAqLw0KKwlpZiAobXBf
aXJxc1tpZHhdLm1wY19kc3RpcnEgIT0gcGluKQ0KKwkJcHJpbnRrKCJicm9r
ZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7DQorDQog
CXN3aXRjaCAobXBfYnVzX2lkX3RvX3R5cGVbYnVzXSkNCiAJew0KIAkJY2Fz
ZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovDQpAQCAtNDIzLDEyICs0Nzcs
MTIgQEANCiANCiBpbnQgSU9fQVBJQ19pcnFfdHJpZ2dlciAoaW50IGlycSkN
CiB7DQotCWludCBpZHgsIGk7DQorCWludCBpZHgsIHBpbjsNCiANCi0JZm9y
IChpPTA7IGk8bnJfaW9hcGljX3JlZ2lzdGVyczsgaSsrKSB7DQotCQlpZHgg
PSBmaW5kX2lycV9lbnRyeShpLG1wX0lOVCk7DQotCQlpZiAoaXJxID09IHBp
bl8yX2lycShpZHgsaSkpDQotCQkJcmV0dXJuIGlycV90cmlnZ2VyKGlkeCk7
DQorCWZvciAocGluPTA7IHBpbjxucl9pb2FwaWNfcmVnaXN0ZXJzOyBwaW4r
Kykgew0KKwkJaWR4ID0gZmluZF9pcnFfZW50cnkocGluLG1wX0lOVCk7DQor
CQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LHBp
bikpKQ0KKwkJCXJldHVybiAoaXJxX3RyaWdnZXIoaWR4KSk7DQogCX0NCiAJ
LyoNCiAJICogbm9uZXhpc3RhbnQgSVJRcyBhcmUgZWRnZSBkZWZhdWx0DQpA
QCAtNDM5LDExICs0OTMsMTEgQEANCiBfX2luaXRmdW5jKHZvaWQgc2V0dXBf
SU9fQVBJQ19pcnFzICh2b2lkKSkNCiB7DQogCXN0cnVjdCBJT19BUElDX3Jv
dXRlX2VudHJ5IGVudHJ5Ow0KLQlpbnQgaSwgaWR4LCBidXMsIGlycSwgZmly
c3Rfbm90Y29uPTE7DQorCWludCBwaW4sIGlkeCwgYnVzLCBpcnEsIGZpcnN0
X25vdGNvbj0xOw0KIA0KIAlwcmludGsoImluaXQgSU9fQVBJQyBJUlFzXG4i
KTsNCiANCi0JZm9yIChpPTA7IGk8bnJfaW9hcGljX3JlZ2lzdGVyczsgaSsr
KSB7DQorCWZvciAocGluPTA7IHBpbjxucl9pb2FwaWNfcmVnaXN0ZXJzOyBw
aW4rKykgew0KIA0KIAkJLyoNCiAJCSAqIGFkZCBpdCB0byB0aGUgSU8tQVBJ
QyBpcnEtcm91dGluZyB0YWJsZToNCkBAIC00NTUsNDUgKzUwOSwzNCBAQA0K
IAkJZW50cnkubWFzayA9IDA7CQkJCS8qIGVuYWJsZSBJUlEgKi8NCiAJCWVu
dHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSAweGZmOwkvKiBhbGwg
Q1BVcyAqLw0KIA0KLQkJaWR4ID0gZmluZF9pcnFfZW50cnkoaSxtcF9JTlQp
Ow0KKwkJaWR4ID0gZmluZF9pcnFfZW50cnkocGluLG1wX0lOVCk7DQogCQlp
ZiAoaWR4ID09IC0xKSB7DQogCQkJaWYgKGZpcnN0X25vdGNvbikgew0KLQkJ
CQlwcmludGsoIiBJTy1BUElDIHBpbiAlZCIsIGkpOw0KKwkJCQlwcmludGso
IiBJTy1BUElDIHBpbiAlZCIsIHBpbik7DQogCQkJCWZpcnN0X25vdGNvbj0w
Ow0KIAkJCX0gZWxzZQ0KLQkJCQlwcmludGsoIiwgJWQiLCBpKTsNCisJCQkJ
cHJpbnRrKCIsICVkIiwgcGluKTsNCiAJCQljb250aW51ZTsNCiAJCX0NCiAN
CiAJCWVudHJ5LnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpZHgpOw0KIAkJZW50
cnkucG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaWR4KTsNCiANCi0JCWlycSA9
IHBpbl8yX2lycShpZHgsaSk7DQorCQlpcnEgPSBwaW5fMl9pcnEoaWR4LHBp
bik7DQorCQlpcnFfMl9waW5baXJxXSA9IHBpbjsNCiANCiAJCWlmICghSU9f
QVBJQ19JUlEoaXJxKSkNCiAJCQljb250aW51ZTsNCiANCiAJCWVudHJ5LnZl
Y3RvciA9IElPX0FQSUNfVkVDVE9SKGlycSk7DQogDQotCS8qDQotCSAqIFRo
ZXJlIGFyZSBicm9rZW4gbXB0YWJsZXMgd2hpY2ggcmVnaXN0ZXIgSVNBK2hp
Z2gtYWN0aXZlK2xldmVsIElSUXMsDQotCSAqIHRoZXNlIGFyZSBpbGxlZ2Fs
IGFuZCBhcmUgY29udmVydGVkIGhlcmUgdG8gSVNBK2hpZ2gtYWN0aXZlK2Vk
Z2UNCi0JICogSVJRIHNvdXJjZXMuIENhcmVmdWwsIElTQStsb3ctYWN0aXZl
K2xldmVsIGlzIGFub3RoZXIgYnJva2VuIGVudHJ5DQotCSAqIHR5cGUsIGl0
IHJlcHJlc2VudHMgUENJIElSUXMgJ2VtYmVkZGVkIGludG8gYW4gSVNBIGJ1
cycsIHRoZXkgaGF2ZQ0KLQkgKiB0byBiZSBhY2NlcHRlZC4gWWVzLCB1Z2gu
DQotCSAqLw0KIAkJYnVzID0gbXBfaXJxc1tpZHhdLm1wY19zcmNidXM7DQog
DQotCQlpZiAoIChtcF9idXNfaWRfdG9fdHlwZVtidXNdID09IE1QX0JVU19J
U0EpICYmDQotCQkJKGVudHJ5LnBvbGFyaXR5ID09IDApIC8qIGFjdGl2ZS1o
aWdoICovICYmDQotCQkJKGVudHJ5LnRyaWdnZXIgPT0gMSkgLyogbGV2ZWwg
Ki8gKQ0KLQkJew0KLQkJCXByaW50aygiYnJva2VuIEJJT1MsIGNoYW5naW5n
IHBpbiAlZCB0byBlZGdlXG4iLCBpKTsNCi0JCQllbnRyeS50cmlnZ2VyID0g
MDsNCi0JCX0NCisJCWlmICh0cmlnZ2VyX2ZsYWdfYnJva2VuIChpZHgpKQ0K
KwkJCXByaW50aygiYnJva2VuIEJJT1MsIGNoYW5naW5nIHBpbiAlZCB0byBl
ZGdlXG4iLCBwaW4pOw0KIA0KLQkJaW9fYXBpY193cml0ZSgweDEwKzIqaSwg
KigoKGludCAqKSZlbnRyeSkrMCkpOw0KLQkJaW9fYXBpY193cml0ZSgweDEx
KzIqaSwgKigoKGludCAqKSZlbnRyeSkrMSkpOw0KKwkJaW9fYXBpY193cml0
ZSgweDEwKzIqcGluLCAqKCgoaW50ICopJmVudHJ5KSswKSk7DQorCQlpb19h
cGljX3dyaXRlKDB4MTErMipwaW4sICooKChpbnQgKikmZW50cnkpKzEpKTsN
CiAJfQ0KIA0KIAlpZiAoIWZpcnN0X25vdGNvbikNCkBAIC01NDksNyArNTky
LDcgQEANCiAJaW9fYXBpY193cml0ZSgweDExKzIqcGluLCAqKCgoaW50ICop
JmVudHJ5KSsxKSk7DQogfQ0KIA0KLV9faW5pdGZ1bmModm9pZCBwcmludF9J
T19BUElDICh2b2lkKSkNCit2b2lkIHByaW50X0lPX0FQSUMgKHZvaWQpDQog
ew0KIAlpbnQgaTsNCiAJc3RydWN0IElPX0FQSUNfcmVnXzAwIHJlZ18wMDsN
CkBAIC01OTgsNyArNjQxLDcgQEANCiANCiAJcHJpbnRrKCIuLi4uIElSUSBy
ZWRpcmVjdGlvbiB0YWJsZTpcbiIpOw0KIA0KLQlwcmludGsoIiBOUiAgTG9n
IFBoeSAiKTsNCisJcHJpbnRrKCIgTlIgTG9nIFBoeSAiKTsNCiAJcHJpbnRr
KCJNYXNrIFRyaWcgSVJSIFBvbCBTdGF0IERlc3QgRGVsaSBWZWN0OiAgIFxu
Iik7DQogDQogCWZvciAoaT0wOyBpPD1yZWdfMDEuZW50cmllczsgaSsrKSB7
DQpAQCAtNjA3LDcgKzY1MCw3IEBADQogCQkqKCgoaW50ICopJmVudHJ5KSsw
KSA9IGlvX2FwaWNfcmVhZCgweDEwK2kqMik7DQogCQkqKCgoaW50ICopJmVu
dHJ5KSsxKSA9IGlvX2FwaWNfcmVhZCgweDExK2kqMik7DQogDQotCQlwcmlu
dGsoIiAlMDJ4ICAlMDNYICAlMDJYICAgIiwNCisJCXByaW50aygiICUwMngg
JTAzWCAlMDJYICAiLA0KIAkJCWksDQogCQkJZW50cnkuZGVzdC5sb2dpY2Fs
LmxvZ2ljYWxfZGVzdCwNCiAJCQllbnRyeS5kZXN0LnBoeXNpY2FsLnBoeXNp
Y2FsX2Rlc3QNCkBAIC02MjUsNiArNjY4LDExIEBADQogCQkpOw0KIAl9DQog
DQorCXByaW50aygiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOw0KKwlmb3Ig
KGk9MDsgaTxOUl9JUlFTOyBpKyspDQorCQlwcmludGsoIiVkLT4lZCAiLCBp
LCBpcnFfMl9waW5baV0pOw0KKwlwcmludGsoIlxuIik7DQorDQogCXByaW50
aygiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGRvbmUu
XG4iKTsNCiANCiAJcmV0dXJuOw0KQEAgLTYzMiw4ICs2ODAsMTAgQEANCiAN
CiBfX2luaXRmdW5jKHN0YXRpYyB2b2lkIGluaXRfc3ltX21vZGUgKHZvaWQp
KQ0KIHsNCi0JaW50IGk7DQorCWludCBpLCBwaW47DQogDQorCWZvciAoaT0w
OyBpPE5SX0lSUVM7IGkrKykNCisJCWlycV8yX3BpbltpXSA9IC0xOw0KIAlp
ZiAoIXBpcnFzX2VuYWJsZWQpDQogCQlmb3IgKGk9MDsgaTxNQVhfUElSUVM7
IGkrKykNCiAJCQlwaXJxX2VudHJpZXNbaV09LTE7DQpAQCAtNjU4LDggKzcw
OCw4IEBADQogCS8qDQogCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBi
ZWluZyBlbXB0eSBhdCBib290dXANCiAJICovDQotCWZvciAoaT0wOyBpPG5y
X2lvYXBpY19yZWdpc3RlcnM7IGkrKykNCi0JCWNsZWFyX0lPX0FQSUNfcGlu
IChpKTsNCisJZm9yIChwaW49MDsgcGluPG5yX2lvYXBpY19yZWdpc3RlcnM7
IHBpbisrKQ0KKwkJY2xlYXJfSU9fQVBJQ19waW4gKHBpbik7DQogfQ0KIA0K
IC8qDQotLS0gbGludXgvYXJjaC9pMzg2L2tlcm5lbC9pcnEuaC5vcmlnCU1v
biBNYXkgMTggMDU6Mzk6NDIgMTk5OA0KKysrIGxpbnV4L2FyY2gvaTM4Ni9r
ZXJuZWwvaXJxLmgJVHVlIE1heSAxOSAyMjo0MzoyMyAxOTk4DQpAQCAtMTIs
NyArMTIsOCBAQA0KIHZvaWQgdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJx
KTsNCiB2b2lkIGVuYWJsZV9JT19BUElDX2lycSAodW5zaWduZWQgaW50IGly
cSk7DQogdm9pZCBkaXNhYmxlX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQg
aXJxKTsNCi12b2lkIHNldF84MjU5QV9pcnFfbWFzayh1bnNpZ25lZCBpbnQg
aXJxKTsNCit2b2lkIHNldF84MjU5QV9pcnFfbWFzayAodW5zaWduZWQgaW50
IGlycSk7DQoraW50IGk4MjU5QV9pcnFfcGVuZGluZyAodW5zaWduZWQgaW50
IGlycSk7DQogdm9pZCBhY2tfQVBJQ19pcnEgKHZvaWQpOw0KIHZvaWQgc2V0
dXBfSU9fQVBJQyAodm9pZCk7DQogdm9pZCBpbml0X0lPX0FQSUNfdHJhcHMo
dm9pZCk7DQpAQCAtMjEsNiArMjIsNyBAQA0KIHZvaWQgbWFrZV84MjU5QV9p
cnEgKHVuc2lnbmVkIGludCBpcnEpOw0KIHZvaWQgc2VuZF9JUEkgKGludCBk
ZXN0LCBpbnQgdmVjdG9yKTsNCiB2b2lkIGluaXRfcGljX21vZGUgKHZvaWQp
Ow0KK3ZvaWQgcHJpbnRfSU9fQVBJQyAodm9pZCk7DQogDQogZXh0ZXJuIHVu
c2lnbmVkIGludCBpb19hcGljX2lycXM7DQogDQo=
---1247997369-1788761421-895140129=:14525--

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