[patch] 2.4.19-pre10-ac2: O(1) scheduler merge, -A3.

Ingo Molnar (mingo@elte.hu)
Sun, 16 Jun 2002 19:00:43 +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.

--655623-1782464326-1024244390=:9633
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.44.0206161824211.9989@e2>

the attached patch, sched-2.4.19-pre10-ac2-A3, is a backport of the
current 2.5 O(1) scheduler, against 2.4.19-pre10-ac2. The patch includes
all the recent fixes. (It should not break any architecture that was
working before on -ac. The most affected architecture is Sparc64, i added
the bits without testing them. David?)

The patch can also be downloaded from:

http://redhat.com/~mingo/O(1)-scheduler/sched-2.4.19-pre10-ac2-A3

Changes relative to 2.4.19-pre10-ac2:

Bugfixes:

- rq-frozen fixes, which closes SMP races on x86 and Sparc64 as well.

- O(1) scheduling sched_yield() fixes: do not starve CPU-intensive
processes.

- migration bugfix, do not fast-migrate the task incorrectly if the task
is in the middle of load_balance().

- sync wakeup reintroduction - this should fix the pipe latency problems
observed.

Feature backports:

- nr_uninterruptible optimization. (This is a fairly straightforward
and risk-less feature, and since it also made the backport easier, i
included it.)

- sched_setaffinity() & sched_getaffinity() syscalls on x86.

plus identity changes, comment updates, to bring sched.c in line with the
2.5 version.

the patch was tested on x86 UP and SMP boxes.

Ingo

--655623-1782464326-1024244390=:9633
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sched-2.4.19-pre10-ac2-A3"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0206161900430.10647@e2>
Content-Description:
Content-Disposition: attachment; filename="sched-2.4.19-pre10-ac2-A3"

LS0tIGxpbnV4L2ZzL3BpcGUuYy5vcmlnCVN1biBKdW4gMTYgMTg6NDY6NDUg
MjAwMg0KKysrIGxpbnV4L2ZzL3BpcGUuYwlTdW4gSnVuIDE2IDE4OjQ3OjE0
IDIwMDINCkBAIC0xMTUsNyArMTE1LDcgQEANCiAJCSAqIHdyaXRlcnMgc3lu
Y2hyb25vdXNseSB0aGF0IHRoZXJlIGlzIG1vcmUNCiAJCSAqIHJvb20uDQog
CQkgKi8NCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShQSVBFX1dBSVQoKmlu
b2RlKSk7DQorCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhQSVBFX1dB
SVQoKmlub2RlKSk7DQogCQlpZiAoIVBJUEVfRU1QVFkoKmlub2RlKSkNCiAJ
CQlCVUcoKTsNCiAJCWdvdG8gZG9fbW9yZV9yZWFkOw0KQEAgLTIxNSw3ICsy
MTUsNyBAQA0KIAkJCSAqIGlzIGdvaW5nIHRvIGdpdmUgdXAgdGhpcyBDUFUs
IHNvIGl0IGRvZXNudCBoYXZlDQogCQkJICogdG8gZG8gaWRsZSByZXNjaGVk
dWxlcy4NCiAJCQkgKi8NCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoUElQ
RV9XQUlUKCppbm9kZSkpOw0KKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9z
eW5jKFBJUEVfV0FJVCgqaW5vZGUpKTsNCiAJCQlQSVBFX1dBSVRJTkdfV1JJ
VEVSUygqaW5vZGUpKys7DQogCQkJcGlwZV93YWl0KGlub2RlKTsNCiAJCQlQ
SVBFX1dBSVRJTkdfV1JJVEVSUygqaW5vZGUpLS07DQotLS0gbGludXgva2Vy
bmVsL3NjaGVkLmMub3JpZwlTdW4gSnVuIDE2IDE3OjM0OjA2IDIwMDINCisr
KyBsaW51eC9rZXJuZWwvc2NoZWQuYwlTdW4gSnVuIDE2IDE4OjIzOjQ0IDIw
MDINCkBAIC0xLDUgKzEsNSBAQA0KIC8qDQotICogIGxpbnV4L2tlcm5lbC9z
Y2hlZC5jDQorICogIGtlcm5lbC9zY2hlZC5jDQogICoNCiAgKiAgS2VybmVs
IHNjaGVkdWxlciBhbmQgcmVsYXRlZCBzeXNjYWxscw0KICAqDQpAQCAtMTMs
MTYgKzEzLDE4IEBADQogICogIAkJaHlicmlkIHByaW9yaXR5LWxpc3QgYW5k
IHJvdW5kLXJvYmluIGRlc2lnbiB3aXRoDQogICogIAkJYW4gYXJyYXktc3dp
dGNoIG1ldGhvZCBvZiBkaXN0cmlidXRpbmcgdGltZXNsaWNlcw0KICAqICAJ
CWFuZCBwZXItQ1BVIHJ1bnF1ZXVlcy4gIEFkZGl0aW9uYWwgY29kZSBieSBE
YXZpZGUNCi0gKiAgCQlMaWJlbnppLCBSb2JlcnQgTG92ZSwgYW5kIFJ1c3R5
IFJ1c3NlbC4NCisgKiAgCQlMaWJlbnppLCBSb2JlcnQgTG92ZSwgYW5kIFJ1
c3R5IFJ1c3NlbGwuDQogICovDQogDQogI2luY2x1ZGUgPGxpbnV4L21tLmg+
DQogI2luY2x1ZGUgPGxpbnV4L25taS5oPg0KICNpbmNsdWRlIDxsaW51eC9p
bml0Lmg+DQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQorI2luY2x1ZGUg
PGxpbnV4L2hpZ2htZW0uaD4NCiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2su
aD4NCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQogI2luY2x1ZGUg
PGFzbS9tbXVfY29udGV4dC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1
cHQuaD4NCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPg0KICNpbmNs
dWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPg0KIA0KIC8qDQpAQCAtMTMzLDgg
KzEzNSw4IEBADQogICovDQogc3RydWN0IHJ1bnF1ZXVlIHsNCiAJc3Bpbmxv
Y2tfdCBsb2NrOw0KLQlzcGlubG9ja190IGZyb3plbjsNCiAJdW5zaWduZWQg
bG9uZyBucl9ydW5uaW5nLCBucl9zd2l0Y2hlcywgZXhwaXJlZF90aW1lc3Rh
bXA7DQorCXNpZ25lZCBsb25nIG5yX3VuaW50ZXJydXB0aWJsZTsNCiAJdGFz
a190ICpjdXJyLCAqaWRsZTsNCiAJcHJpb19hcnJheV90ICphY3RpdmUsICpl
eHBpcmVkLCBhcnJheXNbMl07DQogCWludCBwcmV2X25yX3J1bm5pbmdbTlJf
Q1BVU107DQpAQCAtMTUwLDEzICsxNTIsMjkgQEANCiAjZGVmaW5lIGNwdV9j
dXJyKGNwdSkJCShjcHVfcnEoY3B1KS0+Y3VycikNCiAjZGVmaW5lIHJ0X3Rh
c2socCkJCSgocCktPnByaW8gPCBNQVhfUlRfUFJJTykNCiANCisvKg0KKyAq
IERlZmF1bHQgY29udGV4dC1zd2l0Y2ggbG9ja2luZzoNCisgKi8NCisjaWZu
ZGVmIHByZXBhcmVfYXJjaF9zY2hlZHVsZQ0KKyMgZGVmaW5lIHByZXBhcmVf
YXJjaF9zY2hlZHVsZShwcmV2KQlkbyB7IH0gd2hpbGUoMCkNCisjIGRlZmlu
ZSBmaW5pc2hfYXJjaF9zY2hlZHVsZShwcmV2KQlkbyB7IH0gd2hpbGUoMCkN
CisjIGRlZmluZSBwcmVwYXJlX2FyY2hfc3dpdGNoKHJxKQlkbyB7IH0gd2hp
bGUoMCkNCisjIGRlZmluZSBmaW5pc2hfYXJjaF9zd2l0Y2gocnEpCQlzcGlu
X3VubG9ja19pcnEoJihycSktPmxvY2spDQorI2VuZGlmDQorDQorLyoNCisg
KiB0YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBydW5xdWV1ZSBhIGdpdmVuIHRh
c2sgcmVzaWRlcyBvbiBhbmQgZGlzYWJsZQ0KKyAqIGludGVycnVwdHMuICBO
b3RlIHRoZSBvcmRlcmluZzogd2UgY2FuIHNhZmVseSBsb29rdXAgdGhlIHRh
c2tfcnEgd2l0aG91dA0KKyAqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIHByZWVt
cHRpb24uDQorICovDQogc3RhdGljIGlubGluZSBydW5xdWV1ZV90ICp0YXNr
X3JxX2xvY2sodGFza190ICpwLCB1bnNpZ25lZCBsb25nICpmbGFncykNCiB7
DQogCXN0cnVjdCBydW5xdWV1ZSAqcnE7DQogDQogcmVwZWF0X2xvY2tfdGFz
azoNCisJbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsNCiAJcnEgPSB0YXNrX3Jx
KHApOw0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssICpmbGFncyk7
DQorCXNwaW5fbG9jaygmcnEtPmxvY2spOw0KIAlpZiAodW5saWtlbHkocnEg
IT0gdGFza19ycShwKSkpIHsNCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo
JnJxLT5sb2NrLCAqZmxhZ3MpOw0KIAkJZ290byByZXBlYXRfbG9ja190YXNr
Ow0KQEAgLTE3MCw2ICsxODgsMjMgQEANCiB9DQogDQogLyoNCisgKiBycV9s
b2NrIC0gbG9jayBhIGdpdmVuIHJ1bnF1ZXVlIGFuZCBkaXNhYmxlIGludGVy
cnVwdHMuDQorICovDQorc3RhdGljIGlubGluZSBydW5xdWV1ZV90ICpycV9s
b2NrKHJ1bnF1ZXVlX3QgKnJxKQ0KK3sNCisJbG9jYWxfaXJxX2Rpc2FibGUo
KTsNCisJcnEgPSB0aGlzX3JxKCk7DQorCXNwaW5fbG9jaygmcnEtPmxvY2sp
Ow0KKwlyZXR1cm4gcnE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBy
cV91bmxvY2socnVucXVldWVfdCAqcnEpDQorew0KKwlzcGluX3VubG9jaygm
cnEtPmxvY2spOw0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7DQorfQ0KKw0KKy8q
DQogICogQWRkaW5nL3JlbW92aW5nIGEgdGFzayB0by9mcm9tIGEgcHJpb3Jp
dHkgYXJyYXk6DQogICovDQogc3RhdGljIGlubGluZSB2b2lkIGRlcXVldWVf
dGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHByaW9fYXJyYXlfdCAqYXJy
YXkpDQpAQCAtMjM5LDEyICsyNzQsMTUgQEANCiBzdGF0aWMgaW5saW5lIHZv
aWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcnVu
cXVldWVfdCAqcnEpDQogew0KIAlycS0+bnJfcnVubmluZy0tOw0KKwlpZiAo
cC0+c3RhdGUgPT0gVEFTS19VTklOVEVSUlVQVElCTEUpDQorCQlycS0+bnJf
dW5pbnRlcnJ1cHRpYmxlKys7DQogCWRlcXVldWVfdGFzayhwLCBwLT5hcnJh
eSk7DQogCXAtPmFycmF5ID0gTlVMTDsNCiB9DQogDQogc3RhdGljIGlubGlu
ZSB2b2lkIHJlc2NoZWRfdGFzayh0YXNrX3QgKnApDQogew0KKyNpZmRlZiBD
T05GSUdfU01QDQogCWludCBuZWVkX3Jlc2NoZWQ7DQogDQogCW5lZWRfcmVz
Y2hlZCA9IHAtPm5lZWRfcmVzY2hlZDsNCkBAIC0yNTIsNiArMjkwLDkgQEAN
CiAJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7DQogCWlmICghbmVlZF9yZXNj
aGVkICYmIChwLT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSkNCiAJCXNt
cF9zZW5kX3Jlc2NoZWR1bGUocC0+Y3B1KTsNCisjZWxzZQ0KKwlzZXRfdHNr
X25lZWRfcmVzY2hlZChwKTsNCisjZW5kaWYNCiB9DQogDQogI2lmZGVmIENP
TkZJR19TTVANCkBAIC0yNjcsOSArMzA4LDkgQEANCiANCiByZXBlYXQ6DQog
CXJxID0gdGFza19ycShwKTsNCi0Jd2hpbGUgKHVubGlrZWx5KHJxLT5jdXJy
ID09IHApKSB7DQorCWlmICh1bmxpa2VseShycS0+Y3VyciA9PSBwKSkgew0K
IAkJY3B1X3JlbGF4KCk7DQotCQliYXJyaWVyKCk7DQorCQlnb3RvIHJlcGVh
dDsNCiAJfQ0KIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOw0KIAlp
ZiAodW5saWtlbHkocnEtPmN1cnIgPT0gcCkpIHsNCkBAIC0zMDMsMzUgKzM0
NCw1MCBAQA0KICAqICJjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORyIg
dG8gbWFyayB5b3Vyc2VsZiBydW5uYWJsZQ0KICAqIHdpdGhvdXQgdGhlIG92
ZXJoZWFkIG9mIHRoaXMuDQogICovDQotc3RhdGljIGludCB0cnlfdG9fd2Fr
ZV91cCh0YXNrX3QgKiBwKQ0KK3N0YXRpYyBpbnQgdHJ5X3RvX3dha2VfdXAo
dGFza190ICogcCwgaW50IHN5bmMpDQogew0KIAl1bnNpZ25lZCBsb25nIGZs
YWdzOw0KIAlpbnQgc3VjY2VzcyA9IDA7DQorCWxvbmcgb2xkX3N0YXRlOw0K
IAlydW5xdWV1ZV90ICpycTsNCiANCityZXBlYXRfbG9ja190YXNrOg0KIAly
cSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOw0KLQlwLT5zdGF0ZSA9IFRB
U0tfUlVOTklORzsNCisJb2xkX3N0YXRlID0gcC0+c3RhdGU7DQogCWlmICgh
cC0+YXJyYXkpIHsNCisJCWlmICh1bmxpa2VseShzeW5jICYmIChycS0+Y3Vy
ciAhPSBwKSkpIHsNCisJCQlpZiAocC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3Jf
aWQoKSkgew0KKwkJCQlwLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQor
CQkJCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOw0KKwkJCQlnb3RvIHJl
cGVhdF9sb2NrX3Rhc2s7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKG9sZF9zdGF0
ZSA9PSBUQVNLX1VOSU5URVJSVVBUSUJMRSkNCisJCQlycS0+bnJfdW5pbnRl
cnJ1cHRpYmxlLS07DQogCQlhY3RpdmF0ZV90YXNrKHAsIHJxKTsNCisJCS8q
DQorCQkgKiBJZiBzeW5jIGlzIHNldCwgYSByZXNjaGVkX3Rhc2soKSBpcyBh
IE5PT1ANCisJCSAqLw0KIAkJaWYgKHAtPnByaW8gPCBycS0+Y3Vyci0+cHJp
bykNCiAJCQlyZXNjaGVkX3Rhc2socnEtPmN1cnIpOw0KIAkJc3VjY2VzcyA9
IDE7DQogCX0NCisJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7DQogCXRhc2tf
cnFfdW5sb2NrKHJxLCAmZmxhZ3MpOw0KKw0KIAlyZXR1cm4gc3VjY2VzczsN
CiB9DQogDQogaW50IHdha2VfdXBfcHJvY2Vzcyh0YXNrX3QgKiBwKQ0KIHsN
Ci0JcmV0dXJuIHRyeV90b193YWtlX3VwKHApOw0KKwlyZXR1cm4gdHJ5X3Rv
X3dha2VfdXAocCwgMCk7DQogfQ0KIA0KIHZvaWQgd2FrZV91cF9mb3JrZWRf
cHJvY2Vzcyh0YXNrX3QgKiBwKQ0KIHsNCiAJcnVucXVldWVfdCAqcnE7DQog
DQotCXJxID0gdGhpc19ycSgpOw0KLQlzcGluX2xvY2tfaXJxKCZycS0+bG9j
ayk7DQorCXJxID0gcnFfbG9jayhycSk7DQogDQogCXAtPnN0YXRlID0gVEFT
S19SVU5OSU5HOw0KIAlpZiAoIXJ0X3Rhc2socCkpIHsNCkBAIC0zNDYsNyAr
NDAyLDggQEANCiAJfQ0KIAlwLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7
DQogCWFjdGl2YXRlX3Rhc2socCwgcnEpOw0KLQlzcGluX3VubG9ja19pcnEo
JnJxLT5sb2NrKTsNCisNCisJcnFfdW5sb2NrKHJxKTsNCiB9DQogDQogLyoN
CkBAIC0zNzcsMTcgKzQzNCwxNiBAQA0KICNpZiBDT05GSUdfU01QDQogYXNt
bGlua2FnZSB2b2lkIHNjaGVkdWxlX3RhaWwodGFza190ICpwcmV2KQ0KIHsN
Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ0aGlzX3JxKCktPmZyb3plbik7DQorCWZp
bmlzaF9hcmNoX3N3aXRjaCh0aGlzX3JxKCkpOw0KKwlmaW5pc2hfYXJjaF9z
Y2hlZHVsZShwcmV2KTsNCiB9DQogI2VuZGlmDQogDQotc3RhdGljIGlubGlu
ZSB2b2lkIGNvbnRleHRfc3dpdGNoKHRhc2tfdCAqcHJldiwgdGFza190ICpu
ZXh0KQ0KK3N0YXRpYyBpbmxpbmUgdGFza190ICogY29udGV4dF9zd2l0Y2go
dGFza190ICpwcmV2LCB0YXNrX3QgKm5leHQpDQogew0KIAlzdHJ1Y3QgbW1f
c3RydWN0ICptbSA9IG5leHQtPm1tOw0KIAlzdHJ1Y3QgbW1fc3RydWN0ICpv
bGRtbSA9IHByZXYtPmFjdGl2ZV9tbTsNCiANCi0JcHJlcGFyZV90b19zd2l0
Y2goKTsNCi0NCiAJaWYgKHVubGlrZWx5KCFtbSkpIHsNCiAJCW5leHQtPmFj
dGl2ZV9tbSA9IG9sZG1tOw0KIAkJYXRvbWljX2luYygmb2xkbW0tPm1tX2Nv
dW50KTsNCkBAIC00MDIsNiArNDU4LDggQEANCiANCiAJLyogSGVyZSB3ZSBq
dXN0IHN3aXRjaCB0aGUgcmVnaXN0ZXIgc3RhdGUgYW5kIHRoZSBzdGFjay4g
Ki8NCiAJc3dpdGNoX3RvKHByZXYsIG5leHQsIHByZXYpOw0KKw0KKwlyZXR1
cm4gcHJldjsNCiB9DQogDQogdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nKHZv
aWQpDQpAQCAtNDE0LDYgKzQ3MiwxNiBAQA0KIAlyZXR1cm4gc3VtOw0KIH0N
CiANCit1bnNpZ25lZCBsb25nIG5yX3VuaW50ZXJydXB0aWJsZSh2b2lkKQ0K
K3sNCisJdW5zaWduZWQgbG9uZyBpLCBzdW0gPSAwOw0KKw0KKwlmb3IgKGkg
PSAwOyBpIDwgc21wX251bV9jcHVzOyBpKyspDQorCQlzdW0gKz0gY3B1X3Jx
KGNwdV9sb2dpY2FsX21hcChpKSktPm5yX3VuaW50ZXJydXB0aWJsZTsNCisN
CisJcmV0dXJuIHN1bTsNCit9DQorDQogdW5zaWduZWQgbG9uZyBucl9jb250
ZXh0X3N3aXRjaGVzKHZvaWQpDQogew0KIAl1bnNpZ25lZCBsb25nIGksIHN1
bSA9IDA7DQpAQCAtNTY5LDcgKzYzNyw3IEBADQogI2RlZmluZSBDQU5fTUlH
UkFURV9UQVNLKHAscnEsdGhpc19jcHUpCQkJCQlcDQogCSgoamlmZmllcyAt
IChwKS0+c2xlZXBfdGltZXN0YW1wID4gY2FjaGVfZGVjYXlfdGlja3MpICYm
CVwNCiAJCSgocCkgIT0gKHJxKS0+Y3VycikgJiYJCQkJCVwNCi0JCQkoKHAp
LT5jcHVzX2FsbG93ZWQgJiAoMSA8PCAodGhpc19jcHUpKSkpDQorCQkJKChw
KS0+Y3B1c19hbGxvd2VkICYgKDFVTCA8PCAodGhpc19jcHUpKSkpDQogDQog
CWlmICghQ0FOX01JR1JBVEVfVEFTSyh0bXAsIGJ1c2llc3QsIHRoaXNfY3B1
KSkgew0KIAkJY3VyciA9IGN1cnItPm5leHQ7DQpAQCAtNzI2LDEzICs3OTQs
MTQgQEANCiAJbGlzdF90ICpxdWV1ZTsNCiAJaW50IGlkeDsNCiANCi0JQlVH
X09OKGluX2ludGVycnVwdCgpKTsNCi0NCisJaWYgKHVubGlrZWx5KGluX2lu
dGVycnVwdCgpKSkNCisJCUJVRygpOw0KIG5lZWRfcmVzY2hlZDoNCiAJcHJl
diA9IGN1cnJlbnQ7DQogCXJxID0gdGhpc19ycSgpOw0KIA0KIAlyZWxlYXNl
X2tlcm5lbF9sb2NrKHByZXYsIHNtcF9wcm9jZXNzb3JfaWQoKSk7DQorCXBy
ZXBhcmVfYXJjaF9zY2hlZHVsZShwcmV2KTsNCiAJcHJldi0+c2xlZXBfdGlt
ZXN0YW1wID0gamlmZmllczsNCiAJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2sp
Ow0KIA0KQEAgLTc4MywyNiArODUyLDE5IEBADQogCWlmIChsaWtlbHkocHJl
diAhPSBuZXh0KSkgew0KIAkJcnEtPm5yX3N3aXRjaGVzKys7DQogCQlycS0+
Y3VyciA9IG5leHQ7DQotCQlzcGluX2xvY2soJnJxLT5mcm96ZW4pOw0KLQkJ
c3Bpbl91bmxvY2soJnJxLT5sb2NrKTsNCi0JCQ0KLQkJY29udGV4dF9zd2l0
Y2gocHJldiwgbmV4dCk7DQotCQkvKg0KLQkJICogVGhlIHJ1bnF1ZXVlIHBv
aW50ZXIgbWlnaHQgYmUgZnJvbSBhbm90aGVyIENQVQ0KLQkJICogaWYgdGhl
IG5ldyB0YXNrIHdhcyBsYXN0IHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQNCi0J
CSAqIENQVSAtIHRodXMgcmUtbG9hZCBpdC4NCi0JCSAqLw0KLQkJbWIoKTsN
CisJDQorCQlwcmVwYXJlX2FyY2hfc3dpdGNoKHJxKTsNCisJCXByZXYgPSBj
b250ZXh0X3N3aXRjaChwcmV2LCBuZXh0KTsNCisJCWJhcnJpZXIoKTsNCiAJ
CXJxID0gdGhpc19ycSgpOw0KLQkJc3Bpbl91bmxvY2tfaXJxKCZycS0+ZnJv
emVuKTsNCi0JfSBlbHNlIHsNCisJCWZpbmlzaF9hcmNoX3N3aXRjaChycSk7
DQorCX0gZWxzZQ0KIAkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7DQot
CX0NCisJZmluaXNoX2FyY2hfc2NoZWR1bGUocHJldik7DQogDQogCXJlYWNx
dWlyZV9rZXJuZWxfbG9jayhjdXJyZW50KTsNCiAJaWYgKG5lZWRfcmVzY2hl
ZCgpKQ0KIAkJZ290byBuZWVkX3Jlc2NoZWQ7DQotCXJldHVybjsNCiB9DQog
DQogLyoNCkBAIC04MTQsOCArODc2LDcgQEANCiAgKiBzdGFydGVkIHRvIHJ1
biBidXQgaXMgbm90IGluIHN0YXRlIFRBU0tfUlVOTklORy4gIHRyeV90b193
YWtlX3VwKCkgcmV0dXJucw0KICAqIHplcm8gaW4gdGhpcyAocmFyZSkgY2Fz
ZSwgYW5kIHdlIGhhbmRsZSBpdCBieSBjb250aW51aW5nIHRvIHNjYW4gdGhl
IHF1ZXVlLg0KICAqLw0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3dha2VfdXBf
Y29tbW9uKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9k
ZSwNCi0JCQkJICAgIGludCBucl9leGNsdXNpdmUpDQorc3RhdGljIGlubGlu
ZSB2b2lkIF9fd2FrZV91cF9jb21tb24od2FpdF9xdWV1ZV9oZWFkX3QgKnEs
IHVuc2lnbmVkIGludCBtb2RlLCBpbnQgbnJfZXhjbHVzaXZlLCBpbnQgc3lu
YykNCiB7DQogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsNCiAJdW5zaWduZWQg
aW50IHN0YXRlOw0KQEAgLTgyNiw3ICs4ODcsNyBAQA0KIAkJY3VyciA9IGxp
c3RfZW50cnkodG1wLCB3YWl0X3F1ZXVlX3QsIHRhc2tfbGlzdCk7DQogCQlw
ID0gY3Vyci0+dGFzazsNCiAJCXN0YXRlID0gcC0+c3RhdGU7DQotCQlpZiAo
KHN0YXRlICYgbW9kZSkgJiYgdHJ5X3RvX3dha2VfdXAocCkgJiYNCisJCWlm
ICgoc3RhdGUgJiBtb2RlKSAmJiB0cnlfdG9fd2FrZV91cChwLCBzeW5jKSAm
Jg0KIAkJCSgoY3Vyci0+ZmxhZ3MgJiBXUV9GTEFHX0VYQ0xVU0lWRSkgJiYg
IS0tbnJfZXhjbHVzaXZlKSkNCiAJCQkJYnJlYWs7DQogCX0NCkBAIC04Mzks
MjQgKzkwMCw0MyBAQA0KIAlpZiAodW5saWtlbHkoIXEpKQ0KIAkJcmV0dXJu
Ow0KIA0KLQl3cV9yZWFkX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3Mp
Ow0KLQlfX3dha2VfdXBfY29tbW9uKHEsIG1vZGUsIG5yX2V4Y2x1c2l2ZSk7
DQotCXdxX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdz
KTsNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsNCisJ
X193YWtlX3VwX2NvbW1vbihxLCBtb2RlLCBucl9leGNsdXNpdmUsIDApOw0K
KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7DQog
fQ0KIA0KKyNpZiBDT05GSUdfU01QDQorDQordm9pZCBfX3dha2VfdXBfc3lu
Yyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGlu
dCBucl9leGNsdXNpdmUpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0K
Kw0KKwlpZiAodW5saWtlbHkoIXEpKQ0KKwkJcmV0dXJuOw0KKw0KKwlzcGlu
X2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOw0KKwlpZiAobGlrZWx5
KG5yX2V4Y2x1c2l2ZSkpDQorCQlfX3dha2VfdXBfY29tbW9uKHEsIG1vZGUs
IG5yX2V4Y2x1c2l2ZSwgMSk7DQorCWVsc2UNCisJCV9fd2FrZV91cF9jb21t
b24ocSwgbW9kZSwgbnJfZXhjbHVzaXZlLCAwKTsNCisJc3Bpbl91bmxvY2tf
aXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOw0KK30NCisNCisjZW5kaWYN
CisgDQogdm9pZCBjb21wbGV0ZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkNCiB7
DQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQotCXdxX3dyaXRlX2xvY2tf
aXJxc2F2ZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7DQorCXNwaW5fbG9ja19p
cnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsNCiAJeC0+ZG9uZSsrOw0K
LQlfX3dha2VfdXBfY29tbW9uKCZ4LT53YWl0LCBUQVNLX1VOSU5URVJSVVBU
SUJMRSB8IFRBU0tfSU5URVJSVVBUSUJMRSwgMSk7DQotCXdxX3dyaXRlX3Vu
bG9ja19pcnFyZXN0b3JlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsNCisJX193
YWtlX3VwX2NvbW1vbigmeC0+d2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUg
fCBUQVNLX0lOVEVSUlVQVElCTEUsIDEsIDApOw0KKwlzcGluX3VubG9ja19p
cnFyZXN0b3JlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsNCiB9DQogDQogdm9p
ZCB3YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQ0K
IHsNCi0Jd3Ffd3JpdGVfbG9ja19pcnEoJngtPndhaXQubG9jayk7DQorCXNw
aW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7DQogCWlmICgheC0+ZG9uZSkg
ew0KIAkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7DQogDQpA
QCAtODY0LDE0ICs5NDQsMTQgQEANCiAJCV9fYWRkX3dhaXRfcXVldWVfdGFp
bCgmeC0+d2FpdCwgJndhaXQpOw0KIAkJZG8gew0KIAkJCV9fc2V0X2N1cnJl
bnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOw0KLQkJCXdxX3dyaXRl
X3VubG9ja19pcnEoJngtPndhaXQubG9jayk7DQorCQkJc3Bpbl91bmxvY2tf
aXJxKCZ4LT53YWl0LmxvY2spOw0KIAkJCXNjaGVkdWxlKCk7DQotCQkJd3Ff
d3JpdGVfbG9ja19pcnEoJngtPndhaXQubG9jayk7DQorCQkJc3Bpbl9sb2Nr
X2lycSgmeC0+d2FpdC5sb2NrKTsNCiAJCX0gd2hpbGUgKCF4LT5kb25lKTsN
CiAJCV9fcmVtb3ZlX3dhaXRfcXVldWUoJngtPndhaXQsICZ3YWl0KTsNCiAJ
fQ0KIAl4LT5kb25lLS07DQotCXdxX3dyaXRlX3VubG9ja19pcnEoJngtPndh
aXQubG9jayk7DQorCXNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsN
CiB9DQogDQogI2RlZmluZQlTTEVFUF9PTl9WQVIJCQkJXA0KQEAgLTg4MCwx
NCArOTYwLDE0IEBADQogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBj
dXJyZW50KTsNCiANCiAjZGVmaW5lCVNMRUVQX09OX0hFQUQJCQkJCVwNCi0J
d3Ffd3JpdGVfbG9ja19pcnFzYXZlKCZxLT5sb2NrLGZsYWdzKTsJCVwNCisJ
c3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssZmxhZ3MpOwkJXA0KIAlfX2Fk
ZF93YWl0X3F1ZXVlKHEsICZ3YWl0KTsJCQlcDQotCXdxX3dyaXRlX3VubG9j
aygmcS0+bG9jayk7DQorCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsNCiANCiAj
ZGVmaW5lCVNMRUVQX09OX1RBSUwJCQkJCQlcDQotCXdxX3dyaXRlX2xvY2tf
aXJxKCZxLT5sb2NrKTsJCQkJXA0KKwlzcGluX2xvY2tfaXJxKCZxLT5sb2Nr
KTsJCQkJXA0KIAlfX3JlbW92ZV93YWl0X3F1ZXVlKHEsICZ3YWl0KTsJCQkJ
XA0KLQl3cV93cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jayxmbGFn
cyk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdz
KTsNCiANCiB2b2lkIGludGVycnVwdGlibGVfc2xlZXBfb24od2FpdF9xdWV1
ZV9oZWFkX3QgKnEpDQogew0KQEAgLTEwMjcsNiArMTEwNywxMSBAQA0KIAly
ZXR1cm4gVEFTS19OSUNFKHApOw0KIH0NCiANCitpbnQgaWRsZV9jcHUoaW50
IGNwdSkNCit7DQorCXJldHVybiBjcHVfY3VycihjcHUpID09IGNwdV9ycShj
cHUpLT5pZGxlOw0KK30NCisNCiBzdGF0aWMgaW5saW5lIHRhc2tfdCAqZmlu
ZF9wcm9jZXNzX2J5X3BpZChwaWRfdCBwaWQpDQogew0KIAlyZXR1cm4gcGlk
ID8gZmluZF90YXNrX2J5X3BpZChwaWQpIDogY3VycmVudDsNCkBAIC0xMDc3
LDcgKzExNjIsNyBAQA0KIA0KIAkvKg0KIAkgKiBWYWxpZCBwcmlvcml0aWVz
IGZvciBTQ0hFRF9GSUZPIGFuZCBTQ0hFRF9SUiBhcmUNCi0JICogMS4uTUFY
X1VTRVJfUlRfUFJJTy0xLCB2YWxpZCBwcmlvcml0eSBmb3IgU0NIRURfT1RI
RVIgaXMgMC4NCisJICogMS4uTUFYX1VTRVJfUlRfUFJJTywgdmFsaWQgcHJp
b3JpdHkgZm9yIFNDSEVEX09USEVSIGlzIDAuDQogCSAqLw0KIAlyZXR2YWwg
PSAtRUlOVkFMOw0KIAlpZiAobHAuc2NoZWRfcHJpb3JpdHkgPCAwIHx8IGxw
LnNjaGVkX3ByaW9yaXR5ID4gTUFYX1VTRVJfUlRfUFJJTy0xKQ0KQEAgLTEx
NzcsMjggKzEyNjIsMTI3IEBADQogCXJldHVybiByZXR2YWw7DQogfQ0KIA0K
LWFzbWxpbmthZ2UgbG9uZyBzeXNfc2NoZWRfeWllbGQodm9pZCkNCisvKioN
CisgKiBzeXNfc2NoZWRfc2V0YWZmaW5pdHkgLSBzZXQgdGhlIGNwdSBhZmZp
bml0eSBvZiBhIHByb2Nlc3MNCisgKiBAcGlkOiBwaWQgb2YgdGhlIHByb2Nl
c3MNCisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGJpdG1hc2sg
cG9pbnRlZCB0byBieSB1c2VyX21hc2tfcHRyDQorICogQHVzZXJfbWFza19w
dHI6IHVzZXItc3BhY2UgcG9pbnRlciB0byB0aGUgbmV3IGNwdSBtYXNrDQor
ICovDQorYXNtbGlua2FnZSBpbnQgc3lzX3NjaGVkX3NldGFmZmluaXR5KHBp
ZF90IHBpZCwgdW5zaWduZWQgaW50IGxlbiwNCisJCQkJICAgICAgdW5zaWdu
ZWQgbG9uZyAqdXNlcl9tYXNrX3B0cikNCiB7DQotCXJ1bnF1ZXVlX3QgKnJx
Ow0KLQlwcmlvX2FycmF5X3QgKmFycmF5Ow0KKwl1bnNpZ25lZCBsb25nIG5l
d19tYXNrOw0KKwl0YXNrX3QgKnA7DQorCWludCByZXR2YWw7DQogDQotCXJx
ID0gdGhpc19ycSgpOw0KKwlpZiAobGVuIDwgc2l6ZW9mKG5ld19tYXNrKSkN
CisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAoY29weV9mcm9tX3VzZXIo
Jm5ld19tYXNrLCB1c2VyX21hc2tfcHRyLCBzaXplb2YobmV3X21hc2spKSkN
CisJCXJldHVybiAtRUZBVUxUOw0KKw0KKwluZXdfbWFzayAmPSBjcHVfb25s
aW5lX21hcDsNCisJaWYgKCFuZXdfbWFzaykNCisJCXJldHVybiAtRUlOVkFM
Ow0KKw0KKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOw0KKw0KKwlwID0g
ZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOw0KKwlpZiAoIXApIHsNCisJCXJl
YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCisJCXJldHVybiAtRVNSQ0g7
DQorCX0NCiANCiAJLyoNCi0JICogRGVjcmVhc2UgdGhlIHlpZWxkaW5nIHRh
c2sncyBwcmlvcml0eSBieSBvbmUsIHRvIGF2b2lkDQotCSAqIGxpdmVsb2Nr
cy4gVGhpcyBwcmlvcml0eSBsb3NzIGlzIHRlbXBvcmFyeSwgaXQncyByZWNv
dmVyZWQNCi0JICogb25jZSB0aGUgY3VycmVudCB0aW1lc2xpY2UgZXhwaXJl
cy4NCi0JICoNCi0JICogSWYgcHJpb3JpdHkgaXMgYWxyZWFkeSBNQVhfUFJJ
Ty0xIHRoZW4gd2Ugc3RpbGwNCi0JICogcm91bmRyb2JpbiB0aGUgdGFzayB3
aXRoaW4gdGhlIHJ1bmxpc3QuDQorCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGNh
bGwgc2V0X2NwdXNfYWxsb3dlZCB3aXRoIHRoZQ0KKwkgKiB0YXNrbGlzdF9s
b2NrIGhlbGQuICBXZSB3aWxsIGJ1bXAgdGhlIHRhc2tfc3RydWN0J3MNCisJ
ICogdXNhZ2UgY291bnQgYW5kIHRoZW4gZHJvcCB0YXNrbGlzdF9sb2NrLg0K
IAkgKi8NCi0Jc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOw0KLQlhcnJheSA9
IGN1cnJlbnQtPmFycmF5Ow0KKwlnZXRfdGFza19zdHJ1Y3QocCk7DQorCXJl
YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCisNCisJcmV0dmFsID0gLUVQ
RVJNOw0KKwlpZiAoKGN1cnJlbnQtPmV1aWQgIT0gcC0+ZXVpZCkgJiYgKGN1
cnJlbnQtPmV1aWQgIT0gcC0+dWlkKSAmJg0KKwkJCSFjYXBhYmxlKENBUF9T
WVNfTklDRSkpDQorCQlnb3RvIG91dF91bmxvY2s7DQorDQorCXJldHZhbCA9
IDA7DQorCXNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOw0KKw0KK291
dF91bmxvY2s6DQorCWZyZWVfdGFza19zdHJ1Y3QocCk7DQorCXJldHVybiBy
ZXR2YWw7DQorfQ0KKw0KKy8qKg0KKyAqIHN5c19zY2hlZF9nZXRhZmZpbml0
eSAtIGdldCB0aGUgY3B1IGFmZmluaXR5IG9mIGEgcHJvY2Vzcw0KKyAqIEBw
aWQ6IHBpZCBvZiB0aGUgcHJvY2Vzcw0KKyAqIEBsZW46IGxlbmd0aCBpbiBi
eXRlcyBvZiB0aGUgYml0bWFzayBwb2ludGVkIHRvIGJ5IHVzZXJfbWFza19w
dHINCisgKiBAdXNlcl9tYXNrX3B0cjogdXNlci1zcGFjZSBwb2ludGVyIHRv
IGhvbGQgdGhlIGN1cnJlbnQgY3B1IG1hc2sNCisgKi8NCithc21saW5rYWdl
IGludCBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCB1bnNpZ25l
ZCBpbnQgbGVuLA0KKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICp1c2VyX21h
c2tfcHRyKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBtYXNrOw0KKwl1bnNpZ25l
ZCBpbnQgcmVhbF9sZW47DQorCXRhc2tfdCAqcDsNCisJaW50IHJldHZhbDsN
CisNCisJcmVhbF9sZW4gPSBzaXplb2YobWFzayk7DQorDQorCWlmIChsZW4g
PCByZWFsX2xlbikNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlyZWFkX2xv
Y2soJnRhc2tsaXN0X2xvY2spOw0KKw0KKwlyZXR2YWwgPSAtRVNSQ0g7DQor
CXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7DQorCWlmICghcCkNCisJ
CWdvdG8gb3V0X3VubG9jazsNCisNCisJcmV0dmFsID0gMDsNCisJbWFzayA9
IHAtPmNwdXNfYWxsb3dlZCAmIGNwdV9vbmxpbmVfbWFwOw0KKw0KK291dF91
bmxvY2s6DQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCisJaWYg
KHJldHZhbCkNCisJCXJldHVybiByZXR2YWw7DQorCWlmIChjb3B5X3RvX3Vz
ZXIodXNlcl9tYXNrX3B0ciwgJm1hc2ssIHJlYWxfbGVuKSkNCisJCXJldHVy
biAtRUZBVUxUOw0KKwlyZXR1cm4gcmVhbF9sZW47DQorfQ0KKw0KK2FzbWxp
bmthZ2UgbG9uZyBzeXNfc2NoZWRfeWllbGQodm9pZCkNCit7DQorCXJ1bnF1
ZXVlX3QgKnJxID0gcnFfbG9jayhycSk7DQorCXByaW9fYXJyYXlfdCAqYXJy
YXkgPSBjdXJyZW50LT5hcnJheTsNCisNCiAJLyoNCi0JICogSWYgdGhlIHRh
c2sgaGFzIHJlYWNoZWQgbWF4aW11bSBwcmlvcml0eSAob3IgaXMgYSBSVCB0
YXNrKQ0KLQkgKiB0aGVuIGp1c3QgcmVxdWV1ZSB0aGUgdGFzayB0byB0aGUg
ZW5kIG9mIHRoZSBydW5xdWV1ZToNCisJICogVGhlcmUgYXJlIHRocmVlIGxl
dmVscyBvZiBob3cgYSB5aWVsZGluZyB0YXNrIHdpbGwgZ2l2ZSB1cA0KKwkg
KiB0aGUgY3VycmVudCBDUFU6DQorCSAqDQorCSAqICAjMSAtIGl0IGRlY3Jl
YXNlcyBpdHMgcHJpb3JpdHkgYnkgb25lLiBUaGlzIHByaW9yaXR5IGxvc3Mg
aXMNCisJICogICAgICAgdGVtcG9yYXJ5LCBpdCdzIHJlY292ZXJlZCBvbmNl
IHRoZSBjdXJyZW50IHRpbWVzbGljZQ0KKwkgKiAgICAgICBleHBpcmVzLg0K
KwkgKg0KKwkgKiAgIzIgLSBvbmNlIGl0IGhhcyByZWFjaGVkIHRoZSBsb3dl
c3QgcHJpb3JpdHkgbGV2ZWwsDQorCSAqICAgICAgIGl0IHdpbGwgZ2l2ZSB1
cCB0aW1lc2xpY2VzIG9uZSBieSBvbmUuIChXZSBkbyBub3QNCisJICogICAg
ICAgd2FudCB0byBnaXZlIHRoZW0gdXAgYWxsIGF0IG9uY2UsIGl0J3MgZ3Jh
ZHVhbCwNCisJICogICAgICAgdG8gcHJvdGVjdCB0aGUgY2FzdWFsIHlpZWxk
KCllci4pDQorCSAqDQorCSAqICAjMyAtIG9uY2UgYWxsIHRpbWVzbGljZXMg
YXJlIGdvbmUgd2UgcHV0IHRoZSBwcm9jZXNzIGludG8NCisJICogICAgICAg
dGhlIGV4cGlyZWQgYXJyYXkuDQorCSAqDQorCSAqICAoc3BlY2lhbCBydWxl
OiBSVCB0YXNrcyBkbyBub3QgbG9zZSBhbnkgcHJpb3JpdHksIHRoZXkganVz
dA0KKwkgKiAgcm91bmRyb2JpbiBvbiB0aGVpciBjdXJyZW50IHByaW9yaXR5
IGxldmVsLikNCiAJICovDQotCWlmIChsaWtlbHkoY3VycmVudC0+cHJpbyA9
PSBNQVhfUFJJTy0xIHx8IHJ0X3Rhc2soY3VycmVudCkpKSB7DQorCWlmIChs
aWtlbHkoY3VycmVudC0+cHJpbyA9PSBNQVhfUFJJTy0xKSkgew0KKwkJaWYg
KGN1cnJlbnQtPnRpbWVfc2xpY2UgPD0gMSkgew0KKwkJCWRlcXVldWVfdGFz
ayhjdXJyZW50LCBycS0+YWN0aXZlKTsNCisJCQllbnF1ZXVlX3Rhc2soY3Vy
cmVudCwgcnEtPmV4cGlyZWQpOw0KKwkJfSBlbHNlDQorCQkJY3VycmVudC0+
dGltZV9zbGljZS0tOw0KKwl9IGVsc2UgaWYgKHVubGlrZWx5KHJ0X3Rhc2so
Y3VycmVudCkpKSB7DQogCQlsaXN0X2RlbCgmY3VycmVudC0+cnVuX2xpc3Qp
Ow0KIAkJbGlzdF9hZGRfdGFpbCgmY3VycmVudC0+cnVuX2xpc3QsIGFycmF5
LT5xdWV1ZSArIGN1cnJlbnQtPnByaW8pOw0KIAl9IGVsc2Ugew0KQEAgLTEz
OTYsNyArMTU4MCw3IEBADQogCQlzcGluX3VubG9jaygmcnEyLT5sb2NrKTsN
CiB9DQogDQotdm9pZCBpbml0X2lkbGUodGFza190ICppZGxlLCBpbnQgY3B1
KQ0KK3ZvaWQgX19pbml0IGluaXRfaWRsZSh0YXNrX3QgKmlkbGUsIGludCBj
cHUpDQogew0KIAlydW5xdWV1ZV90ICppZGxlX3JxID0gY3B1X3JxKGNwdSks
ICpycSA9IGNwdV9ycShpZGxlLT5jcHUpOw0KIAl1bnNpZ25lZCBsb25nIGZs
YWdzOw0KQEAgLTE0MjcsMTMgKzE2MTEsMTIgQEANCiAJaW50IGksIGosIGs7
DQogDQogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsNCi0JCXJ1
bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGkpOw0KIAkJcHJpb19hcnJheV90ICph
cnJheTsNCiANCisJCXJxID0gY3B1X3JxKGkpOw0KIAkJcnEtPmFjdGl2ZSA9
IHJxLT5hcnJheXM7DQogCQlycS0+ZXhwaXJlZCA9IHJxLT5hcnJheXMgKyAx
Ow0KIAkJc3Bpbl9sb2NrX2luaXQoJnJxLT5sb2NrKTsNCi0JCXNwaW5fbG9j
a19pbml0KCZycS0+ZnJvemVuKTsNCiAJCUlOSVRfTElTVF9IRUFEKCZycS0+
bWlncmF0aW9uX3F1ZXVlKTsNCiANCiAJCWZvciAoaiA9IDA7IGogPCAyOyBq
KyspIHsNCkBAIC0xNDk3LDggKzE2ODAsOCBAQA0KICAqIGlzIHJlbW92ZWQg
ZnJvbSB0aGUgYWxsb3dlZCBiaXRtYXNrLg0KICAqDQogICogTk9URTogdGhl
IGNhbGxlciBtdXN0IGhhdmUgYSB2YWxpZCByZWZlcmVuY2UgdG8gdGhlIHRh
c2ssIHRoZQ0KLSAqIHRhc2sgbXVzdCBub3QgZXhpdCgpICYgZGVhbGxvY2F0
ZSBpdHNlbGYgcHJlbWF0dXJlbHkuICBObw0KLSAqIHNwaW5sb2NrcyBjYW4g
YmUgaGVsZC4NCisgKiB0YXNrIG11c3Qgbm90IGV4aXQoKSAmIGRlYWxsb2Nh
dGUgaXRzZWxmIHByZW1hdHVyZWx5LiAgVGhlDQorICogY2FsbCBpcyBub3Qg
YXRvbWljOyBubyBzcGlubG9ja3MgbWF5IGJlIGhlbGQuDQogICovDQogdm9p
ZCBzZXRfY3B1c19hbGxvd2VkKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBu
ZXdfbWFzaykNCiB7DQpAQCAtMTUxOCwxOSArMTcwMSwxNyBAQA0KIAkgKi8N
CiAJaWYgKG5ld19tYXNrICYgKDFVTCA8PCBwLT5jcHUpKSB7DQogCQl0YXNr
X3JxX3VubG9jayhycSwgJmZsYWdzKTsNCi0JCXJldHVybjsNCisJCWdvdG8g
b3V0Ow0KIAl9DQotDQogCS8qDQotCSAqIElmIHRoZSB0YXNrIGlzIG5vdCBv
biBhIHJ1bnF1ZXVlLCB0aGVuIGl0IGlzIHNhZmUgdG8NCi0JICogc2ltcGx5
IHVwZGF0ZSB0aGUgdGFzaydzIGNwdSBmaWVsZC4NCisJICogSWYgdGhlIHRh
c2sgaXMgbm90IG9uIGEgcnVucXVldWUgKGFuZCBub3QgcnVubmluZyksIHRo
ZW4NCisJICogaXQgaXMgc3VmZmljaWVudCB0byBzaW1wbHkgdXBkYXRlIHRo
ZSB0YXNrJ3MgY3B1IGZpZWxkLg0KIAkgKi8NCi0JaWYgKCFwLT5hcnJheSkg
ew0KKwlpZiAoIXAtPmFycmF5ICYmIChwICE9IHJxLT5jdXJyKSkgew0KIAkJ
cC0+Y3B1ID0gX19mZnMocC0+Y3B1c19hbGxvd2VkKTsNCiAJCXRhc2tfcnFf
dW5sb2NrKHJxLCAmZmxhZ3MpOw0KLQkJcmV0dXJuOw0KKwkJZ290byBvdXQ7
DQogCX0NCi0NCiAJaW5pdF9NVVRFWF9MT0NLRUQoJnJlcS5zZW0pOw0KIAly
ZXEudGFzayA9IHA7DQogCWxpc3RfYWRkKCZyZXEubGlzdCwgJnJxLT5taWdy
YXRpb25fcXVldWUpOw0KQEAgLTE1MzgsNiArMTcxOSw3IEBADQogCXdha2Vf
dXBfcHJvY2VzcyhycS0+bWlncmF0aW9uX3RocmVhZCk7DQogDQogCWRvd24o
JnJlcS5zZW0pOw0KK291dDoNCiB9DQogDQogc3RhdGljIGludCBtaWdyYXRp
b25fdGhyZWFkKHZvaWQgKiBiaW5kX2NwdSkNCkBAIC0xNTUwLDE3ICsxNzMy
LDE2IEBADQogCWRhZW1vbml6ZSgpOw0KIAlzaWdmaWxsc2V0KCZjdXJyZW50
LT5ibG9ja2VkKTsNCiAJc2V0X2ZzKEtFUk5FTF9EUyk7DQotDQogCS8qDQot
CSAqIFRoZSBmaXJzdCBtaWdyYXRpb24gdGhyZWFkIGlzIHN0YXJ0ZWQgb24g
Q1BVICMwLiBUaGlzIG9uZSBjYW4NCi0JICogbWlncmF0ZSB0aGUgb3RoZXIg
bWlncmF0aW9uIHRocmVhZHMgdG8gdGhlaXIgZGVzdGluYXRpb24gQ1BVcy4N
CisJICogVGhlIGZpcnN0IG1pZ3JhdGlvbiB0aHJlYWQgaXMgc3RhcnRlZCBv
biBDUFUgIzAuIFRoaXMgb25lIGNhbiBtaWdyYXRlDQorCSAqIHRoZSBvdGhl
ciBtaWdyYXRpb24gdGhyZWFkcyB0byB0aGVpciBkZXN0aW5hdGlvbiBDUFVz
Lg0KIAkgKi8NCiAJaWYgKGNwdSAhPSAwKSB7DQogCQl3aGlsZSAoIWNwdV9y
cShjcHVfbG9naWNhbF9tYXAoMCkpLT5taWdyYXRpb25fdGhyZWFkKQ0KIAkJ
CXlpZWxkKCk7DQogCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIDFVTCA8
PCBjcHUpOw0KIAl9DQotCXByaW50aygibWlncmF0aW9uX3Rhc2sgJWQgb24g
Y3B1PSVkXG4iLCBjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7DQorCXByaW50
aygibWlncmF0aW9uX3Rhc2sgJWQgb24gY3B1PSVkXG4iLGNwdSxzbXBfcHJv
Y2Vzc29yX2lkKCkpOw0KIAlyZXQgPSBzZXRzY2hlZHVsZXIoMCwgU0NIRURf
RklGTywgJnBhcmFtKTsNCiANCiAJcnEgPSB0aGlzX3JxKCk7DQpAQCAtMTYz
Miw1ICsxODEzLDQgQEANCiAJCXdoaWxlICghY3B1X3JxKGNwdV9sb2dpY2Fs
X21hcChjcHUpKS0+bWlncmF0aW9uX3RocmVhZCkNCiAJCQlzY2hlZHVsZV90
aW1lb3V0KDIpOw0KIH0NCi0NCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLw0K
KyNlbmRpZg0KLS0tIGxpbnV4L2tlcm5lbC90aW1lci5jLm9yaWcJU3VuIEp1
biAxNiAxNzo0MzozOCAyMDAyDQorKysgbGludXgva2VybmVsL3RpbWVyLmMJ
U3VuIEp1biAxNiAxNzo0Mzo1MCAyMDAyDQpAQCAtNjA4LDE3ICs2MDgsNyBA
QA0KICAqLw0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2FjdGl2ZV90
YXNrcyh2b2lkKQ0KIHsNCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOw0KLQl1
bnNpZ25lZCBsb25nIG5yID0gMDsNCi0NCi0JcmVhZF9sb2NrKCZ0YXNrbGlz
dF9sb2NrKTsNCi0JZm9yX2VhY2hfdGFzayhwKSB7DQotCQlpZiAoKHAtPnN0
YXRlID09IFRBU0tfUlVOTklORyB8fA0KLQkJICAgICAocC0+c3RhdGUgJiBU
QVNLX1VOSU5URVJSVVBUSUJMRSkpKQ0KLQkJCW5yICs9IEZJWEVEXzE7DQot
CX0NCi0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOw0KLQlyZXR1cm4g
bnI7DQorICAgICAgICByZXR1cm4gKG5yX3J1bm5pbmcoKSArIG5yX3VuaW50
ZXJydXB0aWJsZSgpKSAqIEZJWEVEXzE7DQogfQ0KIA0KIC8qDQotLS0gbGlu
dXgvaW5jbHVkZS9saW51eC9zY2hlZC5oLm9yaWcJU3VuIEp1biAxNiAxNzo0
NDoxMyAyMDAyDQorKysgbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oCVN1
biBKdW4gMTYgMTg6NTQ6MDEgMjAwMg0KQEAgLTc2LDYgKzc2LDcgQEANCiBl
eHRlcm4gaW50IG5yX3RocmVhZHM7DQogZXh0ZXJuIGludCBsYXN0X3BpZDsN
CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nKHZvaWQpOw0KK2V4
dGVybiB1bnNpZ25lZCBsb25nIG5yX3VuaW50ZXJydXB0aWJsZSh2b2lkKTsN
CiANCiAjaW5jbHVkZSA8bGludXgvZnMuaD4NCiAjaW5jbHVkZSA8bGludXgv
dGltZS5oPg0KQEAgLTYxMCw2ICs2MTEsNyBAQA0KICNkZWZpbmUgQ1VSUkVO
VF9USU1FICh4dGltZS50dl9zZWMpDQogDQogZXh0ZXJuIHZvaWQgRkFTVENB
TEwoX193YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBp
bnQgbW9kZSwgaW50IG5yKSk7DQorZXh0ZXJuIHZvaWQgRkFTVENBTEwoX193
YWtlX3VwX3N5bmMod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGlu
dCBtb2RlLCBpbnQgbnIpKTsNCiBleHRlcm4gdm9pZCBGQVNUQ0FMTChzbGVl
cF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkpOw0KIGV4dGVybiBsb25nIEZB
U1RDQUxMKHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEs
DQogCQkJCSAgICAgIHNpZ25lZCBsb25nIHRpbWVvdXQpKTsNCkBAIC02MjYs
NiArNjI4LDEyIEBADQogI2RlZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGUo
eCkJX193YWtlX3VwKCh4KSxUQVNLX0lOVEVSUlVQVElCTEUsIDEpDQogI2Rl
ZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoeCwgbnIpCV9fd2FrZV91
cCgoeCksVEFTS19JTlRFUlJVUFRJQkxFLCBucikNCiAjZGVmaW5lIHdha2Vf
dXBfaW50ZXJydXB0aWJsZV9hbGwoeCkJX193YWtlX3VwKCh4KSxUQVNLX0lO
VEVSUlVQVElCTEUsIDApDQorI2lmZGVmIENPTkZJR19TTVANCisjZGVmaW5l
IHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHgpICAgX193YWtlX3VwX3N5
bmMoKHgpLFRBU0tfSU5URVJSVVBUSUJMRSwgMSkNCisjZWxzZQ0KKyNkZWZp
bmUgd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoeCkgICBfX3dha2VfdXAo
KHgpLFRBU0tfSU5URVJSVVBUSUJMRSwgMSkNCisjZW5kaWYNCisNCiBhc21s
aW5rYWdlIGxvbmcgc3lzX3dhaXQ0KHBpZF90IHBpZCx1bnNpZ25lZCBpbnQg
KiBzdGF0X2FkZHIsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICogcnUp
Ow0KIA0KIGV4dGVybiBpbnQgaW5fZ3JvdXBfcChnaWRfdCk7DQotLS0gbGlu
dXgvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaC5vcmlnCVN1biBKdW4gMTYg
MTc6NDg6NDEgMjAwMg0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvc3lz
dGVtLmgJU3VuIEp1biAxNiAxODo1Mzo0NyAyMDAyDQpAQCAtMTIsMjUgKzEy
LDIyIEBADQogc3RydWN0IHRhc2tfc3RydWN0OwkvKiBvbmUgb2YgdGhlIHN0
cmFuZ2VyIGFzcGVjdHMgb2YgQyBmb3J3YXJkIGRlY2xhcmF0aW9ucy4uICov
DQogZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19zd2l0Y2hfdG8oc3RydWN0IHRh
c2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpKTsN
CiANCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoKCkJZG8geyB9IHdoaWxl
KDApDQogI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJ
CQkJCVwNCiAJYXNtIHZvbGF0aWxlKCJwdXNobCAlJWVzaVxuXHQiCQkJCQlc
DQogCQkgICAgICJwdXNobCAlJWVkaVxuXHQiCQkJCQlcDQogCQkgICAgICJw
dXNobCAlJWVicFxuXHQiCQkJCQlcDQogCQkgICAgICJtb3ZsICUlZXNwLCUw
XG5cdCIJLyogc2F2ZSBFU1AgKi8JCVwNCi0JCSAgICAgIm1vdmwgJTMsJSVl
c3Bcblx0IgkvKiByZXN0b3JlIEVTUCAqLwlcDQorCQkgICAgICJtb3ZsICUy
LCUlZXNwXG5cdCIJLyogcmVzdG9yZSBFU1AgKi8JXA0KIAkJICAgICAibW92
bCAkMWYsJTFcblx0IgkJLyogc2F2ZSBFSVAgKi8JCVwNCi0JCSAgICAgInB1
c2hsICU0XG5cdCIJCS8qIHJlc3RvcmUgRUlQICovCVwNCisJCSAgICAgInB1
c2hsICUzXG5cdCIJCS8qIHJlc3RvcmUgRUlQICovCVwNCiAJCSAgICAgImpt
cCBfX3N3aXRjaF90b1xuIgkJCQlcDQogCQkgICAgICIxOlx0IgkJCQkJCVwN
CiAJCSAgICAgInBvcGwgJSVlYnBcblx0IgkJCQkJXA0KIAkJICAgICAicG9w
bCAlJWVkaVxuXHQiCQkJCQlcDQogCQkgICAgICJwb3BsICUlZXNpXG5cdCIJ
CQkJCVwNCi0JCSAgICAgOiI9bSIgKHByZXYtPnRocmVhZC5lc3ApLCI9bSIg
KHByZXYtPnRocmVhZC5laXApLAlcDQotCQkgICAgICAiPWIiIChsYXN0KQkJ
CQkJXA0KKwkJICAgICA6Ij1tIiAocHJldi0+dGhyZWFkLmVzcCksIj1tIiAo
cHJldi0+dGhyZWFkLmVpcCkJXA0KIAkJICAgICA6Im0iIChuZXh0LT50aHJl
YWQuZXNwKSwibSIgKG5leHQtPnRocmVhZC5laXApLAlcDQotCQkgICAgICAi
YSIgKHByZXYpLCAiZCIgKG5leHQpLAkJCQlcDQotCQkgICAgICAiYiIgKHBy
ZXYpKTsJCQkJCVwNCisJCSAgICAgICJhIiAocHJldiksICJkIiAobmV4dCkp
OwkJCQlcDQogfSB3aGlsZSAoMCkNCiANCiAjZGVmaW5lIF9zZXRfYmFzZShh
ZGRyLGJhc2UpIGRvIHsgdW5zaWduZWQgbG9uZyBfX3ByOyBcDQotLS0gbGlu
dXgvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaC5vcmlnCVN1biBKdW4g
MTYgMTg6MTk6MDMgMjAwMg0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJj
NjQvc3lzdGVtLmgJU3VuIEp1biAxNiAxODoxOTo0NCAyMDAyDQpAQCAtMTQ5
LDcgKzE0OSwxMSBAQA0KIA0KICNkZWZpbmUgZmx1c2hfdXNlcl93aW5kb3dz
IGZsdXNod191c2VyDQogI2RlZmluZSBmbHVzaF9yZWdpc3Rlcl93aW5kb3dz
IGZsdXNod19hbGwNCi0jZGVmaW5lIHByZXBhcmVfdG9fc3dpdGNoIGZsdXNo
d19hbGwNCisNCisjZGVmaW5lIHByZXBhcmVfYXJjaF9zY2hlZHVsZShwcmV2
KQkJdGFza19sb2NrKHByZXYpDQorI2RlZmluZSBmaW5pc2hfYXJjaF9zY2hl
ZHVsZShwcmV2KQkJdGFza191bmxvY2socHJldikNCisjZGVmaW5lIHByZXBh
cmVfYXJjaF9zd2l0Y2gocnEpCQkJZG8geyBzcGluX3VubG9jaygmKHJxKS0+
bG9jayk7IGZsdXNod19hbGwoKTsgfQ0KKyNkZWZpbmUgZmluaXNoX2FyY2hf
c3dpdGNoKHJxKQkJCV9fc3RpKCkNCiANCiAjaWZuZGVmIENPTkZJR19ERUJV
R19TUElOTE9DSw0KICNkZWZpbmUgQ0hFQ0tfTE9DS1MoUFJFVikJZG8geyB9
IHdoaWxlKDApDQotLS0gbGludXgvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5T
Lm9yaWcJU3VuIEp1biAxNiAxODoxNDozMyAyMDAyDQorKysgbGludXgvYXJj
aC9pMzg2L2tlcm5lbC9lbnRyeS5TCVN1biBKdW4gMTYgMTg6MTU6MDUgMjAw
Mg0KQEAgLTYzOSw4ICs2MzksOCBAQA0KICAJLmxvbmcgU1lNQk9MX05BTUUo
c3lzX3RraWxsKQ0KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2Fs
bCkJLyogcmVzZXJ2ZWQgZm9yIHNlbmRmaWxlNjQgKi8NCiAJLmxvbmcgU1lN
Qk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIDI0MCByZXNlcnZlZCBmb3Ig
ZnV0ZXggKi8NCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwp
CS8qIHJlc2VydmVkIGZvciBzY2hlZF9zZXRhZmZpbml0eSAqLw0KLQkubG9u
ZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogcmVzZXJ2ZWQgZm9y
IHNjaGVkX2dldGFmZmluaXR5ICovDQorCS5sb25nIFNZTUJPTF9OQU1FKHN5
c19zY2hlZF9zZXRhZmZpbml0eSkNCisJLmxvbmcgU1lNQk9MX05BTUUoc3lz
X3NjaGVkX2dldGFmZmluaXR5KQ0KIA0KIAkucmVwdCBOUl9zeXNjYWxscy0o
Li1zeXNfY2FsbF90YWJsZSkvNA0KIAkJLmxvbmcgU1lNQk9MX05BTUUoc3lz
X25pX3N5c2NhbGwpDQo=
--655623-1782464326-1024244390=:9633--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/