[PATCH] multithreaded coredumps for elf exeecutables for O(1) scheduler

Mark Gross (mgross@unix-os.sc.intel.com)
Fri, 10 May 2002 09:24:14 -0400


--------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8
Content-Type: text/plain;
charset="iso-8859-15"
Content-Transfer-Encoding: 8bit

Attached is my current patch for creating multithreaded core dump files,
that works with the O(1) scheduler.

This is a continuation of the work posted by Vamsi Krishna back on 3/21/02.
I'm sorry for the delay. The problem of suspending the other thread
processes for the duration of the core dump was a challenging problem with
the O(1) scheduler.

Most of the patch is the same as that posted on 3/21/02 with some minor
fixes and the rebasing to the 2.5.14 kernel. The interesting bits are in
the additions to sched.c to pause and resume the thread processes under the
O(1) scheduler.

Here I'm leveraging the work of Eric Foct for the process migration, to
temporarily migrate the thread processes I need suspended to a "phantom
runqueue". This is just an additional run queue that has no cpu. When I'm
finish with the core dump I migrate them off the phantom run queue and
continue processing whatever exit processing they do.

I tried a number of approaches to process pausing that didn't quite work
before I settled on the attached implementation.

This work has been unit test on a 2 way and 4 way SMP systems with no
lockups so far. YMMV.

Note: GDB 5.x will work with the core files created with this patch, provided
the libpthread that gets loaded at gdb debug time is stripped of symbols.

Run strip on your libpthread so files and things should work fine for you.

--mgross

(W) 503-712-8218
MS: JF1-05
2111 N.E. 25th Ave.
Hillsboro, OR 97124

--------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8
Content-Type: text/x-diff;
charset="iso-8859-15";
name="tcore-2.5.14.pat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tcore-2.5.14.pat"

ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4xNC52YW5uaWxsYS9hcmNoL2kzODYva2Vy
bmVsL2kzODcuYyBsaW51eDIuNS4xNC50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwotLS0g
bGludXgtMi41LjE0LnZhbm5pbGxhL2FyY2gvaTM4Ni9rZXJuZWwvaTM4Ny5jCVN1biBNYXkgIDUg
MjM6Mzg6MDYgMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9pMzg3
LmMJVHVlIE1heSAgNyAxNDo1OToxMCAyMDAyCkBAIC01MjgsMyArNTI4LDM2IEBACiAKIAlyZXR1
cm4gZnB2YWxpZDsKIH0KKworaW50IGR1bXBfdGFza19mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAq
dHNrLCBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2YWxpZDsKKwor
CWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aDsKKwlpZiAoIGZwdmFsaWQgKSB7CisJCWlmICh0c2sg
PT0gY3VycmVudCkgdW5sYXp5X2ZwdSggdHNrICk7CisJCWlmICggY3B1X2hhc19meHNyICkgewor
CQkJY29weV9mcHVfZnhzYXZlKCB0c2ssIGZwdSApOworCQl9IGVsc2UgeworCQkJY29weV9mcHVf
ZnNhdmUoIHRzaywgZnB1ICk7CisJCX0KKwl9CisKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworaW50
IGR1bXBfdGFza19leHRlbmRlZF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3Qg
dXNlcl9meHNyX3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2YWxpZDsKKwkKKwlmcHZhbGlkID0g
dHNrLT51c2VkX21hdGggJiYgY3B1X2hhc19meHNyOworCWlmICggZnB2YWxpZCApIHsKKwkJaWYg
KHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1KCB0c2sgKTsKKwkJbWVtY3B5KCBmcHUsICZ0c2st
PnRocmVhZC5pMzg3LmZ4c2F2ZSwKKwkJc2l6ZW9mKHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0KSAp
OworCX0KKwkKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBs
aW51eC0yLjUuMTQudmFubmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgbGludXgyLjUu
MTQudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKLS0tIGxpbnV4LTIuNS4xNC52YW5u
aWxsYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwlTdW4gTWF5ICA1IDIzOjM3OjUyIDIwMDIK
KysrIGxpbnV4Mi41LjE0LnRjb3JlL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCVdlZCBNYXkg
IDggMTM6Mzk6MTkgMjAwMgpAQCAtNjEwLDYgKzYxMCwxOCBAQAogCiAJZHVtcC0+dV9mcHZhbGlk
ID0gZHVtcF9mcHUgKHJlZ3MsICZkdW1wLT5pMzg3KTsKIH0KKy8qIAorICogQ2FwdHVyZSB0aGUg
dXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIg
c3BhY2UpCisgKi8KK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywg
c3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJKnJlZ3MgPSAqKHN0cnVjdCBwdF9yZWdzICopKCh1
bnNpZ25lZCBsb25nKXRzay0+dGhyZWFkX2luZm8gKyBUSFJFQURfU0laRSAtIHNpemVvZihzdHJ1
Y3QgcHRfcmVncykpOworCXJlZ3MtPnhjcyAmPSAweGZmZmY7CisJcmVncy0+eGRzICY9IDB4ZmZm
ZjsKKwlyZWdzLT54ZXMgJj0gMHhmZmZmOworCXJlZ3MtPnhzcyAmPSAweGZmZmY7CisJcmV0dXJu
IDE7Cit9CiAKIC8qCiAgKiBUaGlzIHNwZWNpYWwgbWFjcm8gY2FuIGJlIHVzZWQgdG8gbG9hZCBh
IGRlYnVnZ2luZyByZWdpc3RlcgpCaW5hcnkgZmlsZXMgbGludXgtMi41LjE0LnZhbm5pbGxhL2Nv
cmUgYW5kIGxpbnV4Mi41LjE0LnRjb3JlL2NvcmUgZGlmZmVyCmRpZmYgLXVyTiAtWCBkb250ZGlm
ZiBsaW51eC0yLjUuMTQudmFubmlsbGEvZnMvYmluZm10X2VsZi5jIGxpbnV4Mi41LjE0LnRjb3Jl
L2ZzL2JpbmZtdF9lbGYuYwotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2ZzL2JpbmZtdF9lbGYu
YwlTdW4gTWF5ICA1IDIzOjM4OjAxIDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2ZzL2JpbmZt
dF9lbGYuYwlXZWQgTWF5ICA4IDEyOjIyOjExIDIwMDIKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2lu
Y2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxp
bnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21t
Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUg
PGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGlu
dXgvaGlnaHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Nt
cF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9o
aWdobWVtLmg+CkBAIC05NTgsNyArOTYwLDcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2lm
ZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkdW1wX3JlZ3MoY29uc3QgY2hhciAqc3RyLCBlbGZfZ3Jl
Z190ICpyKQorc3RhdGljIHZvaWQgZHVtcF9yZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxmX2dyZWdz
ZXRfdCAqcikKIHsKIAlpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciAqcmVnc1tdID0geyAiZWJ4
IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIsICJlYnAiLApAQCAtMTAwNiw2ICsxMDA4LDE2
MyBAQAogI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCiAJaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9m
ZikpKSBcCiAJCWdvdG8gZW5kX2NvcmVkdW1wOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9l
bGZfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MpCit7CisJbWVtY3B5KGVsZi0+
ZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKTsKKwllbGYtPmVfaWRlbnRbRUlfQ0xBU1NdID0gRUxG
X0NMQVNTOworCWVsZi0+ZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOworCWVsZi0+ZV9pZGVu
dFtFSV9WRVJTSU9OXSA9IEVWX0NVUlJFTlQ7CisJbWVtc2V0KGVsZi0+ZV9pZGVudCtFSV9QQUQs
IDAsIEVJX05JREVOVC1FSV9QQUQpOworCisJZWxmLT5lX3R5cGUgPSBFVF9DT1JFOworCWVsZi0+
ZV9tYWNoaW5lID0gRUxGX0FSQ0g7CisJZWxmLT5lX3ZlcnNpb24gPSBFVl9DVVJSRU5UOworCWVs
Zi0+ZV9lbnRyeSA9IDA7CisJZWxmLT5lX3Bob2ZmID0gc2l6ZW9mKHN0cnVjdCBlbGZoZHIpOwor
CWVsZi0+ZV9zaG9mZiA9IDA7CisJZWxmLT5lX2ZsYWdzID0gMDsKKwllbGYtPmVfZWhzaXplID0g
c2l6ZW9mKHN0cnVjdCBlbGZoZHIpOworCWVsZi0+ZV9waGVudHNpemUgPSBzaXplb2Yoc3RydWN0
IGVsZl9waGRyKTsKKwllbGYtPmVfcGhudW0gPSBzZWdzOworCWVsZi0+ZV9zaGVudHNpemUgPSAw
OworCWVsZi0+ZV9zaG51bSA9IDA7CisJZWxmLT5lX3Noc3RybmR4ID0gMDsKKwlyZXR1cm47Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2VsZl9ub3RlX3BoZHIoc3RydWN0IGVsZl9waGRy
ICpwaGRyLCBpbnQgc3osIG9mZl90IG9mZnNldCkKK3sKKwlwaGRyLT5wX3R5cGUgPSBQVF9OT1RF
OworCXBoZHItPnBfb2Zmc2V0ID0gb2Zmc2V0OworCXBoZHItPnBfdmFkZHIgPSAwOworCXBoZHIt
PnBfcGFkZHIgPSAwOworCXBoZHItPnBfZmlsZXN6ID0gc3o7CisJcGhkci0+cF9tZW1zeiA9IDA7
CisJcGhkci0+cF9mbGFncyA9IDA7CisJcGhkci0+cF9hbGlnbiA9IDA7CisJcmV0dXJuOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9ub3RlKHN0cnVjdCBtZW1lbGZub3RlICpub3RlLCBj
b25zdCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgCisJCXVuc2lnbmVkIGludCBzeiwgdm9pZCAqZGF0
YSkKK3sKKwlub3RlLT5uYW1lID0gbmFtZTsKKwlub3RlLT50eXBlID0gdHlwZTsKKwlub3RlLT5k
YXRhc3ogPSBzejsKKwlub3RlLT5kYXRhID0gZGF0YTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBm
aWxsIHVwIGFsbCB0aGUgZmllbGRzIGluIHByc3RhdHVzIGZyb20gdGhlIGdpdmVuIHRhc2sgc3Ry
dWN0LCBleGNlcHQgcmVnaXN0ZXJzCisgKiB3aGljaCBuZWVkIHRvIGJlIGZpbGxlZCB1cCBzZXBl
cmF0ZWx5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9wcnN0YXR1cyhzdHJ1Y3QgZWxm
X3Byc3RhdHVzICpwcnN0YXR1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBsb25nIHNpZ25yKSAK
K3sKKwlwcnN0YXR1cy0+cHJfaW5mby5zaV9zaWdubyA9IHByc3RhdHVzLT5wcl9jdXJzaWcgPSBz
aWducjsKKwlwcnN0YXR1cy0+cHJfc2lncGVuZCA9IHAtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsK
KwlwcnN0YXR1cy0+cHJfc2lnaG9sZCA9IHAtPmJsb2NrZWQuc2lnWzBdOworCXByc3RhdHVzLT5w
cl9waWQgPSBwLT5waWQ7CisJcHJzdGF0dXMtPnByX3BwaWQgPSBwLT5wYXJlbnQtPnBpZDsKKwlw
cnN0YXR1cy0+cHJfcGdycCA9IHAtPnBncnA7CisJcHJzdGF0dXMtPnByX3NpZCA9IHAtPnNlc3Np
b247CisJcHJzdGF0dXMtPnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MocC0+dGltZXMudG1z
X3V0aW1lKTsKKwlwcnN0YXR1cy0+cHJfdXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRp
bWVzLnRtc191dGltZSk7CisJcHJzdGF0dXMtPnByX3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1Mo
cC0+dGltZXMudG1zX3N0aW1lKTsKKwlwcnN0YXR1cy0+cHJfc3RpbWUudHZfdXNlYyA9IENUX1RP
X1VTRUNTKHAtPnRpbWVzLnRtc19zdGltZSk7CisJcHJzdGF0dXMtPnByX2N1dGltZS50dl9zZWMg
PSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5wcl9jdXRpbWUu
dHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5w
cl9jc3RpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3N0aW1lKTsKKwlwcnN0
YXR1cy0+cHJfY3N0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfY3N0aW1l
KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX3BzaW5mbyhzdHJ1Y3Qg
ZWxmX3BycHNpbmZvICpwc2luZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgaTsK
KwkKKwlwc2luZm8tPnByX3BpZCA9IHAtPnBpZDsKKwlwc2luZm8tPnByX3BwaWQgPSBwLT5wYXJl
bnQtPnBpZDsKKwlwc2luZm8tPnByX3BncnAgPSBwLT5wZ3JwOworCXBzaW5mby0+cHJfc2lkID0g
cC0+c2Vzc2lvbjsKKworCWkgPSBwLT5zdGF0ZSA/IGZmeih+cC0+c3RhdGUpICsgMSA6IDA7CisJ
cHNpbmZvLT5wcl9zdGF0ZSA9IGk7CisJcHNpbmZvLT5wcl9zbmFtZSA9IChpIDwgMCB8fCBpID4g
NSkgPyAnLicgOiAiUlNEWlREIltpXTsKKwlwc2luZm8tPnByX3pvbWIgPSBwc2luZm8tPnByX3Nu
YW1lID09ICdaJzsKKwlwc2luZm8tPnByX25pY2UgPSAgdGFza19uaWNlKHApOworCXBzaW5mby0+
cHJfZmxhZyA9IHAtPmZsYWdzOworCXBzaW5mby0+cHJfdWlkID0gTkVXX1RPX09MRF9VSUQocC0+
dWlkKTsKKwlwc2luZm8tPnByX2dpZCA9IE5FV19UT19PTERfR0lEKHAtPmdpZCk7CisJc3RybmNw
eShwc2luZm8tPnByX2ZuYW1lLCBwLT5jb21tLCBzaXplb2YocHNpbmZvLT5wcl9mbmFtZSkpOwor
CXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHZhcmlhYmxlIHRoYXQgY2FuIGJlIHNl
dCBpbiBwcm9jIHRvIGRldGVybWluZSBpZiB3ZSB3YW50IHRvCisgKiBkdW1wIGEgbXVsdGl0aHJl
YWRlZCBjb3JlIG9yIG5vdC4gQSB2YWx1ZSBvZiAxIG1lYW5zIHllcyB3aGlsZSBhbnkKKyAqIG90
aGVyIHZhbHVlIG1lYW5zIG5vLgorICoKKyAqIEl0IGlzIGxvY2F0ZWQgYXQgL3Byb2Mvc3lzL2tl
cm5lbC9jb3JlX2R1bXBzX3RocmVhZHMKKyAqLworZXh0ZXJuIGludCBjb3JlX2R1bXBzX3RocmVh
ZHM7CisKKy8qIEhlcmUgaXMgdGhlIHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMgb2YgZWFjaCB0
aHJlYWQgaXMgY2FwdHVyZWQuICovCitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMKK3sKKwlzdHJ1
Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRf
UFJTVEFUVVMgKi8KKwllbGZfZnByZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCisJZWxm
X2ZweHJlZ3NldF90IHhmcHU7CQkvKiBOVF9QUlhGUFJFRyAqLworCXN0cnVjdCBtZW1lbGZub3Rl
IG5vdGVzWzNdOworCWludCBudW1fbm90ZXM7Cit9OworCisvKgorICogSW4gb3JkZXIgdG8gYWRk
IHRoZSBzcGVjaWZpYyB0aHJlYWQgaW5mb3JtYXRpb24gZm9yIHRoZSBlbGYgZmlsZSBmb3JtYXQs
CisgKiB3ZSBuZWVkIHRvIGtlZXAgYSBsaW5rZWQgbGlzdCBvZiBldmVyeSB0aHJlYWRzIHByX3N0
YXR1cyBhbmQgdGhlbgorICogY3JlYXRlIGEgc2luZ2xlIHNlY3Rpb24gZm9yIHRoZW0gaW4gdGhl
IGZpbmFsIGNvcmUgZmlsZS4KKyAqLworc3RhdGljIGludCBlbGZfZHVtcF90aHJlYWRfc3RhdHVz
KGxvbmcgc2lnbnIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBsaXN0X2hlYWQgKiB0
aHJlYWRfbGlzdCkKK3sKKworCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdDsKKwlpbnQgc3og
PSAwOworCisJdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0KSB7
CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRocmVh
ZCBzdGF0dXMuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnQtPmxp
c3QpOworCXQtPm51bV9ub3RlcyA9IDA7CisKKwlmaWxsX3Byc3RhdHVzKCZ0LT5wcnN0YXR1cywg
cCwgc2lnbnIpOworCWVsZl9jb3JlX2NvcHlfdGFza19yZWdzKHAsICZ0LT5wcnN0YXR1cy5wcl9y
ZWcpOwkKKwlmaWxsX25vdGUoJnQtPm5vdGVzWzBdLCAiQ09SRSIsIE5UX1BSU1RBVFVTLCBzaXpl
b2YodC0+cHJzdGF0dXMpLCAmKHQtPnByc3RhdHVzKSk7CisJdC0+bnVtX25vdGVzKys7CisJc3og
Kz0gbm90ZXNpemUoJnQtPm5vdGVzWzBdKTsKKworCWlmICgodC0+cHJzdGF0dXMucHJfZnB2YWxp
ZCA9IGVsZl9jb3JlX2NvcHlfdGFza19mcHJlZ3MocCwgJnQtPmZwdSkpKSB7CisJCWZpbGxfbm90
ZSgmdC0+bm90ZXNbMV0sICJDT1JFIiwgTlRfUFJGUFJFRywgc2l6ZW9mKHQtPmZwdSksICYodC0+
ZnB1KSk7CisJCXQtPm51bV9ub3RlcysrOworCQlzeiArPSBub3Rlc2l6ZSgmdC0+bm90ZXNbMV0p
OworCX0KKworCWlmIChlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhwLCAmdC0+eGZwdSkpIHsK
KwkJZmlsbF9ub3RlKCZ0LT5ub3Rlc1syXSwgIkxJTlVYIiwgTlRfUFJYRlBSRUcsIHNpemVvZih0
LT54ZnB1KSwgJih0LT54ZnB1KSk7CisJCXQtPm51bV9ub3RlcysrOworCQlzeiArPSBub3Rlc2l6
ZSgmdC0+bm90ZXNbMl0pOworCX0KKwkKKwlsaXN0X2FkZCgmdC0+bGlzdCwgdGhyZWFkX2xpc3Qp
OworCXJldHVybiBzejsKK30KKworCisKIC8qCiAgKiBBY3R1YWwgZHVtcGVyCiAgKgpAQCAtMTAy
NCwxMiArMTE4MywzMCBAQAogCXN0cnVjdCBlbGZoZHIgZWxmOwogCW9mZl90IG9mZnNldCA9IDAs
IGRhdGFvZmY7CiAJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGN1cnJlbnQtPnJsaW1bUkxJTUlUX0NP
UkVdLnJsaW1fY3VyOwotCWludCBudW1ub3RlID0gNDsKLQlzdHJ1Y3QgbWVtZWxmbm90ZSBub3Rl
c1s0XTsKKwlpbnQgbnVtbm90ZSA9IDU7CisJc3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbNV07CiAJ
c3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRfUFJTVEFUVVMgKi8KLQllbGZfZnBy
ZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCiAJc3RydWN0IGVsZl9wcnBzaW5mbyBwc2lu
Zm87CS8qIE5UX1BSUFNJTkZPICovCisgCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKyAJTElTVF9I
RUFEKHRocmVhZF9saXN0KTsKKyAJc3RydWN0IGxpc3RfaGVhZCAqdDsKKwllbGZfZnByZWdzZXRf
dCBmcHU7CisJZWxmX2ZweHJlZ3NldF90IHhmcHU7CisJaW50IGR1bXBfdGhyZWFkcyA9IGNvcmVf
ZHVtcHNfdGhyZWFkczsgLyogdGhpcyB2YWx1ZSBzaG91bGQgbm90IGNoYW5nZSBvbmNlIHRoZSAq
LworCQkJCQkvKiBkdW1waW5nIHN0YXJ0cyAqLworCWludCB0aHJlYWRfc3RhdHVzX3NpemUgPSAw
OworCQogCisJLyogRmlyc3QgcGF1c2UgYWxsIHJlbGF0ZWQgdGhyZWFkZWQgcHJvY2Vzc2VzICov
CisJaWYgKGR1bXBfdGhyZWFkcykJeworCQlzdXNwZW5kX3RocmVhZHMoKTsKKwl9CisJCisJLyog
bm93IHN0b3AgYWxsIHZtIG9wZXJhdGlvbnMgKi8KKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+
bW1hcF9zZW0pOworCXNlZ3MgPSBjdXJyZW50LT5tbS0+bWFwX2NvdW50OworCisJCiAJLyogZmly
c3QgY29weSB0aGUgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgKi8KIAltZW1zZXQoJnBzaW5m
bywgMCwgc2l6ZW9mKHBzaW5mbykpOwogCXsKQEAgLTEwNjMsMzUgKzEyNDAsMzIgQEAKIAllbHNl
CiAJCSooc3RydWN0IHB0X3JlZ3MgKikmcHJzdGF0dXMucHJfcmVnID0gKnJlZ3M7CiAjZW5kaWYK
KyAKKwlpZiAoZHVtcF90aHJlYWRzKSB7CisJCS8qIGNhcHR1cmUgdGhlIHN0YXR1cyBvZiBhbGwg
b3RoZXIgdGhyZWFkcyAqLworCQlpZiAoc2lnbnIpIHsKKwkJCXJlYWRfbG9jaygmdGFza2xpc3Rf
bG9jayk7CisJCQlmb3JfZWFjaF90YXNrKHApCisJCQkJaWYgKGN1cnJlbnQtPm1tID09IHAtPm1t
ICYmIGN1cnJlbnQgIT0gcCkgeworCQkJCQlpbnQgc3ogPSBlbGZfZHVtcF90aHJlYWRfc3RhdHVz
KHNpZ25yLCBwLCAmdGhyZWFkX2xpc3QpOworCQkJCQlpZiAoIXN6KSB7CisJCQkJCQlyZWFkX3Vu
bG9jaygmdGFza2xpc3RfbG9jayk7CisJCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJCX0KKwkJCQkJ
ZWxzZQorCQkJCQkJdGhyZWFkX3N0YXR1c19zaXplICs9IHN6OworCQkJCX0KKwkJCXJlYWRfdW5s
b2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJfQorCX0gLyogRW5kIGlmKGR1bXBfdGhyZWFkcykgKi8K
IAotCS8qIG5vdyBzdG9wIGFsbCB2bSBvcGVyYXRpb25zICovCi0JZG93bl93cml0ZSgmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsKLQlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKIAogI2lm
ZGVmIERFQlVHCiAJcHJpbnRrKCJlbGZfY29yZV9kdW1wOiAlZCBzZWdzICVsdSBsaW1pdFxuIiwg
c2VncywgbGltaXQpOwogI2VuZGlmCiAKIAkvKiBTZXQgdXAgaGVhZGVyICovCi0JbWVtY3B5KGVs
Zi5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpOwotCWVsZi5lX2lkZW50W0VJX0NMQVNTXSA9IEVM
Rl9DTEFTUzsKLQllbGYuZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOwotCWVsZi5lX2lkZW50
W0VJX1ZFUlNJT05dID0gRVZfQ1VSUkVOVDsKLQltZW1zZXQoZWxmLmVfaWRlbnQrRUlfUEFELCAw
LCBFSV9OSURFTlQtRUlfUEFEKTsKLQotCWVsZi5lX3R5cGUgPSBFVF9DT1JFOwotCWVsZi5lX21h
Y2hpbmUgPSBFTEZfQVJDSDsKLQllbGYuZV92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKLQllbGYuZV9l
bnRyeSA9IDA7Ci0JZWxmLmVfcGhvZmYgPSBzaXplb2YoZWxmKTsKLQllbGYuZV9zaG9mZiA9IDA7
Ci0JZWxmLmVfZmxhZ3MgPSAwOwotCWVsZi5lX2Voc2l6ZSA9IHNpemVvZihlbGYpOwotCWVsZi5l
X3BoZW50c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwotCWVsZi5lX3BobnVtID0gc2Vn
cysxOwkJLyogSW5jbHVkZSBub3RlcyAqLwotCWVsZi5lX3NoZW50c2l6ZSA9IDA7Ci0JZWxmLmVf
c2hudW0gPSAwOwotCWVsZi5lX3Noc3RybmR4ID0gMDsKKwlmaWxsX2VsZl9oZWFkZXIoJmVsZiwg
c2VncysxKTsgLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24qLwogCiAJZnMgPSBnZXRfZnMoKTsK
IAlzZXRfZnMoS0VSTkVMX0RTKTsKQEAgLTExMDgsNjQgKzEyODIsMzUgQEAKIAkgKiB3aXRoIGlu
Zm8gZnJvbSB0aGVpciAvcHJvYy4KIAkgKi8KIAotCW5vdGVzWzBdLm5hbWUgPSAiQ09SRSI7Ci0J
bm90ZXNbMF0udHlwZSA9IE5UX1BSU1RBVFVTOwotCW5vdGVzWzBdLmRhdGFzeiA9IHNpemVvZihw
cnN0YXR1cyk7Ci0Jbm90ZXNbMF0uZGF0YSA9ICZwcnN0YXR1czsKLQlwcnN0YXR1cy5wcl9pbmZv
LnNpX3NpZ25vID0gcHJzdGF0dXMucHJfY3Vyc2lnID0gc2lnbnI7Ci0JcHJzdGF0dXMucHJfc2ln
cGVuZCA9IGN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsKLQlwcnN0YXR1cy5wcl9zaWdo
b2xkID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0JcHNpbmZvLnByX3BpZCA9IHByc3RhdHVz
LnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlwc2luZm8ucHJfcHBpZCA9IHByc3RhdHVzLnByX3Bw
aWQgPSBjdXJyZW50LT5wYXJlbnQtPnBpZDsKLQlwc2luZm8ucHJfcGdycCA9IHByc3RhdHVzLnBy
X3BncnAgPSBjdXJyZW50LT5wZ3JwOwotCXBzaW5mby5wcl9zaWQgPSBwcnN0YXR1cy5wcl9zaWQg
PSBjdXJyZW50LT5zZXNzaW9uOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3NlYyA9IENUX1RPX1NF
Q1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl91dGltZS50dl91c2Vj
ID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9z
dGltZS50dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19zdGltZSk7Ci0JcHJz
dGF0dXMucHJfc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19z
dGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+
dGltZXMudG1zX2N1dGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9UT19V
U0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9jc3RpbWUudHZf
c2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3N0aW1lKTsKLQlwcnN0YXR1cy5w
cl9jc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jc3RpbWUp
OworCQorCWZpbGxfcHJzdGF0dXMoJnByc3RhdHVzLCBjdXJyZW50LCBzaWducik7CisJZmlsbF9u
b3RlKCZub3Rlc1swXSwgIkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHByc3RhdHVzKSwgJnBy
c3RhdHVzKTsKKwkKKwllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7
CisgCQorCWZpbGxfcHNpbmZvKCZwc2luZm8sIGN1cnJlbnQpOworCWZpbGxfbm90ZSgmbm90ZXNb
MV0sICJDT1JFIiwgTlRfUFJQU0lORk8sIHNpemVvZihwc2luZm8pLCAmcHNpbmZvKTsKKwkKKwlm
aWxsX25vdGUoJm5vdGVzWzJdLCAiQ09SRSIsIE5UX1RBU0tTVFJVQ1QsIHNpemVvZigqY3VycmVu
dCksIGN1cnJlbnQpOworICAKKyAgCS8qIFRyeSB0byBkdW1wIHRoZSBGUFUuICovCisJaWYgKChw
cnN0YXR1cy5wcl9mcHZhbGlkID0gZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhjdXJyZW50LCAm
ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZub3Rlc1szXSwgIkNPUkUiLCBOVF9QUkZQUkVHLCBzaXpl
b2YoZnB1KSwgJmZwdSk7CisJfSBlbHNlIHsKKwkJLS1udW1ub3RlOworIAl9CisJaWYgKGVsZl9j
b3JlX2NvcHlfdGFza194ZnByZWdzKGN1cnJlbnQsICZ4ZnB1KSkgeworCQlmaWxsX25vdGUoJm5v
dGVzWzRdLCAiTElOVVgiLCBOVF9QUlhGUFJFRywgc2l6ZW9mKHhmcHUpLCAmeGZwdSk7CisJfSBl
bHNlIHsKKwkJLS1udW1ub3RlOworCX0KKyAgCQogCiAjaWZkZWYgREVCVUcKIAlkdW1wX3JlZ3Mo
IlBhc3NlZCBpbiByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsKIAlkdW1wX3JlZ3MoInByc3Rh
dHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9yZWcpOwogI2VuZGlmCiAKLQlu
b3Rlc1sxXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUgPSBOVF9QUlBTSU5GTzsKLQlu
b3Rlc1sxXS5kYXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rlc1sxXS5kYXRhID0gJnBzaW5m
bzsKLQlpID0gY3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQtPnN0YXRlKSArIDEgOiAwOwot
CXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1
KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21iID0gcHNpbmZvLnByX3NuYW1l
ID09ICdaJzsKLQlwc2luZm8ucHJfbmljZSA9IHRhc2tfbmljZShjdXJyZW50KTsKLQlwc2luZm8u
cHJfZmxhZyA9IGN1cnJlbnQtPmZsYWdzOwotCXBzaW5mby5wcl91aWQgPSBORVdfVE9fT0xEX1VJ
RChjdXJyZW50LT51aWQpOwotCXBzaW5mby5wcl9naWQgPSBORVdfVE9fT0xEX0dJRChjdXJyZW50
LT5naWQpOwotCXN0cm5jcHkocHNpbmZvLnByX2ZuYW1lLCBjdXJyZW50LT5jb21tLCBzaXplb2Yo
cHNpbmZvLnByX2ZuYW1lKSk7Ci0KLQlub3Rlc1syXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzJd
LnR5cGUgPSBOVF9UQVNLU1RSVUNUOwotCW5vdGVzWzJdLmRhdGFzeiA9IHNpemVvZigqY3VycmVu
dCk7Ci0Jbm90ZXNbMl0uZGF0YSA9IGN1cnJlbnQ7Ci0KLQkvKiBUcnkgdG8gZHVtcCB0aGUgRlBV
LiAqLwotCXByc3RhdHVzLnByX2ZwdmFsaWQgPSBkdW1wX2ZwdSAocmVncywgJmZwdSk7Ci0JaWYg
KCFwcnN0YXR1cy5wcl9mcHZhbGlkKQotCXsKLQkJbnVtbm90ZS0tOwotCX0KLQllbHNlCi0Jewot
CQlub3Rlc1szXS5uYW1lID0gIkNPUkUiOwotCQlub3Rlc1szXS50eXBlID0gTlRfUFJGUFJFRzsK
LQkJbm90ZXNbM10uZGF0YXN6ID0gc2l6ZW9mKGZwdSk7Ci0JCW5vdGVzWzNdLmRhdGEgPSAmZnB1
OwotCX0KLQkKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICovCiAJewogCQlzdHJ1Y3QgZWxm
X3BoZHIgcGhkcjsKQEAgLTExNzMsMTcgKzEzMTgsMTIgQEAKIAogCQlmb3IoaSA9IDA7IGkgPCBu
dW1ub3RlOyBpKyspCiAJCQlzeiArPSBub3Rlc2l6ZSgmbm90ZXNbaV0pOworCQkKKwkJaWYgKGR1
bXBfdGhyZWFkcykKKwkJCXN6ICs9IHRocmVhZF9zdGF0dXNfc2l6ZTsKIAotCQlwaGRyLnBfdHlw
ZSA9IFBUX05PVEU7Ci0JCXBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7Ci0JCXBoZHIucF92YWRkciA9
IDA7Ci0JCXBoZHIucF9wYWRkciA9IDA7Ci0JCXBoZHIucF9maWxlc3ogPSBzejsKLQkJcGhkci5w
X21lbXN6ID0gMDsKLQkJcGhkci5wX2ZsYWdzID0gMDsKLQkJcGhkci5wX2FsaWduID0gMDsKLQot
CQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKKwkJZmlsbF9lbGZfbm90ZV9waGRyKCZwaGRyLCBz
eiwgb2Zmc2V0KTsKKwkJb2Zmc2V0ICs9IHN6OwogCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2Yo
cGhkcikpOwogCX0KIApAQCAtMTIxMiwxMCArMTM1MiwyMSBAQAogCQlEVU1QX1dSSVRFKCZwaGRy
LCBzaXplb2YocGhkcikpOwogCX0KIAorIAkvKiB3cml0ZSBvdXQgdGhlIG5vdGVzIHNlY3Rpb24g
Ki8KIAlmb3IoaSA9IDA7IGkgPCBudW1ub3RlOyBpKyspCiAJCWlmICghd3JpdGVub3RlKCZub3Rl
c1tpXSwgZmlsZSkpCiAJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAorCS8qIHdyaXRlIG91dCB0aGUg
dGhyZWFkIHN0YXR1cyBub3RlcyBzZWN0aW9uICovCisgCWlmIChkdW1wX3RocmVhZHMpICB7CisJ
CWxpc3RfZm9yX2VhY2godCwgJnRocmVhZF9saXN0KSB7CisJCQlzdHJ1Y3QgZWxmX3RocmVhZF9z
dGF0dXMgKnRtcCA9IGxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0
KTsKKwkJCWZvciAoaSA9IDA7IGkgPCB0bXAtPm51bV9ub3RlczsgaSsrKQorCQkJCWlmICghd3Jp
dGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBmaWxlKSkKKwkJCQkJZ290byBlbmRfY29yZWR1bXA7CisJ
CX0KKyAJfQorIAogCURVTVBfU0VFSyhkYXRhb2ZmKTsKIAogCWZvcih2bWEgPSBjdXJyZW50LT5t
bS0+bW1hcDsgdm1hICE9IE5VTEw7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewpAQCAtMTI1OSwxMSAr
MTQxMCwyNCBAQAogCQkgICAgICAgKG9mZl90KSBmaWxlLT5mX3Bvcywgb2Zmc2V0KTsKIAl9CiAK
LSBlbmRfY29yZWR1bXA6CitlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKKworY2xlYW51cDoK
KwlpZiAoZHVtcF90aHJlYWRzKSAgeworCQl3aGlsZSghbGlzdF9lbXB0eSgmdGhyZWFkX2xpc3Qp
KSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSB0aHJlYWRfbGlzdC5uZXh0OworCQkJbGlz
dF9kZWwodG1wKTsKKwkJCWtmcmVlKGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZWxmX3RocmVhZF9z
dGF0dXMsIGxpc3QpKTsKKwkJfQorCisJCXJlc3VtZV90aHJlYWRzKCk7CisJfQorCiAJdXBfd3Jp
dGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIGhhc19kdW1wZWQ7CiB9CisKICNl
bmRpZgkJLyogVVNFX0VMRl9DT1JFX0RVTVAgKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9l
bGZfYmluZm10KHZvaWQpCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmls
bGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBsaW51eDIuNS4xNC50Y29yZS9pbmNsdWRlL2FzbS1p
Mzg2L2VsZi5oCi0tLSBsaW51eC0yLjUuMTQudmFubmlsbGEvaW5jbHVkZS9hc20taTM4Ni9lbGYu
aAlNb24gTWF5ICA2IDE2OjI3OjM4IDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUv
YXNtLWkzODYvZWxmLmgJVHVlIE1heSAgNyAxNTowMToyMSAyMDAyCkBAIC05OSw2ICs5OSwxNiBA
QAogCiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3My
KSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisKKworZXh0ZXJu
IGludCBkdW1wX3Rhc2tfcmVncyAoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdz
ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3Ry
dWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CitleHRlcm4gaW50IGR1bXBfdGFza19leHRlbmRlZF9m
cHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCAqKTsKKwor
I2RlZmluZSBFTEZfQ09SRV9DT1BZX1RBU0tfUkVHUyh0c2ssIHB0X3JlZ3MpIGR1bXBfdGFza19y
ZWdzKHRzaywgcHRfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZf
ZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKKyNkZWZpbmUgRUxGX0NPUkVf
Q09QWV9YRlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFza19leHRlbmRlZF9mcHUodHNr
LCBlbGZfeGZwcmVncykKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC11ck4gLVggZG9udGRpZmYg
bGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvZWxmLmggbGludXgyLjUuMTQudGNv
cmUvaW5jbHVkZS9saW51eC9lbGYuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUv
bGludXgvZWxmLmgJTW9uIE1heSAgNiAxNjoyNzozOCAyMDAyCisrKyBsaW51eDIuNS4xNC50Y29y
ZS9pbmNsdWRlL2xpbnV4L2VsZi5oCVR1ZSBNYXkgIDcgMTU6MjI6NTUgMjAwMgpAQCAtNTc2LDYg
KzU3Niw5IEBACiAjZGVmaW5lIE5UX1BSUFNJTkZPCTMKICNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0
CiAjZGVmaW5lIE5UX1BSRlBYUkVHCTIwCisjZGVmaW5lIE5UX1BSWEZQUkVHICAgICAweDQ2ZTYy
YjdmCS8qIG5vdGUgbmFtZSBtdXN0IGJlICJMSU5VWCIgYXMgcGVyIEdEQiAqLworCQkJCQkvKiBm
cm9tIGdkYjUuMS9pbmNsdWRlL2VsZi9jb21tb24uaCAqLworCiAKIC8qIE5vdGUgaGVhZGVyIGlu
IGEgUFRfTk9URSBzZWN0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBlbGYzMl9ub3RlIHsKZGlmZiAt
dXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4xNC52YW5uaWxsYS9pbmNsdWRlL2xpbnV4L2VsZmNv
cmUuaCBsaW51eDIuNS4xNC50Y29yZS9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaAotLS0gbGludXgt
Mi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvZWxmY29yZS5oCU1vbiBNYXkgIDYgMTY6Mjc6
MzggMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgJVHVl
IE1heSAgNyAxNTowNTowMSAyMDAyCkBAIC04Niw0ICs4Niw1NSBAQAogI2RlZmluZSBQUkFSR1Na
IEVMRl9QUkFSR1NaIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdGF0aWMgaW5saW5l
IHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBw
dF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfUkVHUworCUVMRl9DT1JFX0NP
UFlfUkVHUygoKmVsZnJlZ3MpLCByZWdzKQorI2Vsc2UKKwlpZiAoc2l6ZW9mKGVsZl9ncmVnc2V0
X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpIHsKKwkJcHJpbnRrKCJzaXplb2YoZWxmX2dy
ZWdzZXRfdCkgKCVsZCkgIT0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAoJWxkKVxuIiwKKwkJCShs
b25nKXNpemVvZihlbGZfZ3JlZ3NldF90KSwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7
CisJfSBlbHNlCisJCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7CisjZW5kaWYK
K30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRh
c2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKQoreworI2lmZGVmIEVMRl9DT1JF
X0NPUFlfVEFTS19SRUdTCisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwkKKwlpZiAoRUxGX0NPUkVf
Q09QWV9UQVNLX1JFR1ModCwgJnJlZ3MpKSB7CisJCWVsZl9jb3JlX2NvcHlfcmVncyhlbGZyZWdz
LCAmcmVncyk7CisJCXJldHVybiAxOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitleHRl
cm4gaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKKwor
c3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhzdHJ1Y3QgdGFza19z
dHJ1Y3QgKnQsIGVsZl9mcHJlZ3NldF90ICpmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9G
UFJFR1MKKwlyZXR1cm4gRUxGX0NPUkVfQ09QWV9GUFJFR1ModCwgZnB1KTsKKyNlbHNlCisJcmV0
dXJuIGR1bXBfZnB1KE5VTEwsIGZwdSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQg
ZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZnB4
cmVnc2V0X3QgKnhmcHUpCit7CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdTCisJcmV0dXJu
IEVMRl9DT1JFX0NPUFlfWEZQUkVHUyh0LCB4ZnB1KTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5k
aWYKK30KKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKICNlbmRpZiAvKiBfTElOVVhf
RUxGQ09SRV9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmlsbGEv
aW5jbHVkZS9saW51eC9zY2hlZC5oIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUvbGludXgvc2No
ZWQuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvc2NoZWQuaAlNb24g
TWF5ICA2IDE2OjQwOjE5IDIwMDIKKysrIGxpbnV4Mi41LjE0LnRjb3JlL2luY2x1ZGUvbGludXgv
c2NoZWQuaAlUdWUgTWF5ICA3IDE0OjQ0OjA5IDIwMDIKQEAgLTEzMCw2ICsxMzAsMTIgQEAKIAog
I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKKworLyogZnVuY3Rpb25zIGZvciBwYXVzaW5n
IGFuZCByZXN1bW1pbmcgZnVuY3Rpb25zIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNpbmcgc2lnbmFs
cyAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF90aHJlYWRzKCB2b2lkICk7CitleHRlcm4gdm9pZCBy
ZXN1bWVfdGhyZWFkcyggdm9pZCApOworCisKIC8qCiAgKiBUaGlzIHNlcmlhbGl6ZXMgInNjaGVk
dWxlKCkiIGFuZCBhbHNvIHByb3RlY3RzCiAgKiB0aGUgcnVuLXF1ZXVlIGZyb20gZGVsZXRpb25z
L21vZGlmaWNhdGlvbnMgKGJ1dApkaWZmIC11ck4gLVggZG9udGRpZmYgbGludXgtMi41LjE0LnZh
bm5pbGxhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggbGludXgyLjUuMTQudGNvcmUvaW5jbHVkZS9s
aW51eC9zeXNjdGwuaAotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2luY2x1ZGUvbGludXgvc3lz
Y3RsLmgJTW9uIE1heSAgNiAxNjoyNjoxOCAyMDAyCisrKyBsaW51eDIuNS4xNC50Y29yZS9pbmNs
dWRlL2xpbnV4L3N5c2N0bC5oCVR1ZSBNYXkgIDcgMTQ6NDQ6MTEgMjAwMgpAQCAtODcsNiArODcs
NyBAQAogCUtFUk5fQ0FQX0JTRVQ9MTQsCS8qIGludDogY2FwYWJpbGl0eSBib3VuZGluZyBzZXQg
Ki8KIAlLRVJOX1BBTklDPTE1LAkJLyogaW50OiBwYW5pYyB0aW1lb3V0ICovCiAJS0VSTl9SRUFM
Uk9PVERFVj0xNiwJLyogcmVhbCByb290IGRldmljZSB0byBtb3VudCBhZnRlciBpbml0cmQgKi8K
KwlLRVJOX0NPUkVfRFVNUFNfVEhSRUFEUz0xNywgLyogaW50OiBpbmNsdWRlIHN0YXR1cyBvZiBv
dGhlcnMgdGhyZWFkcyBpbiBkdW1wICovCiAKIAlLRVJOX1NQQVJDX1JFQk9PVD0yMSwJLyogcmVi
b290IGNvbW1hbmQgb24gU3BhcmMgKi8KIAlLRVJOX0NUTEFMVERFTD0yMiwJLyogaW50OiBhbGxv
dyBjdGwtYWx0LWRlbCB0byByZWJvb3QgKi8KZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIu
NS4xNC52YW5uaWxsYS9rZXJuZWwvc2NoZWQuYyBsaW51eDIuNS4xNC50Y29yZS9rZXJuZWwvc2No
ZWQuYwotLS0gbGludXgtMi41LjE0LnZhbm5pbGxhL2tlcm5lbC9zY2hlZC5jCVN1biBNYXkgIDUg
MjM6Mzc6NTcgMjAwMgorKysgbGludXgyLjUuMTQudGNvcmUva2VybmVsL3NjaGVkLmMJVGh1IE1h
eSAgOSAwOToyNjozMCAyMDAyCkBAIC0xNTQsNyArMTU0LDggQEAKIAlsaXN0X3QgbWlncmF0aW9u
X3F1ZXVlOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcnVucXVl
dWUgcnVucXVldWVzW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgc3RydWN0
IHJ1bnF1ZXVlIHJ1bnF1ZXVlc1tOUl9DUFVTICsgMV0gX19jYWNoZWxpbmVfYWxpZ25lZDsKKyNk
ZWZpbmUgUEhBTlRPTV9DUFUgTlJfQ1BVUwogCiAjZGVmaW5lIGNwdV9ycShjcHUpCQkocnVucXVl
dWVzICsgKGNwdSkpCiAjZGVmaW5lIHRoaXNfcnEoKQkJY3B1X3JxKHNtcF9wcm9jZXNzb3JfaWQo
KSkKQEAgLTI2Myw2ICsyNjQsOSBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgbmVlZF9yZXNj
aGVkLCBucnBvbGxpbmc7CiAKKwlpZiggdW5saWtlbHkoIXAtPmNwdXNfYWxsb3dlZCkgKQorCQkJ
cmV0dXJuOworCQkJCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJLyogbWluaW1pc2UgdGhlIGNoYW5j
ZSBvZiBzZW5kaW5nIGFuIGludGVycnVwdCB0byBwb2xsX2lkbGUoKSAqLwogCW5ycG9sbGluZyA9
IHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsVElGX1BPTExJTkdfTlJGTEFHKTsKQEAgLTI3Myw2ICsy
NzcsOSBAQAogCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAtPnRocmVhZF9pbmZvLT5jcHUpOwogCXBy
ZWVtcHRfZW5hYmxlKCk7CiAjZWxzZQorCS8vIGRvIHdlIG5lZWQgdGhlIGNwdXNfYWxsb3dlZCB0
ZXN0IGhlcmUgZm9yIGNvcmVfZHVtcHNfdGhyZWFkcz8KKwkvL2lmKCB1bmxpa2VseSghcC0+Y3B1
c19hbGxvd2VkKSByZXR1cm47IC8vID8KKwkKIAlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKICNl
bmRpZgogfQpAQCAtMzM5LDcgKzM0Niw3IEBACiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJ
aWYgKCFwLT5hcnJheSkgewogCQlhY3RpdmF0ZV90YXNrKHAsIHJxKTsKLQkJaWYgKHAtPnByaW8g
PCBycS0+Y3Vyci0+cHJpbykKKwkJaWYgKHAtPmNwdXNfYWxsb3dlZCAmJiAocC0+cHJpbyA8IHJx
LT5jdXJyLT5wcmlvKSApCiAJCQlyZXNjaGVkX3Rhc2socnEtPmN1cnIpOwogCQlzdWNjZXNzID0g
MTsKIAl9CkBAIC05OTYsNiArMTAwMywxMzUgQEAKIAogdm9pZCBzY2hlZHVsaW5nX2Z1bmN0aW9u
c19lbmRfaGVyZSh2b2lkKSB7IH0KIAorLyoKKyAqIG5lZWRlZCBmb3IgYWNjdXJhdGUgY29yZSBk
dW1wcyBvZiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisgKiBzZWUgYmluZm10X2VsZi5j
IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCByZXNjaGVkdWxlX290aGVy
X2NwdXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGksIGNwdTsKKwlzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnA7CisKKwlmb3IoaT0wOyBpPCBzbXBfbnVtX2NwdXM7IGkrKykgeworCQlj
cHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CisJCXAgPSBjcHVfY3VycihjcHUpOworCQlpZiAocC0+
dGhyZWFkX2luZm8tPmNwdSE9IHNtcF9wcm9jZXNzb3JfaWQoKSkgeworCQkJc2V0X3Rza19uZWVk
X3Jlc2NoZWQocCk7CisJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAtPnRocmVhZF9pbmZvLT5jcHUp
OworCQl9CisJfQorI2VuZGlmCQorCXJldHVybjsKK30KKworCisvKiBmdW5jdGlvbnMgZm9yIHBh
dXNpbmcgYW5kIHJlc3VtbWluZyBmdW5jdGlvbnMgd2l0aCBvdXQgdXNpbmcgc2lnbmFscyAqLwor
dm9pZCBzdXNwZW5kX3RocmVhZHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXJ1
bnF1ZXVlX3QgKnBoYW50b21ROworCXRhc2tfdCAqdGhyZWFkc1tOUl9DUFVTXSwgKnA7CisJaW50
IGksIE9uQ1BVQ291bnQgPSAwOworCisvLworLy8gZ3JhYiBhbGwgdGhlIHJxX2xvY2tzLgorLy8g
Y3VycmVudCBpcyB0aGUgcHJvY2VzcyBkdW1waW5nIGNvcmUKKy8vICAKKworCXByZWVtcHRfZGlz
YWJsZSgpOworCQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvcihpPTA7IGk8IHNtcF9u
dW1fY3B1czsgaSsrKSB7CisJCXNwaW5fbG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlj
dXJyZW50LT5jcHVzX2FsbG93ZWQgPSAxVUwgPDwgY3VycmVudC0+dGhyZWFkX2luZm8tPmNwdTsK
KwkvLyBwcmV2ZW50IG1pZ3JhaW9uIG9mIGR1bXBpbmcgcHJvY2VzcyBtYWtpbmcgbGlmZSBjb21w
bGljYXRlZC4KKworCXBoYW50b21RID0gY3B1X3JxKFBIQU5UT01fQ1BVKTsgCisJc3Bpbl9sb2Nr
KCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVzY2hlZHVsZV9vdGhlcl9jcHVzKCk7CisJLy8gdGhp
cyBpcyBhbiBvcHRpb25hbCBJUEksIGJ1dCBpdCBtYWtlcyBmb3IgdGhlIG1vc3QgYWNjdXJhdGUg
Y29yZSBmaWxlcyBwb3NzaWJsZS4KKwkKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCisJ
Zm9yX2VhY2hfdGFzayhwKSB7CisJCWlmIChjdXJyZW50LT5tbSA9PSBwLT5tbSAmJiBjdXJyZW50
ICE9IHApIHsKKwkJCWlmKCBwID09IHRhc2tfcnEocCktPmN1cnIgKSB7CisJCQkJLy90aGVuIHJl
bWVtYmVyIGl0IGZvciBsYXRlciB1cyBvZiBzZXRfY3B1c19hbGxvd2VkCisJCQkJdGhyZWFkc1tP
bkNQVUNvdW50XSA9IHA7CisJCQkJcC0+Y3B1c19hbGxvd2VkID0gMDsvL3ByZXZlbnQgbG9hZCBi
YWxhbmNlIGZyb20gbW92aW5nIHRoZXNlIGd1eXMuCisJCQkJT25DUFVDb3VudCArKzsKKwkJCX0g
ZWxzZSB7CisJCQkJLy8gd2UgbWFudWFseSBtb3ZlIHRoZSBwcm9jZXNzIHRvIHRoZSBwaGFudG9t
IHJ1biBxdWV1ZS4KKworCQkJCWlmIChwLT5hcnJheSkgeworCQkJCQlkZWFjdGl2YXRlX3Rhc2so
cCwgdGFza19ycShwKSk7CisJCQkJCWFjdGl2YXRlX3Rhc2socCwgcGhhbnRvbVEpOworCQkJCX0K
KwkJCQlwLT50aHJlYWRfaW5mby0+Y3B1ID0gUEhBTlRPTV9DUFU7CisJCQkJcC0+Y3B1c19hbGxv
d2VkID0gMDsvL3ByZXZlbnQgbG9hZCBiYWxhbmNlIGZyb20gbW92aW5nIHRoZXNlIGd1eXMuCisJ
CQl9CisJCX0KKwl9CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJc3Bpbl91bmxv
Y2soJnBoYW50b21RLT5sb2NrKTsKKwlmb3IoaT1zbXBfbnVtX2NwdXMtMTsgMDw9IGk7IGktLSkg
eworCQlzcGluX3VubG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVz
dG9yZShmbGFncyk7CisKKwlmb3IoIGkgPSAwOyBpPE9uQ1BVQ291bnQ7IGkrKykgeworCQlzZXRf
Y3B1c19hbGxvd2VkKHRocmVhZHNbaV0sIDApOworCX0KKwkKK30KKwordm9pZCByZXN1bWVfdGhy
ZWFkcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcnVucXVldWVfdCAqcGhhbnRv
bVE7CisJdGFza190ICpwOworCWludCBpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXBo
YW50b21RID0gY3B1X3JxKFBIQU5UT01fQ1BVKTsKKworCWZvcihpPTA7IGk8IHNtcF9udW1fY3B1
czsgaSsrKSB7CisJCXNwaW5fbG9jaygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisJc3Bpbl9sb2Nr
KCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlmb3Jf
ZWFjaF90YXNrKHApIHsKKwkJaWYgKGN1cnJlbnQtPm1tID09IHAtPm1tICYmIGN1cnJlbnQgIT0g
cCkgeworCQkJcC0+Y3B1c19hbGxvd2VkID0gMVVMIDw8IGN1cnJlbnQtPnRocmVhZF9pbmZvLT5j
cHU7CisJCQlpZiAocC0+YXJyYXkpIHsKKwkJCQlkZWFjdGl2YXRlX3Rhc2socCxwaGFudG9tUSk7
CisJCQkJYWN0aXZhdGVfdGFzayhwLCB0YXNrX3JxKGN1cnJlbnQpKTsKKwkJCX0KKwkJCXAtPnRo
cmVhZF9pbmZvLT5jcHUgPSBjdXJyZW50LT50aHJlYWRfaW5mby0+Y3B1OworCQl9CisJfQorCisJ
cmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJc3Bpbl91bmxvY2soJnBoYW50b21RLT5s
b2NrKTsKKwlmb3IoaT1zbXBfbnVtX2NwdXMtMTsgMDw9IGk7IGktLSkgeworCQlzcGluX3VubG9j
aygmY3B1X3JxKGkpLT5sb2NrKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJ
cHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworfQorCisKKwogdm9pZCBzZXRfdXNlcl9uaWNl
KHRhc2tfdCAqcCwgbG9uZyBuaWNlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTgy
LDExICsxNzE4LDExIEBACiB7CiAJcnVucXVldWVfdCAqcnE7CiAJaW50IGksIGosIGs7CisJcHJp
b19hcnJheV90ICphcnJheTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJ
cnVucXVldWVfdCAqcnEgPSBjcHVfcnEoaSk7Ci0JCXByaW9fYXJyYXlfdCAqYXJyYXk7CiAKKwlm
b3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCXJxID0gY3B1X3JxKGkpOwogCQlycS0+
YWN0aXZlID0gcnEtPmFycmF5czsKIAkJcnEtPmV4cGlyZWQgPSBycS0+YXJyYXlzICsgMTsKIAkJ
c3Bpbl9sb2NrX2luaXQoJnJxLT5sb2NrKTsKQEAgLTE2MDMsNiArMTczOSwyOCBAQAogCQkJX19z
ZXRfYml0KE1BWF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAkJfQogCX0KKworIAorCWkgPSBQSEFO
VE9NX0NQVTsKKwlycSA9IGNwdV9ycShpKTsKKwlycS0+YWN0aXZlID0gcnEtPmFycmF5czsKKwly
cS0+ZXhwaXJlZCA9IHJxLT5hcnJheXMgKyAxOworCXJxLT5jdXJyID0gTlVMTDsKKwlzcGluX2xv
Y2tfaW5pdCgmcnEtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZycS0+ZnJvemVuKTsKKwlJTklU
X0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisKKwlmb3IgKGogPSAwOyBqIDwgMjsg
aisrKSB7CisJCWFycmF5ID0gcnEtPmFycmF5cyArIGo7CisJCWZvciAoayA9IDA7IGsgPCBNQVhf
UFJJTzsgaysrKSB7CisJCQlJTklUX0xJU1RfSEVBRChhcnJheS0+cXVldWUgKyBrKTsKKwkJCV9f
Y2xlYXJfYml0KGssIGFycmF5LT5iaXRtYXApOworCQl9CisJCS8vIGRlbGltaXRlciBmb3IgYml0
c2VhcmNoCisJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CisJfQorCisKIAkv
KgogCSAqIFdlIGhhdmUgdG8gZG8gYSBsaXR0bGUgbWFnaWMgdG8gZ2V0IHRoZSBmaXJzdAogCSAq
IHByb2Nlc3MgcmlnaHQgaW4gU01QIG1vZGUuCkBAIC0xNjYyLDkgKzE4MjAsMTEgQEAKIAltaWdy
YXRpb25fcmVxX3QgcmVxOwogCXJ1bnF1ZXVlX3QgKnJxOwogCi0JbmV3X21hc2sgJj0gY3B1X29u
bGluZV9tYXA7Ci0JaWYgKCFuZXdfbWFzaykKLQkJQlVHKCk7CisJaWYobmV3X21hc2speyAvLyBj
YW4gYmUgTyBmb3IgVENvcmUgcHJvY2VzcyBzdXNwZW5kcworCQluZXdfbWFzayAmPSBjcHVfb25s
aW5lX21hcDsKKwkJaWYgKCFuZXdfbWFzaykKKwkJCUJVRygpOworCX0KIAogCXByZWVtcHRfZGlz
YWJsZSgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CkBAIC0xNzM3LDcgKzE4OTcs
MTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCQlw
ID0gcmVxLT50YXNrOwotCQljcHVfZGVzdCA9IF9fZmZzKHAtPmNwdXNfYWxsb3dlZCk7CisKKwkJ
aWYoIHAtPmNwdXNfYWxsb3dlZCkKKwkJCWNwdV9kZXN0ID0gX19mZnMocC0+Y3B1c19hbGxvd2Vk
KTsKKwkJZWxzZQorCQkJY3B1X2Rlc3QgPSBQSEFOVE9NX0NQVTsKKwogCQlycV9kZXN0ID0gY3B1
X3JxKGNwdV9kZXN0KTsKIHJlcGVhdDoKIAkJY3B1X3NyYyA9IHAtPnRocmVhZF9pbmZvLT5jcHU7
CmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMTQudmFubmlsbGEva2VybmVsL3N5c2N0
bC5jIGxpbnV4Mi41LjE0LnRjb3JlL2tlcm5lbC9zeXNjdGwuYwotLS0gbGludXgtMi41LjE0LnZh
bm5pbGxhL2tlcm5lbC9zeXNjdGwuYwlTdW4gTWF5ICA1IDIzOjM3OjU0IDIwMDIKKysrIGxpbnV4
Mi41LjE0LnRjb3JlL2tlcm5lbC9zeXNjdGwuYwlUdWUgTWF5ICA3IDE0OjM5OjM3IDIwMDIKQEAg
LTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNlbmRpZgogCitpbnQg
Y29yZV9kdW1wc190aHJlYWRzID0gMDsKKwogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAog
LyogRXh0ZXJuYWwgdmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLwpAQCAtMTcxLDcg
KzE3Myw5IEBACiAJIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKIAl7S0VSTl9UQUlOVEVE
LCAidGFpbnRlZCIsICZ0YWludGVkLCBzaXplb2YoaW50KSwKIAkgMDY0NCwgTlVMTCwgJnByb2Nf
ZG9pbnR2ZWN9LAotCXtLRVJOX0NBUF9CU0VULCAiY2FwLWJvdW5kIiwgJmNhcF9ic2V0LCBzaXpl
b2Yoa2VybmVsX2NhcF90KSwKKwl7S0VSTl9DT1JFX0RVTVBTX1RIUkVBRFMsICJjb3JlX2R1bXBz
X3RocmVhZHMiLCAmY29yZV9kdW1wc190aHJlYWRzLCBzaXplb2YoaW50KSwKKwkgMDY0NCwgTlVM
TCwgJnByb2NfZG9pbnR2ZWN9LAorCSB7S0VSTl9DQVBfQlNFVCwgImNhcC1ib3VuZCIsICZjYXBf
YnNldCwgc2l6ZW9mKGtlcm5lbF9jYXBfdCksCiAJIDA2MDAsIE5VTEwsICZwcm9jX2RvaW50dmVj
X2JzZXR9LAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCXtLRVJOX1JFQUxST09UREVW
LCAicmVhbC1yb290LWRldiIsICZyZWFsX3Jvb3RfZGV2LCBzaXplb2YoaW50KSwK

--------------Boundary-00=_E8DWSQYAIF8HSZFDMIT8--
-
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/