[PATCH] Multi-threaded core dumps for 2.4.18 non-O(1) kernels.

mgross (mgross@unix-os.sc.intel.com)
Fri, 14 Jun 2002 14:40:40 -0400


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

The following patch is a back port of the 2.5.18 tcore patch I posted last
week.

It applies cleanly to the 2.4.18 base tree.

It has some warnings and one simple regection when applied to the 2.4.18-ia64
tree due to a patch collision with the ia64 patch. I have a ia64 version of
this patch available, upon request, which will apply cleanly to the ia64
kernel.

This patch has been tested on SMP and UP i386 architectures and works very
well. The ia64 SMP version has also been tested and works very well.

To use this patch you will need to strip the objects from the libpthread
module loaded by GDB at post mortem debug time.
('strip /lib/libpthread-0.9.so for my system', YMMV)

I would like to see this feature added to the linux kernel. Support for
multi-threaded core dumps has been in Solaris for a LONG time now, and its
silly for it to not exist in Linux. ISV's need this type of support from the kernel.

Please apply this patch. Its a good thing.

--mgross

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

ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNC4xOC9hcmNoL2kzODYva2VybmVsL2kzODcu
YyBsaW51eC9hcmNoL2kzODYva2VybmVsL2kzODcuYwotLS0gbGludXgtMi40LjE4L2FyY2gvaTM4
Ni9rZXJuZWwvaTM4Ny5jCUZyaSBGZWIgMjMgMTM6MDk6MDggMjAwMQorKysgbGludXgvYXJjaC9p
Mzg2L2tlcm5lbC9pMzg3LmMJRnJpIEp1biAxNCAxMTowMDoyOCAyMDAyCkBAIC01MjAsMyArNTIw
LDQ0IEBACiAKIAlyZXR1cm4gZnB2YWxpZDsKIH0KKworaW50IGR1bXBfdGFza19mcHUoIHN0cnVj
dCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqZnB1ICkKK3sKKwlp
bnQgZnB2YWxpZDsKKworCWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aDsKKwlpZiAoIGZwdmFsaWQg
KSB7CisJCWlmICh0c2sgPT0gY3VycmVudCkgdW5sYXp5X2ZwdSggdHNrICk7CisJCWlmICggY3B1
X2hhc19meHNyICkgeworCQkJY29weV9mcHVfZnhzYXZlKCB0c2ssIGZwdSApOworCQl9IGVsc2Ug
eworCQkJY29weV9mcHVfZnNhdmUoIHRzaywgZnB1ICk7CisJCX0KKwl9CisKKwlyZXR1cm4gZnB2
YWxpZDsKK30KKworaW50IGR1bXBfdGFza19leHRlbmRlZF9mcHUoIHN0cnVjdCB0YXNrX3N0cnVj
dCAqdHNrLCBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCAqZnB1ICkKK3sKKwlpbnQgZnB2YWxpZDsK
KwkKKwlmcHZhbGlkID0gdHNrLT51c2VkX21hdGggJiYgY3B1X2hhc19meHNyOworCWlmICggZnB2
YWxpZCApIHsKKwkJaWYgKHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1KCB0c2sgKTsKKwkJbWVt
Y3B5KCBmcHUsICZ0c2stPnRocmVhZC5pMzg3LmZ4c2F2ZSwKKwkJc2l6ZW9mKHN0cnVjdCB1c2Vy
X2Z4c3Jfc3RydWN0KSApOworCX0KKwkKKwlyZXR1cm4gZnB2YWxpZDsKK30KKworCisjaWZkZWYg
Q09ORklHX1NNUAordm9pZCBkdW1wX3NtcF91bmxhenlfZnB1KHZvaWQpCit7CisJdW5sYXp5X2Zw
dShjdXJyZW50KTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKwpkaWZmIC11ck4gLVggZG9udGRpZmYg
bGludXgtMi40LjE4L2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGxpbnV4L2FyY2gvaTM4Ni9r
ZXJuZWwvcHJvY2Vzcy5jCi0tLSBsaW51eC0yLjQuMTgvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNz
LmMJTW9uIEZlYiAyNSAxNDozNzo1MyAyMDAyCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL3By
b2Nlc3MuYwlGcmkgSnVuIDE0IDExOjAwOjI4IDIwMDIKQEAgLTY0NCw2ICs2NDQsMjQgQEAKIAog
CWR1bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+aTM4Nyk7CiB9CisvKiAK
KyAqIENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBy
dW5uaW5nIChpbiB1c2VyIHNwYWNlKQorICovCisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgor
aW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAgZWxmX2dyZWdzZXRf
dCAqcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisJCisJcHRyZWdzID0gKihzdHJ1
Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0c2sgKyBUSFJFQURfU0laRSAtIHNpemVvZihz
dHJ1Y3QgcHRfcmVncykpOworCXB0cmVncy54Y3MgJj0gMHhmZmZmOworCXB0cmVncy54ZHMgJj0g
MHhmZmZmOworCXB0cmVncy54ZXMgJj0gMHhmZmZmOworCXB0cmVncy54c3MgJj0gMHhmZmZmOwor
CisJZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOworCisJcmV0dXJuIDE7Cit9CiAK
IC8qCiAgKiBUaGlzIHNwZWNpYWwgbWFjcm8gY2FuIGJlIHVzZWQgdG8gbG9hZCBhIGRlYnVnZ2lu
ZyByZWdpc3RlcgpkaWZmIC11ck4gLVggZG9udGRpZmYgbGludXgtMi40LjE4L2FyY2gvaWE2NC9r
ZXJuZWwvcHJvY2Vzcy5jIGxpbnV4L2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCi0tLSBsaW51
eC0yLjQuMTgvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMJRnJpIE5vdiAgOSAxNzoyNjoxNyAy
MDAxCisrKyBsaW51eC9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwlGcmkgSnVuIDE0IDExOjAw
OjI4IDIwMDIKQEAgLTI5OCw2ICsyOTgsMzEgQEAKIHZvaWQKIGRvX2NvcHlfcmVncyAoc3RydWN0
IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCiB7CisJZG9fY29weV90YXNrX3JlZ3Mo
Y3VycmVudCwgaW5mbywgYXJnKTsKK30KKwordm9pZAorZG9fZHVtcF9mcHUgKHN0cnVjdCB1bndf
ZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQoreworCWRvX2R1bXBfdGFza19mcHUoY3VycmVu
dCwgaW5mbywgYXJnKTsKK30KKwordm9pZAoraWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MgKHN0cnVj
dCBwdF9yZWdzICpwdCwgZWxmX2dyZWdzZXRfdCBkc3QpCit7CisJdW53X2luaXRfcnVubmluZyhk
b19jb3B5X3JlZ3MsIGRzdCk7Cit9CisKK2ludAorZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpw
dCwgZWxmX2ZwcmVnc2V0X3QgZHN0KQoreworCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUs
IGRzdCk7CisJcmV0dXJuIDE7CS8qIGYwLWYzMSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFsd2F5
cyByZXR1cm4gMSAqLworfQorCitzdGF0aWMgdm9pZAorZG9fY29weV90YXNrX3JlZ3MgKHN0cnVj
dCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICph
cmcpCit7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBzcCwgbmF0X2JpdHMgPSAwLCBpcCwgYXJfcm5h
dCwgdXJic19lbmQsIGNmbTsKIAllbGZfZ3JlZ190ICpkc3QgPSBhcmc7CiAJc3RydWN0IHB0X3Jl
Z3MgKnB0OwpAQCAtMzEyLDEyICszMzcsMTIgQEAKIAl1bndfZ2V0X3NwKGluZm8sICZzcCk7CiAJ
cHQgPSAoc3RydWN0IHB0X3JlZ3MgKikgKHNwICsgMTYpOwogCi0JdXJic19lbmQgPSBpYTY0X2dl
dF91c2VyX3Jic19lbmQoY3VycmVudCwgcHQsICZjZm0pOworCXVyYnNfZW5kID0gaWE2NF9nZXRf
dXNlcl9yYnNfZW5kKHRhc2ssIHB0LCAmY2ZtKTsKIAotCWlmIChpYTY0X3N5bmNfdXNlcl9yYnMo
Y3VycmVudCwgaW5mby0+c3csIHB0LT5hcl9ic3BzdG9yZSwgdXJic19lbmQpIDwgMCkKKwlpZiAo
aWE2NF9zeW5jX3VzZXJfcmJzKHRhc2ssIGluZm8tPnN3LCBwdC0+YXJfYnNwc3RvcmUsIHVyYnNf
ZW5kKSA8IDApCiAJCXJldHVybjsKIAotCWlhNjRfcGVlayhjdXJyZW50LCBpbmZvLT5zdywgdXJi
c19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAorCWlh
NjRfcGVlayh0YXNrLCBpbmZvLT5zdywgdXJic19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0X2Fk
ZHIoKGxvbmcgKikgdXJic19lbmQpLAogCQkgICZhcl9ybmF0KTsKIAogCS8qCkBAIC0zNjYsNyAr
MzkxLDcgQEAKIH0KIAogdm9pZAotZG9fZHVtcF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAq
aW5mbywgdm9pZCAqYXJnKQorZG9fZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0
YXNrLCBzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmFyZykKIHsKIAllbGZfZnBy
ZWdfdCAqZHN0ID0gYXJnOwogCWludCBpOwpAQCAtMzgxLDIyICs0MDYsNDEgQEAKIAlmb3IgKGkg
PSAyOyBpIDwgMzI7ICsraSkKIAkJdW53X2dldF9mcihpbmZvLCBpLCBkc3QgKyBpKTsKIAotCWlh
NjRfZmx1c2hfZnBoKGN1cnJlbnQpOwotCWlmICgoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgSUE2
NF9USFJFQURfRlBIX1ZBTElEKSAhPSAwKQotCQltZW1jcHkoZHN0ICsgMzIsIGN1cnJlbnQtPnRo
cmVhZC5mcGgsIDk2KjE2KTsKKwlpYTY0X2ZsdXNoX2ZwaCh0YXNrKTsKKwlpZiAoKHRhc2stPnRo
cmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0ZQSF9WQUxJRCkgIT0gMCkKKwkJbWVtY3B5KGRzdCAr
IDMyLCB0YXNrLT50aHJlYWQuZnBoLCA5NioxNik7CiB9CiAKLXZvaWQKLWlhNjRfZWxmX2NvcmVf
Y29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAqcHQsIGVsZl9ncmVnc2V0X3QgZHN0KQoraW50IGR1
bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZWxmX2dyZWdzZXRfdCAqcmVn
cykKIHsKLQl1bndfaW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywgZHN0KTsKKwlzdHJ1Y3QgdW53
X2ZyYW1lX2luZm8gdGNvcmVfaW5mbzsKKworCWlmKGN1cnJlbnQgPT0gdGFzaykgeworCQl1bndf
aW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywgcmVncyk7CisJfQorCWVsc2UgeworCQltZW1zZXQo
JnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9pbmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Js
b2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7CisJCWRvX2NvcHlfdGFza19yZWdzKHRhc2ss
ICZ0Y29yZV9pbmZvLCByZWdzKTsKKwl9CisKKwlyZXR1cm4gMTsKIH0KIAotaW50Ci1kdW1wX2Zw
dSAoc3RydWN0IHB0X3JlZ3MgKnB0LCBlbGZfZnByZWdzZXRfdCBkc3QpCitpbnQgZHVtcF90YXNr
X2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbGZfZnByZWdzZXRfdCAqZHN0KQogewot
CXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7Ci0JcmV0dXJuIDE7CS8qIGYwLWYz
MSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFsd2F5cyByZXR1cm4gMSAqLworCXN0cnVjdCB1bndf
ZnJhbWVfaW5mbyB0Y29yZV9pbmZvOworCisJaWYoY3VycmVudCA9PSB0YXNrKSB7CisJCXVud19p
bml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7CisJfQorCWVsc2UgeworCQltZW1zZXQoJnRj
b3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9pbmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Jsb2Nr
ZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7CisJCWRvX2R1bXBfdGFza19mcHUodGFzaywgJnRj
b3JlX2luZm8sIGRzdCk7CisJfQorCisJcmV0dXJuIDE7IAogfQogCiBhc21saW5rYWdlIGxvbmcK
ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNC4xOC9mcy9iaW5mbXRfZWxmLmMgbGludXgv
ZnMvYmluZm10X2VsZi5jCi0tLSBsaW51eC0yLjQuMTgvZnMvYmluZm10X2VsZi5jCU1vbiBGZWIg
MjUgMTQ6Mzg6MDggMjAwMgorKysgbGludXgvZnMvYmluZm10X2VsZi5jCUZyaSBKdW4gMTQgMTE6
MDA6MjggMjAwMgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4K
ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgorI2lu
Y2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVk
ZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC05NTIs
NyArOTUzLDcgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2lmZGVmIERFQlVHCi1zdGF0aWMg
dm9pZCBkdW1wX3JlZ3MoY29uc3QgY2hhciAqc3RyLCBlbGZfZ3JlZ190ICpyKQorc3RhdGljIHZv
aWQgZHVtcF9yZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxmX2dyZWdzZXRfdCAqcikKIHsKIAlpbnQg
aTsKIAlzdGF0aWMgY29uc3QgY2hhciAqcmVnc1tdID0geyAiZWJ4IiwgImVjeCIsICJlZHgiLCAi
ZXNpIiwgImVkaSIsICJlYnAiLApAQCAtMTAwMCw2ICsxMDAxLDE1NiBAQAogI2RlZmluZSBEVU1Q
X1NFRUsob2ZmKQlcCiAJaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9mZikpKSBcCiAJCWdvdG8gZW5k
X2NvcmVkdW1wOworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9lbGZfaGVhZGVyKHN0cnVjdCBl
bGZoZHIgKmVsZiwgaW50IHNlZ3MpCit7CisJbWVtY3B5KGVsZi0+ZV9pZGVudCwgRUxGTUFHLCBT
RUxGTUFHKTsKKwllbGYtPmVfaWRlbnRbRUlfQ0xBU1NdID0gRUxGX0NMQVNTOworCWVsZi0+ZV9p
ZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOworCWVsZi0+ZV9pZGVudFtFSV9WRVJTSU9OXSA9IEVW
X0NVUlJFTlQ7CisJbWVtc2V0KGVsZi0+ZV9pZGVudCtFSV9QQUQsIDAsIEVJX05JREVOVC1FSV9Q
QUQpOworCisJZWxmLT5lX3R5cGUgPSBFVF9DT1JFOworCWVsZi0+ZV9tYWNoaW5lID0gRUxGX0FS
Q0g7CisJZWxmLT5lX3ZlcnNpb24gPSBFVl9DVVJSRU5UOworCWVsZi0+ZV9lbnRyeSA9IDA7CisJ
ZWxmLT5lX3Bob2ZmID0gc2l6ZW9mKHN0cnVjdCBlbGZoZHIpOworCWVsZi0+ZV9zaG9mZiA9IDA7
CisJZWxmLT5lX2ZsYWdzID0gMDsKKwllbGYtPmVfZWhzaXplID0gc2l6ZW9mKHN0cnVjdCBlbGZo
ZHIpOworCWVsZi0+ZV9waGVudHNpemUgPSBzaXplb2Yoc3RydWN0IGVsZl9waGRyKTsKKwllbGYt
PmVfcGhudW0gPSBzZWdzOworCWVsZi0+ZV9zaGVudHNpemUgPSAwOworCWVsZi0+ZV9zaG51bSA9
IDA7CisJZWxmLT5lX3Noc3RybmR4ID0gMDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBmaWxsX2VsZl9ub3RlX3BoZHIoc3RydWN0IGVsZl9waGRyICpwaGRyLCBpbnQgc3osIG9m
Zl90IG9mZnNldCkKK3sKKwlwaGRyLT5wX3R5cGUgPSBQVF9OT1RFOworCXBoZHItPnBfb2Zmc2V0
ID0gb2Zmc2V0OworCXBoZHItPnBfdmFkZHIgPSAwOworCXBoZHItPnBfcGFkZHIgPSAwOworCXBo
ZHItPnBfZmlsZXN6ID0gc3o7CisJcGhkci0+cF9tZW1zeiA9IDA7CisJcGhkci0+cF9mbGFncyA9
IDA7CisJcGhkci0+cF9hbGlnbiA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgZmlsbF9ub3RlKHN0cnVjdCBtZW1lbGZub3RlICpub3RlLCBjb25zdCBjaGFyICpuYW1lLCBp
bnQgdHlwZSwgCisJCXVuc2lnbmVkIGludCBzeiwgdm9pZCAqZGF0YSkKK3sKKwlub3RlLT5uYW1l
ID0gbmFtZTsKKwlub3RlLT50eXBlID0gdHlwZTsKKwlub3RlLT5kYXRhc3ogPSBzejsKKwlub3Rl
LT5kYXRhID0gZGF0YTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBmaWxsIHVwIGFsbCB0aGUgZmll
bGRzIGluIHByc3RhdHVzIGZyb20gdGhlIGdpdmVuIHRhc2sgc3RydWN0LCBleGNlcHQgcmVnaXN0
ZXJzCisgKiB3aGljaCBuZWVkIHRvIGJlIGZpbGxlZCB1cCBzZXBlcmF0ZWx5LgorICovCitzdGF0
aWMgaW5saW5lIHZvaWQgZmlsbF9wcnN0YXR1cyhzdHJ1Y3QgZWxmX3Byc3RhdHVzICpwcnN0YXR1
cywgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBsb25nIHNpZ25yKSAKK3sKKwlwcnN0YXR1cy0+cHJf
aW5mby5zaV9zaWdubyA9IHByc3RhdHVzLT5wcl9jdXJzaWcgPSBzaWducjsKKwlwcnN0YXR1cy0+
cHJfc2lncGVuZCA9IHAtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsKKwlwcnN0YXR1cy0+cHJfc2ln
aG9sZCA9IHAtPmJsb2NrZWQuc2lnWzBdOworCXByc3RhdHVzLT5wcl9waWQgPSBwLT5waWQ7CisJ
cHJzdGF0dXMtPnByX3BwaWQgPSBwLT5wX3BwdHItPnBpZDsKKwlwcnN0YXR1cy0+cHJfcGdycCA9
IHAtPnBncnA7CisJcHJzdGF0dXMtPnByX3NpZCA9IHAtPnNlc3Npb247CisJcHJzdGF0dXMtPnBy
X3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MocC0+dGltZXMudG1zX3V0aW1lKTsKKwlwcnN0YXR1
cy0+cHJfdXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRtc191dGltZSk7CisJ
cHJzdGF0dXMtPnByX3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MocC0+dGltZXMudG1zX3N0aW1l
KTsKKwlwcnN0YXR1cy0+cHJfc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKHAtPnRpbWVzLnRt
c19zdGltZSk7CisJcHJzdGF0dXMtPnByX2N1dGltZS50dl9zZWMgPSBDVF9UT19TRUNTKHAtPnRp
bWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5wcl9jdXRpbWUudHZfdXNlYyA9IENUX1RPX1VT
RUNTKHAtPnRpbWVzLnRtc19jdXRpbWUpOworCXByc3RhdHVzLT5wcl9jc3RpbWUudHZfc2VjID0g
Q1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3N0aW1lKTsKKwlwcnN0YXR1cy0+cHJfY3N0aW1lLnR2
X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfY3N0aW1lKTsKKwlyZXR1cm47Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX3BzaW5mbyhzdHJ1Y3QgZWxmX3BycHNpbmZvICpwc2lu
Zm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpbnQgaTsKKwkKKwlwc2luZm8tPnByX3Bp
ZCA9IHAtPnBpZDsKKwlwc2luZm8tPnByX3BwaWQgPSBwLT5wX3BwdHItPnBpZDsKKwlwc2luZm8t
PnByX3BncnAgPSBwLT5wZ3JwOworCXBzaW5mby0+cHJfc2lkID0gcC0+c2Vzc2lvbjsKKworCWkg
PSBwLT5zdGF0ZSA/IGZmeih+cC0+c3RhdGUpICsgMSA6IDA7CisJcHNpbmZvLT5wcl9zdGF0ZSA9
IGk7CisJcHNpbmZvLT5wcl9zbmFtZSA9IChpIDwgMCB8fCBpID4gNSkgPyAnLicgOiAiUlNEWlRE
IltpXTsKKwlwc2luZm8tPnByX3pvbWIgPSBwc2luZm8tPnByX3NuYW1lID09ICdaJzsKKwlwc2lu
Zm8tPnByX25pY2UgPSAgcC0+bmljZTsKKwlwc2luZm8tPnByX2ZsYWcgPSBwLT5mbGFnczsKKwlw
c2luZm8tPnByX3VpZCA9IE5FV19UT19PTERfVUlEKHAtPnVpZCk7CisJcHNpbmZvLT5wcl9naWQg
PSBORVdfVE9fT0xEX0dJRChwLT5naWQpOworCXN0cm5jcHkocHNpbmZvLT5wcl9mbmFtZSwgcC0+
Y29tbSwgc2l6ZW9mKHBzaW5mby0+cHJfZm5hbWUpKTsKKwlyZXR1cm47Cit9CisKKy8qIEhlcmUg
aXMgdGhlIHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMgb2YgZWFjaCB0aHJlYWQgaXMgY2FwdHVy
ZWQuICovCitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp
c3Q7CisJc3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRfUFJTVEFUVVMgKi8KKwll
bGZfZnByZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCisjaWZkZWYgRUxGX0NPUkVfQ09Q
WV9YRlBSRUdTCisJZWxmX2ZweHJlZ3NldF90IHhmcHU7CQkvKiBOVF9QUlhGUFJFRyAqLworI2Vu
ZGlmCisJc3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbM107CisJaW50IG51bV9ub3RlczsKK307CisK
Ky8qCisgKiBJbiBvcmRlciB0byBhZGQgdGhlIHNwZWNpZmljIHRocmVhZCBpbmZvcm1hdGlvbiBm
b3IgdGhlIGVsZiBmaWxlIGZvcm1hdCwKKyAqIHdlIG5lZWQgdG8ga2VlcCBhIGxpbmtlZCBsaXN0
IG9mIGV2ZXJ5IHRocmVhZHMgcHJfc3RhdHVzIGFuZCB0aGVuCisgKiBjcmVhdGUgYSBzaW5nbGUg
c2VjdGlvbiBmb3IgdGhlbSBpbiB0aGUgZmluYWwgY29yZSBmaWxlLgorICovCitzdGF0aWMgaW50
IGVsZl9kdW1wX3RocmVhZF9zdGF0dXMobG9uZyBzaWduciwgc3RydWN0IHRhc2tfc3RydWN0ICog
cCwgc3RydWN0IGxpc3RfaGVhZCAqIHRocmVhZF9saXN0KQoreworCisJc3RydWN0IGVsZl90aHJl
YWRfc3RhdHVzICp0OworCWludCBzeiA9IDA7CisKKwl0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBH
RlBfS0VSTkVMKTsKKwlpZiAoIXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgdGhyZWFkIHN0YXR1cy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisK
KwlJTklUX0xJU1RfSEVBRCgmdC0+bGlzdCk7CisJdC0+bnVtX25vdGVzID0gMDsKKworCWZpbGxf
cHJzdGF0dXMoJnQtPnByc3RhdHVzLCBwLCBzaWducik7CisJZWxmX2NvcmVfY29weV90YXNrX3Jl
Z3MocCwgJnQtPnByc3RhdHVzLnByX3JlZyk7CQorCQorCWZpbGxfbm90ZSgmdC0+bm90ZXNbMF0s
ICJDT1JFIiwgTlRfUFJTVEFUVVMsIHNpemVvZih0LT5wcnN0YXR1cyksICYodC0+cHJzdGF0dXMp
KTsKKwl0LT5udW1fbm90ZXMrKzsKKwlzeiArPSBub3Rlc2l6ZSgmdC0+bm90ZXNbMF0pOworCisJ
aWYgKCh0LT5wcnN0YXR1cy5wcl9mcHZhbGlkID0gZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhw
LCAmdC0+ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZ0LT5ub3Rlc1sxXSwgIkNPUkUiLCBOVF9QUkZQ
UkVHLCBzaXplb2YodC0+ZnB1KSwgJih0LT5mcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6
ICs9IG5vdGVzaXplKCZ0LT5ub3Rlc1sxXSk7CisJfQorCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9Y
RlBSRUdTCisJaWYgKGVsZl9jb3JlX2NvcHlfdGFza194ZnByZWdzKHAsICZ0LT54ZnB1KSkgewor
CQlmaWxsX25vdGUoJnQtPm5vdGVzWzJdLCAiTElOVVgiLCBOVF9QUlhGUFJFRywgc2l6ZW9mKHQt
PnhmcHUpLCAmKHQtPnhmcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5vdGVzaXpl
KCZ0LT5ub3Rlc1syXSk7CisJfQorI2VuZGlmCQorCWxpc3RfYWRkKCZ0LT5saXN0LCB0aHJlYWRf
bGlzdCk7CisJcmV0dXJuIHN6OworfQorCiAvKgogICogQWN0dWFsIGR1bXBlcgogICoKQEAgLTEw
MTgsMTIgKzExNjksMjMgQEAKIAlzdHJ1Y3QgZWxmaGRyIGVsZjsKIAlvZmZfdCBvZmZzZXQgPSAw
LCBkYXRhb2ZmOwogCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBjdXJyZW50LT5ybGltW1JMSU1JVF9D
T1JFXS5ybGltX2N1cjsKLQlpbnQgbnVtbm90ZSA9IDQ7Ci0Jc3RydWN0IG1lbWVsZm5vdGUgbm90
ZXNbNF07CisJaW50IG51bW5vdGUgPSA1OworCXN0cnVjdCBtZW1lbGZub3RlIG5vdGVzWzVdOwog
CXN0cnVjdCBlbGZfcHJzdGF0dXMgcHJzdGF0dXM7CS8qIE5UX1BSU1RBVFVTICovCi0JZWxmX2Zw
cmVnc2V0X3QgZnB1OwkJLyogTlRfUFJGUFJFRyAqLwogCXN0cnVjdCBlbGZfcHJwc2luZm8gcHNp
bmZvOwkvKiBOVF9QUlBTSU5GTyAqLworIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisgCUxJU1Rf
SEVBRCh0aHJlYWRfbGlzdCk7CisgCXN0cnVjdCBsaXN0X2hlYWQgKnQ7CisJZWxmX2ZwcmVnc2V0
X3QgZnB1OworI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQUkVHUworCWVsZl9mcHhyZWdzZXRfdCB4
ZnB1OworI2VuZGlmCisJaW50IHRocmVhZF9zdGF0dXNfc2l6ZSA9IDA7CisJCiAKKwkvKiBGaXJz
dCBwYXVzZSBhbGwgcmVsYXRlZCB0aHJlYWRlZCBwcm9jZXNzZXMgKi8KKwl0Y29yZV9zdXNwZW5k
X3RocmVhZHMoKTsKKwkKIAkvKiBmaXJzdCBjb3B5IHRoZSBwYXJhbWV0ZXJzIGZyb20gdXNlciBz
cGFjZSAqLwogCW1lbXNldCgmcHNpbmZvLCAwLCBzaXplb2YocHNpbmZvKSk7CiAJewpAQCAtMTA1
OCwzNCArMTIyMCw0OSBAQAogCQkqKHN0cnVjdCBwdF9yZWdzICopJnByc3RhdHVzLnByX3JlZyA9
ICpyZWdzOwogI2VuZGlmCiAKLQkvKiBub3cgc3RvcCBhbGwgdm0gb3BlcmF0aW9ucyAqLwotCWRv
d25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0Jc2VncyA9IGN1cnJlbnQtPm1tLT5t
YXBfY291bnQ7CisJIC8qIGNhcHR1cmUgdGhlIHN0YXR1cyBvZiBhbGwgb3RoZXIgdGhyZWFkcyAq
LworCWlmIChzaWducikgeworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlmb3JfZWFj
aF90YXNrKHApCisJCQlpZiAoY3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVudCAhPSBwKSB7
CisJCQkJaW50IHN6ID0gZWxmX2R1bXBfdGhyZWFkX3N0YXR1cyhzaWduciwgcCwgJnRocmVhZF9s
aXN0KTsKKwkJCQlpZiAoIXN6KSB7CisJCQkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsK
KwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXRocmVhZF9zdGF0dXNf
c2l6ZSArPSBzejsKKwkJCX0KKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCX0KKwkK
KwltZW1zZXQoJnByc3RhdHVzLCAwLCBzaXplb2YocHJzdGF0dXMpKTsKKwlmaWxsX3Byc3RhdHVz
KCZwcnN0YXR1cywgY3VycmVudCwgc2lnbnIpOworCWVsZl9jb3JlX2NvcHlfcmVncygmcHJzdGF0
dXMucHJfcmVnLCByZWdzKTsKKwkKKwkvKiBXZSBubyBsb25nZXIgc3RvcCBhbGwgdm0gb3BlcmF0
aW9ucyAqLworICAKKwkvKiBUaGlzIGJlY2F1c2UgdGhvc2UgcHJvY2VzZXMgdGhhdCBjb3VsZCBw
b3NzaWJseSAKKwkgKiBjaGFuZ2UgbWFwX2NvdW50IG9yIHRoZSBtbWFwIC8gdm1hIHBhZ2VzIGFy
ZSBub3cgc3VzcGVuZGVkLgorCSAqCisJICogT25seSBwdHJhY2UgY2FuIHRvdWNoIHRoZXNlIG1l
bW9yeSBhZGRyZXNzLCBidXQgaXQgY2Fubm90IGNoYW5nZQorCSAqIHRoZSBtYXBfY291bnQgb3Ig
dGhlIHBhZ2VzLiAgU28gbm8gcG9zc2liaWxpdHkgb2YgY3Jhc2hpbmcgZXhpc3RzIHdoaWxlIGR1
bXBpbmcKKwkgKiB0aGUgbW0tPnZtX25leHQgYXJlYXMgdG8gdGhlIGNvcmUgZmlsZS4KKwkgKgor
CSAqIEdyYWJiaW5nIG1tYXBfc2VtIGluIHRoaXMgZnVuY3Rpb24gaXMgcmlza3kgV1JUIHRoZSB1
c2Ugb2Ygc3VzcGVuZF90aHJlYWRzLgorCSAqIEFsdGhvdWdoIG5vIGxvY2tzIHVwcyBoYXZlIGJl
ZW4gaW5kdWNlZCwgaWYgb25lIG9mIHRoZSBzdXNwZW5kZWQgdGhyZWFkcyB3YXMgCisJICogaW4g
bGluZSBmb3IgdGhlIGN1cnJlbnQtPm1tYXBfc2VtIGFuZCBpZiBnZXRzIGl0IHdoaWxlIG9uIHRo
ZSBQaGFudG9tIHJ1bnF1ZSwKKwkgKiB0aGVuIHdlIHdvdWxkIGRlYWQgbG9jayBpbiB0aGlzIGZ1
bmN0aW9uIGlmIHdlIGNvbnRpbnVlIHRvIGF0dGVtcHQgdG8gZG93bl93cml0ZQorCSAqIGluIHRo
aXMgZnVuY3Rpb24uCisJICovCisgIAlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKIAog
I2lmZGVmIERFQlVHCiAJcHJpbnRrKCJlbGZfY29yZV9kdW1wOiAlZCBzZWdzICVsdSBsaW1pdFxu
Iiwgc2VncywgbGltaXQpOwogI2VuZGlmCiAKIAkvKiBTZXQgdXAgaGVhZGVyICovCi0JbWVtY3B5
KGVsZi5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpOwotCWVsZi5lX2lkZW50W0VJX0NMQVNTXSA9
IEVMRl9DTEFTUzsKLQllbGYuZV9pZGVudFtFSV9EQVRBXSA9IEVMRl9EQVRBOwotCWVsZi5lX2lk
ZW50W0VJX1ZFUlNJT05dID0gRVZfQ1VSUkVOVDsKLQltZW1zZXQoZWxmLmVfaWRlbnQrRUlfUEFE
LCAwLCBFSV9OSURFTlQtRUlfUEFEKTsKLQotCWVsZi5lX3R5cGUgPSBFVF9DT1JFOwotCWVsZi5l
X21hY2hpbmUgPSBFTEZfQVJDSDsKLQllbGYuZV92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKLQllbGYu
ZV9lbnRyeSA9IDA7Ci0JZWxmLmVfcGhvZmYgPSBzaXplb2YoZWxmKTsKLQllbGYuZV9zaG9mZiA9
IDA7Ci0JZWxmLmVfZmxhZ3MgPSAwOwotCWVsZi5lX2Voc2l6ZSA9IHNpemVvZihlbGYpOwotCWVs
Zi5lX3BoZW50c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwotCWVsZi5lX3BobnVtID0g
c2VncysxOwkJLyogSW5jbHVkZSBub3RlcyAqLwotCWVsZi5lX3NoZW50c2l6ZSA9IDA7Ci0JZWxm
LmVfc2hudW0gPSAwOwotCWVsZi5lX3Noc3RybmR4ID0gMDsKKwlmaWxsX2VsZl9oZWFkZXIoJmVs
Ziwgc2VncysxKTsgLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24qLwogCiAJZnMgPSBnZXRfZnMo
KTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKQEAgLTExMDIsNjQgKzEyNzksMzQgQEAKIAkgKiB3aXRo
IGluZm8gZnJvbSB0aGVpciAvcHJvYy4KIAkgKi8KIAotCW5vdGVzWzBdLm5hbWUgPSAiQ09SRSI7
Ci0Jbm90ZXNbMF0udHlwZSA9IE5UX1BSU1RBVFVTOwotCW5vdGVzWzBdLmRhdGFzeiA9IHNpemVv
ZihwcnN0YXR1cyk7Ci0Jbm90ZXNbMF0uZGF0YSA9ICZwcnN0YXR1czsKLQlwcnN0YXR1cy5wcl9p
bmZvLnNpX3NpZ25vID0gcHJzdGF0dXMucHJfY3Vyc2lnID0gc2lnbnI7Ci0JcHJzdGF0dXMucHJf
c2lncGVuZCA9IGN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsKLQlwcnN0YXR1cy5wcl9z
aWdob2xkID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07Ci0JcHNpbmZvLnByX3BpZCA9IHByc3Rh
dHVzLnByX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlwc2luZm8ucHJfcHBpZCA9IHByc3RhdHVzLnBy
X3BwaWQgPSBjdXJyZW50LT5wX3BwdHItPnBpZDsKLQlwc2luZm8ucHJfcGdycCA9IHByc3RhdHVz
LnByX3BncnAgPSBjdXJyZW50LT5wZ3JwOwotCXBzaW5mby5wcl9zaWQgPSBwcnN0YXR1cy5wcl9z
aWQgPSBjdXJyZW50LT5zZXNzaW9uOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3NlYyA9IENUX1RP
X1NFQ1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5wcl91dGltZS50dl91
c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX3V0aW1lKTsKLQlwcnN0YXR1cy5w
cl9zdGltZS50dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19zdGltZSk7Ci0J
cHJzdGF0dXMucHJfc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRt
c19zdGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVu
dC0+dGltZXMudG1zX2N1dGltZSk7Ci0JcHJzdGF0dXMucHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9U
T19VU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9jc3RpbWUu
dHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3N0aW1lKTsKLQlwcnN0YXR1
cy5wcl9jc3RpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jc3Rp
bWUpOwotCiAjaWZkZWYgREVCVUcKIAlkdW1wX3JlZ3MoIlBhc3NlZCBpbiByZWdzIiwgKGVsZl9n
cmVnX3QgKilyZWdzKTsKIAlkdW1wX3JlZ3MoInByc3RhdHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAq
KSZwcnN0YXR1cy5wcl9yZWcpOwogI2VuZGlmCiAKLQlub3Rlc1sxXS5uYW1lID0gIkNPUkUiOwot
CW5vdGVzWzFdLnR5cGUgPSBOVF9QUlBTSU5GTzsKLQlub3Rlc1sxXS5kYXRhc3ogPSBzaXplb2Yo
cHNpbmZvKTsKLQlub3Rlc1sxXS5kYXRhID0gJnBzaW5mbzsKLQlpID0gY3VycmVudC0+c3RhdGUg
PyBmZnoofmN1cnJlbnQtPnN0YXRlKSArIDEgOiAwOwotCXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0J
cHNpbmZvLnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwot
CXBzaW5mby5wcl96b21iID0gcHNpbmZvLnByX3NuYW1lID09ICdaJzsKLQlwc2luZm8ucHJfbmlj
ZSA9IGN1cnJlbnQtPm5pY2U7Ci0JcHNpbmZvLnByX2ZsYWcgPSBjdXJyZW50LT5mbGFnczsKLQlw
c2luZm8ucHJfdWlkID0gTkVXX1RPX09MRF9VSUQoY3VycmVudC0+dWlkKTsKLQlwc2luZm8ucHJf
Z2lkID0gTkVXX1RPX09MRF9HSUQoY3VycmVudC0+Z2lkKTsKLQlzdHJuY3B5KHBzaW5mby5wcl9m
bmFtZSwgY3VycmVudC0+Y29tbSwgc2l6ZW9mKHBzaW5mby5wcl9mbmFtZSkpOwotCi0Jbm90ZXNb
Ml0ubmFtZSA9ICJDT1JFIjsKLQlub3Rlc1syXS50eXBlID0gTlRfVEFTS1NUUlVDVDsKLQlub3Rl
c1syXS5kYXRhc3ogPSBzaXplb2YoKmN1cnJlbnQpOwotCW5vdGVzWzJdLmRhdGEgPSBjdXJyZW50
OwotCi0JLyogVHJ5IHRvIGR1bXAgdGhlIEZQVS4gKi8KLQlwcnN0YXR1cy5wcl9mcHZhbGlkID0g
ZHVtcF9mcHUgKHJlZ3MsICZmcHUpOwotCWlmICghcHJzdGF0dXMucHJfZnB2YWxpZCkKLQl7Ci0J
CW51bW5vdGUtLTsKLQl9Ci0JZWxzZQotCXsKLQkJbm90ZXNbM10ubmFtZSA9ICJDT1JFIjsKLQkJ
bm90ZXNbM10udHlwZSA9IE5UX1BSRlBSRUc7Ci0JCW5vdGVzWzNdLmRhdGFzeiA9IHNpemVvZihm
cHUpOwotCQlub3Rlc1szXS5kYXRhID0gJmZwdTsKLQl9CisJZmlsbF9ub3RlKCZub3Rlc1swXSwg
IkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHByc3RhdHVzKSwgJnByc3RhdHVzKTsKKwkKKwlm
aWxsX3BzaW5mbygmcHNpbmZvLCBjdXJyZW50KTsKKwlmaWxsX25vdGUoJm5vdGVzWzFdLCAiQ09S
RSIsIE5UX1BSUFNJTkZPLCBzaXplb2YocHNpbmZvKSwgJnBzaW5mbyk7CiAJCisJZmlsbF9ub3Rl
KCZub3Rlc1syXSwgIkNPUkUiLCBOVF9UQVNLU1RSVUNULCBzaXplb2YoKmN1cnJlbnQpLCBjdXJy
ZW50KTsKKyAgCisgIAkvKiBUcnkgdG8gZHVtcCB0aGUgRlBVLiAqLworCWlmICgocHJzdGF0dXMu
cHJfZnB2YWxpZCA9IGVsZl9jb3JlX2NvcHlfdGFza19mcHJlZ3MoY3VycmVudCwgJmZwdSkpKSB7
CisJCWZpbGxfbm90ZSgmbm90ZXNbM10sICJDT1JFIiwgTlRfUFJGUFJFRywgc2l6ZW9mKGZwdSks
ICZmcHUpOworCX0gZWxzZSB7CisJCS0tbnVtbm90ZTsKKyAJfQorI2lmZGVmIEVMRl9DT1JFX0NP
UFlfWEZQUkVHUworCWlmIChlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhjdXJyZW50LCAmeGZw
dSkpIHsKKwkJZmlsbF9ub3RlKCZub3Rlc1s0XSwgIkxJTlVYIiwgTlRfUFJYRlBSRUcsIHNpemVv
Zih4ZnB1KSwgJnhmcHUpOworCX0gZWxzZSB7CisJCS0tbnVtbm90ZTsKKwl9CisjZWxzZQorCW51
bW5vdGUgLS07CisjZW5kaWYJCisgIAogCS8qIFdyaXRlIG5vdGVzIHBoZHIgZW50cnkgKi8KIAl7
CiAJCXN0cnVjdCBlbGZfcGhkciBwaGRyOwpAQCAtMTE2NywxNyArMTMxNCwxMSBAQAogCiAJCWZv
cihpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKIAkJCXN6ICs9IG5vdGVzaXplKCZub3Rlc1tpXSk7
CisJCQorCQlzeiArPSB0aHJlYWRfc3RhdHVzX3NpemU7CiAKLQkJcGhkci5wX3R5cGUgPSBQVF9O
T1RFOwotCQlwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwotCQlwaGRyLnBfdmFkZHIgPSAwOwotCQlw
aGRyLnBfcGFkZHIgPSAwOwotCQlwaGRyLnBfZmlsZXN6ID0gc3o7Ci0JCXBoZHIucF9tZW1zeiA9
IDA7Ci0JCXBoZHIucF9mbGFncyA9IDA7Ci0JCXBoZHIucF9hbGlnbiA9IDA7Ci0KLQkJb2Zmc2V0
ICs9IHBoZHIucF9maWxlc3o7CisJCWZpbGxfZWxmX25vdGVfcGhkcigmcGhkciwgc3osIG9mZnNl
dCk7CisJCW9mZnNldCArPSBzejsKIAkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsK
IAl9CiAKQEAgLTEyMDYsMTAgKzEzNDcsMTkgQEAKIAkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9m
KHBoZHIpKTsKIAl9CiAKKyAJLyogd3JpdGUgb3V0IHRoZSBub3RlcyBzZWN0aW9uICovCiAJZm9y
KGkgPSAwOyBpIDwgbnVtbm90ZTsgaSsrKQogCQlpZiAoIXdyaXRlbm90ZSgmbm90ZXNbaV0sIGZp
bGUpKQogCQkJZ290byBlbmRfY29yZWR1bXA7CiAKKwkvKiB3cml0ZSBvdXQgdGhlIHRocmVhZCBz
dGF0dXMgbm90ZXMgc2VjdGlvbiAqLworCWxpc3RfZm9yX2VhY2godCwgJnRocmVhZF9saXN0KSB7
CisJCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdG1wID0gbGlzdF9lbnRyeSh0LCBzdHJ1Y3Qg
ZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpOworCQlmb3IgKGkgPSAwOyBpIDwgdG1wLT5udW1fbm90
ZXM7IGkrKykKKwkJCWlmICghd3JpdGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBmaWxlKSkKKwkJCQln
b3RvIGVuZF9jb3JlZHVtcDsKKwl9CisgCiAJRFVNUF9TRUVLKGRhdGFvZmYpOwogCiAJZm9yKHZt
YSA9IGN1cnJlbnQtPm1tLT5tbWFwOyB2bWEgIT0gTlVMTDsgdm1hID0gdm1hLT52bV9uZXh0KSB7
CkBAIC0xMjUzLDExICsxNDAzLDIxIEBACiAJCSAgICAgICAob2ZmX3QpIGZpbGUtPmZfcG9zLCBv
ZmZzZXQpOwogCX0KIAotIGVuZF9jb3JlZHVtcDoKK2VuZF9jb3JlZHVtcDoKIAlzZXRfZnMoZnMp
OwotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCitjbGVhbnVwOgorCXdoaWxl
KCFsaXN0X2VtcHR5KCZ0aHJlYWRfbGlzdCkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdG1wID0g
dGhyZWFkX2xpc3QubmV4dDsKKwkJbGlzdF9kZWwodG1wKTsKKwkJa2ZyZWUobGlzdF9lbnRyeSh0
bXAsIHN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cywgbGlzdCkpOworCX0KKworCXRjb3JlX3Jlc3Vt
ZV90aHJlYWRzKCk7CisKIAlyZXR1cm4gaGFzX2R1bXBlZDsKIH0KKwogI2VuZGlmCQkvKiBVU0Vf
RUxGX0NPUkVfRFVNUCAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2VsZl9iaW5mbXQodm9p
ZCkKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNC4xOC9pbmNsdWRlL2FzbS1pMzg2L2Vs
Zi5oIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKLS0tIGxpbnV4LTIuNC4xOC9pbmNsdWRl
L2FzbS1pMzg2L2VsZi5oCVRodSBOb3YgMjIgMTQ6NDg6MjkgMjAwMQorKysgbGludXgvaW5jbHVk
ZS9hc20taTM4Ni9lbGYuaAlGcmkgSnVuIDE0IDExOjAwOjI4IDIwMDIKQEAgLTk5LDYgKzk5LDIx
IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJj
czIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKworCitleHRl
cm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRf
dCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVs
Zl9mcHJlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZXh0ZW5kZWRfZnB1IChzdHJ1
Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgKik7CisKKyNkZWZpbmUg
RUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZfcmVncykgZHVtcF90YXNrX3JlZ3ModHNr
LCBlbGZfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdz
KSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9Y
RlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFza19leHRlbmRlZF9mcHUodHNrLCBlbGZf
eGZwcmVncykKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIGR1bXBfc21wX3VubGF6
eV9mcHUodm9pZCk7CisjZGVmaW5lIEVMRl9DT1JFX1NZTkMgZHVtcF9zbXBfdW5sYXp5X2ZwdQor
I2VuZGlmCisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIu
NC4xOC9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oIGxpbnV4L2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgK
LS0tIGxpbnV4LTIuNC4xOC9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCVR1ZSBKdWwgMTEgMTg6NDM6
NDUgMjAwMAorKysgbGludXgvaW5jbHVkZS9hc20taWE2NC9lbGYuaAlGcmkgSnVuIDE0IDExOjAz
OjAzIDIwMDIKQEAgLTYyLDEyICs2MiwxNiBAQAogI2RlZmluZSBFTEZfTkdSRUcJMTI4CS8qIHdl
IHJlYWxseSBuZWVkIGp1c3QgNzIgYnV0IGxldCdzIGxlYXZlIHNvbWUgaGVhZHJvb20uLi4gKi8K
ICNkZWZpbmUgRUxGX05GUFJFRwkxMjgJLyogZjAgYW5kIGYxIGNvdWxkIGJlIG9taXR0ZWQsIGJ1
dCBzbyB3aGF0Li4uICovCiAKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnB4cmVnc2V0X3Q7
CisKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwogdHlwZWRlZiBlbGZfZ3JlZ190
IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKIAogdHlwZWRlZiBzdHJ1Y3QgaWE2NF9mcHJlZyBl
bGZfZnByZWdfdDsKIHR5cGVkZWYgZWxmX2ZwcmVnX3QgZWxmX2ZwcmVnc2V0X3RbRUxGX05GUFJF
R107CiAKKworCiBzdHJ1Y3QgcHRfcmVnczsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbi4uLiAqLwog
ZXh0ZXJuIHZvaWQgaWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpzcmMs
IGVsZl9ncmVnc2V0X3QgZHN0KTsKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKF9kZXN0LF9y
ZWdzKQlpYTY0X2VsZl9jb3JlX2NvcHlfcmVncyhfcmVncywgX2Rlc3QpOwpAQCAtODMsNiArODcs
MTMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBp
YmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorCitleHRl
cm4gaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3JlZ3NldF90
ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxm
X2ZwcmVnc2V0X3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBl
bGZfZ3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX2dyZWdzKQorI2RlZmluZSBFTEZfQ09S
RV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnBy
ZWdzKQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9FTEZfSCAqLwpkaWZmIC11ck4g
LVggZG9udGRpZmYgbGludXgtMi40LjE4L2luY2x1ZGUvbGludXgvZWxmLmggbGludXgvaW5jbHVk
ZS9saW51eC9lbGYuaAotLS0gbGludXgtMi40LjE4L2luY2x1ZGUvbGludXgvZWxmLmgJVGh1IE5v
diAyMiAxNDo0ODoyOSAyMDAxCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2VsZi5oCUZyaSBKdW4g
MTQgMTE6MDA6MjggMjAwMgpAQCAtNTc2LDYgKzU3Niw5IEBACiAjZGVmaW5lIE5UX1BSUFNJTkZP
CTMKICNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0CiAjZGVmaW5lIE5UX1BSRlBYUkVHCTIwCisjZGVm
aW5lIE5UX1BSWEZQUkVHICAgICAweDQ2ZTYyYjdmCS8qIG5vdGUgbmFtZSBtdXN0IGJlICJMSU5V
WCIgYXMgcGVyIEdEQiAqLworCQkJCQkvKiBmcm9tIGdkYjUuMS9pbmNsdWRlL2VsZi9jb21tb24u
aCAqLworCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCiB0eXBlZGVm
IHN0cnVjdCBlbGYzMl9ub3RlIHsKQEAgLTYwNiw2ICs2MDksNSBAQAogI2RlZmluZSBlbGZfbm90
ZQllbGY2NF9ub3RlCiAKICNlbmRpZgotCiAKICNlbmRpZiAvKiBfTElOVVhfRUxGX0ggKi8KZGlm
ZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNC4xOC9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaCBs
aW51eC9pbmNsdWRlL2xpbnV4L2VsZmNvcmUuaAotLS0gbGludXgtMi40LjE4L2luY2x1ZGUvbGlu
dXgvZWxmY29yZS5oCVRodSBOb3YgMjIgMTQ6NDk6MDIgMjAwMQorKysgbGludXgvaW5jbHVkZS9s
aW51eC9lbGZjb3JlLmgJRnJpIEp1biAxNCAxMTowMDoyOCAyMDAyCkBAIC04Niw0ICs4Niw2NiBA
QAogI2RlZmluZSBQUkFSR1NaIEVMRl9QUkFSR1NaIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5F
TF9fCitzdGF0aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3Qg
KmVsZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlf
UkVHUworCUVMRl9DT1JFX0NPUFlfUkVHUygoKmVsZnJlZ3MpLCByZWdzKQorI2Vsc2UKKwlpZiAo
c2l6ZW9mKGVsZl9ncmVnc2V0X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpIHsKKwkJcHJp
bnRrKCJzaXplb2YoZWxmX2dyZWdzZXRfdCkgKCVsZCkgIT0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdz
KSAoJWxkKVxuIiwKKwkJCShsb25nKXNpemVvZihlbGZfZ3JlZ3NldF90KSwgKGxvbmcpc2l6ZW9m
KHN0cnVjdCBwdF9yZWdzKSk7CisJfSBlbHNlCisJCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdz
ID0gKnJlZ3M7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90
YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQor
eworI2lmZGVmIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCisJCisJcmV0dXJuIEVMRl9DT1JFX0NP
UFlfVEFTS19SRUdTKHQsIGVsZnJlZ3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2V4dGVy
biBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOworCitz
dGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKHN0cnVjdCB0YXNrX3N0
cnVjdCAqdCwgZWxmX2ZwcmVnc2V0X3QgKmZwdSkKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX0ZQ
UkVHUworCXJldHVybiBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0LCBmcHUpOworI2Vsc2UKKwlyZXR1
cm4gZHVtcF9mcHUoTlVMTCwgZnB1KTsKKyNlbmRpZgorfQorCisjaWZkZWYgRUxGX0NPUkVfQ09Q
WV9YRlBSRUdTCitzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhz
dHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9mcHhyZWdzZXRfdCAqeGZwdSkKK3sKKwlyZXR1cm4g
RUxGX0NPUkVfQ09QWV9YRlBSRUdTKHQsIHhmcHUpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05G
SUdfU01QCisvKgorICogdHJpdmlhbCBmdW5jdGlvbiB1c2VkIGZvciBTTVAgQ1BVIHN5bmNocm9u
aXphdGlvbi4KKyAqIEl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHRj
b3JlX2RvX25vdGhpbmcodm9pZCAqdmFyKQoreworCisjaWZkZWYgRUxGX0NPUkVfU1lOQworCUVM
Rl9DT1JFX1NZTkMoKTsKKyNlbmRpZgorCisJcmV0dXJuOworfQorCisjZW5kaWYKKworCisjZW5k
aWYgLyogX19LRVJORUxfXyAqLworCisKICNlbmRpZiAvKiBfTElOVVhfRUxGQ09SRV9IICovCmRp
ZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjQuMTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIGxp
bnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaAotLS0gbGludXgtMi40LjE4L2luY2x1ZGUvbGludXgv
c2NoZWQuaAlGcmkgRGVjIDIxIDEyOjQyOjAzIDIwMDEKKysrIGxpbnV4L2luY2x1ZGUvbGludXgv
c2NoZWQuaAlGcmkgSnVuIDE0IDExOjAwOjI4IDIwMDIKQEAgLTEzMiw2ICsxMzIsMTQgQEAKIAog
I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKKworLyogZnVuY3Rpb25zIGZvciBwYXVzaW5n
IGFuZCByZXN1bW1pbmcgZnVuY3Rpb25zIAorICogY29tbW9uIG1tJ3Mgd2l0aG91dCB1c2luZyBz
aWduYWxzLiAgVGhlc2UgYXJlIHVzZWQKKyAqIGJ5IHRoZSBtdWx0aXRocmVhZGVkIGVsZiBjb3Jl
IGR1bXAgY29kZSBpbiBiaW5mbXRfZWxmLmMqLworZXh0ZXJuIHZvaWQgdGNvcmVfc3VzcGVuZF90
aHJlYWRzKCB2b2lkICk7CitleHRlcm4gdm9pZCB0Y29yZV9yZXN1bWVfdGhyZWFkcyggdm9pZCAp
OworCisKIC8qCiAgKiBUaGlzIHNlcmlhbGl6ZXMgInNjaGVkdWxlKCkiIGFuZCBhbHNvIHByb3Rl
Y3RzCiAgKiB0aGUgcnVuLXF1ZXVlIGZyb20gZGVsZXRpb25zL21vZGlmaWNhdGlvbnMgKGJ1dApk
aWZmIC11ck4gLVggZG9udGRpZmYgbGludXgtMi40LjE4L2tlcm5lbC9zY2hlZC5jIGxpbnV4L2tl
cm5lbC9zY2hlZC5jCi0tLSBsaW51eC0yLjQuMTgva2VybmVsL3NjaGVkLmMJRnJpIERlYyAyMSAx
Mjo0MjowNCAyMDAxCisrKyBsaW51eC9rZXJuZWwvc2NoZWQuYwlGcmkgSnVuIDE0IDExOjAwOjI4
IDIwMDIKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1
ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgorCiBl
eHRlcm4gdm9pZCB0aW1lcl9iaCh2b2lkKTsKIGV4dGVybiB2b2lkIHRxdWV1ZV9iaCh2b2lkKTsK
IGV4dGVybiB2b2lkIGltbWVkaWF0ZV9iaCh2b2lkKTsKQEAgLTEyMSw3ICsxMjMsNyBAQAogI2Vs
c2UKIAogI2RlZmluZSBpZGxlX3Rhc2soY3B1KSAoJmluaXRfdGFzaykKLSNkZWZpbmUgY2FuX3Nj
aGVkdWxlKHAsY3B1KSAoMSkKKyNkZWZpbmUgY2FuX3NjaGVkdWxlKHAsY3B1KSAoKHApLT5jcHVz
X2FsbG93ZWQgJiAoMSA8PCBjcHUpKQogCiAjZW5kaWYKIApAQCAtODUxLDYgKzg1MywxMDggQEAK
IH0KIAogdm9pZCBzY2hlZHVsaW5nX2Z1bmN0aW9uc19lbmRfaGVyZSh2b2lkKSB7IH0KKyAgCisv
KgorICogbmVlZGVkIGZvciBhY2N1cmF0ZSBjb3JlIGR1bXBzIG9mIG11bHRpLXRocmVhZGVkIGFw
cGxpY2F0aW9ucy4KKyAqIHNlZSBiaW5mbXRfZWxmLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisg
Ki8KK3N0YXRpYyB2b2lkIHJlc2NoZWR1bGVfb3RoZXJfY3B1cyh2b2lkKQoreworI2lmZGVmIENP
TkZJR19TTVAKKwlpbnQgaSwgY3B1OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCWZvcihp
PTA7IGk8IHNtcF9udW1fY3B1czsgaSsrKSB7CisJCWNwdSA9IGNwdV9sb2dpY2FsX21hcChpKTsK
KwkJcCA9IGNwdV9jdXJyKGNwdSk7CisJCWlmIChwLT5wcm9jZXNzb3IgIT0gc21wX3Byb2Nlc3Nv
cl9pZCgpKSB7CisJCQlwLT5uZWVkX3Jlc2NoZWQgPSAxOworCQkJc21wX3NlbmRfcmVzY2hlZHVs
ZShwLT5wcm9jZXNzb3IpOworCQl9CisgCX0KKyNlbmRpZgkKKwlyZXR1cm47Cit9CisKKy8qIGZ1
bmN0aW9ucyBmb3IgcGF1c2luZyBhbmQgcmVzdW1taW5nIGZ1bmN0aW9ucyB3aXRoIG91dCB1c2lu
ZyBzaWduYWxzICovCit2b2lkIHRjb3JlX3N1c3BlbmRfdGhyZWFkcyh2b2lkKQoreworCXN0cnVj
dCB0YXNrX3N0cnVjdCAqcDsKKworLy8KKy8vIGdyYWIgYWxsIHRoZSBycV9sb2Nrcy4KKy8vIGN1
cnJlbnQgaXMgdGhlIHByb2Nlc3MgZHVtcGluZyBjb3JlCisvLyAgCisKKwlkb3duX3dyaXRlKCZj
dXJyZW50LT5tbS0+bW1hcF9zZW0pOworCS8vIGF2b2lkIHBvdGVudGlhbCByYWNlIG9uID4yIHdh
eSBTTVAgaWYgMyBvciBtb3JlIHRocmVhZCBwcm9jcworCS8vIGR1bXAgY29yZSBhdCB0aGUgc2Ft
ZSB0aW1lLgorCQorCisJLyoKKwkgKiBicnV0ZSBmb3JjZSBtZXRob2QgdXNlcyB0aGUgcnVucXVl
dWVfbG9jayBjb250ZW50aW9uLiAgR3JhYiB0aGlzIGxvY2ssIGFuZAorCSAqIGZvcmNlIGEgc2No
ZWR1bGUgY2FsbCBvbiBhbGwgdGhlIG90aGVyIENQVSdzIHRvIGdldCB0aGVtIHNwaW5uaW5nLgor
CSAqIHNwaW5fbG9ja19wcmVmZXRjaCgmcnVucXVldWVfbG9jaykgPC0tIGlzIHRoaXMgbmVlZGVk
PworCSAqLworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcnVu
cXVldWVfbG9jayk7CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJY3VycmVudC0+Y3B1c19hbGxv
d2VkID0gMVVMIDw8IGN1cnJlbnQtPnByb2Nlc3NvcjsKKwkvLyBwcmV2ZW50IG1pZ3JhaW9uIG9m
IGR1bXBpbmcgcHJvY2VzcyBtYWtpbmcgbGlmZSBjb21wbGljYXRlZC4KKwl0YXNrX3VubG9jayhj
dXJyZW50KTsKKwkJCQorCXJlc2NoZWR1bGVfb3RoZXJfY3B1cygpOworCS8vIHRoaXMgaXMgYW4g
b3B0aW9uYWwgSVBJLCBidXQgaXQgbWFrZXMgZm9yIHRoZSBtb3N0IGFjY3VyYXRlIGNvcmUgZmls
ZXMgcG9zc2libGUuCisJCQorCWZvcl9lYWNoX3Rhc2socCkKKwkJaWYgKGN1cnJlbnQtPm1tID09
IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJdGFza19sb2NrKHApOworCQkJcC0+Y3B1c19h
bGxvd2VkID0gMFVMOworCQkJdGFza191bmxvY2socCk7CisJCQkvKiAKKwkJCSAqIGZvcmNlcyB5
ZWlsZCBhbmQga2VlcHMgd2FraW5nIHByb2Nlc3MgZnJvbSBnZXR0aW5nIHNjaGVkdWxlZAorCQkJ
ICogaW4uIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlc2UgcHJvY2Vzc2VzIGdldHRpbmcgc3dhcHBl
ZCBvdXQgYW5kCisJCQkgKiBub3Qgc3dhcHBlZCBpbiBieSB0aGUgc2NoZWR1bGVyIGlmIHRoZXkg
aGF2ZSBiZWVuIHNsZWVwaW5nLgorCQkJICovCisJCX0KKwkJCisJc3Bpbl91bmxvY2tfaXJxKCZy
dW5xdWV1ZV9sb2NrKTsKKwkKKwkvKiBsZXQgdGhlbSBhbGwgcnVuIGFnYWluLi4gKi8KKwlyZWFk
X3VubG9jaygmdGFza2xpc3RfbG9jayk7CisKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBf
c2VtKTsKKwkKKyNpZmRlZiBDT05GSUdfU01QCisJLyogCisJICogbm93IHdlIHN5bmNyb25pemUg
b24gYWxsIHRoZSBDUFUncyB0byBtYWtlIHN1cmUKKwkgKiBub25lIG9mIHRoZSBvdGhlciB0aHJl
YWQgcHJvY2Vzc2VzIGFyZSBydW5uaW5nIGluIAorCSAqIGFuZCBhbnkgbGF6eSBmcHUgcmVnaXN0
ZXIgZGF0YSBoYXMgYmVlbiBjYXB0dXJlZCAKKwkgKiBmcm9tIHVzZXIgc3BhY2UgYmVmb3JlIHdl
IHByb2NlZWQuCisJICovCisJc21wX2NhbGxfZnVuY3Rpb24odGNvcmVfZG9fbm90aGluZywgTlVM
TCwgMSwxKTsKKyNlbmRpZgorCQorcmV0dXJuOworfQorCit2b2lkIHRjb3JlX3Jlc3VtZV90aHJl
YWRzKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJcmVhZF9sb2NrKCZ0YXNr
bGlzdF9sb2NrKTsKKwlmb3JfZWFjaF90YXNrKHApCisJCWlmIChjdXJyZW50LT5tbSA9PSBwLT5t
bSAmJiBjdXJyZW50ICE9IHApeyAKKwkJCXRhc2tfbG9jayhwKTsKKwkJCXAtPmNwdXNfYWxsb3dl
ZCA9IDFVTCA8PCBjdXJyZW50LT5wcm9jZXNzb3I7CisJCQl0YXNrX3VubG9jayhwKTsKKwkJfQor
CXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCXJldHVybjsKK30KKwogCiAjaWZuZGVm
IF9fYWxwaGFfXwogCg==

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