[PATCH] Multi-threaded core dumps for 2.5.21.

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


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

Attached is a re-base of the 2.5.18 patch posted last week.

This patch has been tested on my SMP system and seems very stable, so far. I
would like very much to see this feature added to the 2.5.x kernels and more
milage given to it.

For ISV's not having the ability to create core dumps for pthread
applications is a strong justification for not using Linux. Now is a good
time for Linux support the ISV's WRT core files for multi-threaded
applications.

To use the core files from multi-threaded applications, created with this
patch you may need to strip the objects from /lib/libpthread. For my system
'strip /lib/libpthread-0.9.so makes things good, YMMV.

Please apply this patch.

--mgross

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

ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYva2VybmVsL2kzODcu
YyBsaW51eDI1MjEudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9pMzg3LmMKLS0tIGxpbnV4LTIuNS4y
MS9hcmNoL2kzODYva2VybmVsL2kzODcuYwlTdW4gSnVuICA5IDAxOjMxOjMyIDIwMDIKKysrIGxp
bnV4MjUyMS50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwlGcmkgSnVuIDE0IDE1OjIyOjMy
IDIwMDIKQEAgLTUyOCwzICs1MjgsMzYgQEAKIAogCXJldHVybiBmcHZhbGlkOwogfQorCitpbnQg
ZHVtcF90YXNrX2ZwdSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2kzODdf
c3RydWN0ICpmcHUgKQoreworCWludCBmcHZhbGlkOworCisJZnB2YWxpZCA9IHRzay0+dXNlZF9t
YXRoOworCWlmICggZnB2YWxpZCApIHsKKwkJaWYgKHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1
KCB0c2sgKTsKKwkJaWYgKCBjcHVfaGFzX2Z4c3IgKSB7CisJCQljb3B5X2ZwdV9meHNhdmUoIHRz
aywgZnB1ICk7CisJCX0gZWxzZSB7CisJCQljb3B5X2ZwdV9mc2F2ZSggdHNrLCBmcHUgKTsKKwkJ
fQorCX0KKworCXJldHVybiBmcHZhbGlkOworfQorCitpbnQgZHVtcF90YXNrX2V4dGVuZGVkX2Zw
dSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0ICpmcHUg
KQoreworCWludCBmcHZhbGlkOworCQorCWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aCAmJiBjcHVf
aGFzX2Z4c3I7CisJaWYgKCBmcHZhbGlkICkgeworCQlpZiAodHNrID09IGN1cnJlbnQpIHVubGF6
eV9mcHUoIHRzayApOworCQltZW1jcHkoIGZwdSwgJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlLAor
CQlzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpICk7CisJfQorCQorCXJldHVybiBmcHZh
bGlkOworfQorCisKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYv
a2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjEudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNz
LmMKLS0tIGxpbnV4LTIuNS4yMS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwlTdW4gSnVuICA5
IDAxOjI2OjIyIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9hcmNoL2kzODYva2VybmVsL3Byb2Nl
c3MuYwlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTYxMCw2ICs2MTAsMjQgQEAKIAogCWR1
bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+aTM4Nyk7CiB9CisvKiAKKyAq
IENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBydW5u
aW5nIChpbiB1c2VyIHNwYWNlKQorICovCisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgoraW50
IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAgZWxmX2dyZWdzZXRfdCAq
cmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisJCisJcHRyZWdzID0gKihzdHJ1Y3Qg
cHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0c2stPnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUg
LSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlwdHJlZ3MueGNzICY9IDB4ZmZmZjsKKwlwdHJl
Z3MueGRzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueGVzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueHNzICY9
IDB4ZmZmZjsKKworCWVsZl9jb3JlX2NvcHlfcmVncyhyZWdzLCAmcHRyZWdzKTsKKworCXJldHVy
biAxOworfQogCiAvKgogICogVGhpcyBzcGVjaWFsIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGxvYWQg
YSBkZWJ1Z2dpbmcgcmVnaXN0ZXIKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9h
cmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjEudGNvcmUvYXJjaC9pYTY0L2tlcm5l
bC9wcm9jZXNzLmMKLS0tIGxpbnV4LTIuNS4yMS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwlT
dW4gSnVuICA5IDAxOjI5OjUwIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9hcmNoL2lhNjQva2Vy
bmVsL3Byb2Nlc3MuYwlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTM3Miw2ICszNzIsMzEg
QEAKIHZvaWQKIGRvX2NvcHlfcmVncyAoc3RydWN0IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lk
ICphcmcpCiB7CisJZG9fY29weV90YXNrX3JlZ3MoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwor
dm9pZAorZG9fZHVtcF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJn
KQoreworCWRvX2R1bXBfdGFza19mcHUoY3VycmVudCwgaW5mbywgYXJnKTsKK30KKwordm9pZAor
aWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2dyZWdzZXRf
dCBkc3QpCit7CisJdW53X2luaXRfcnVubmluZyhkb19jb3B5X3JlZ3MsIGRzdCk7Cit9CisKK2lu
dAorZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpwdCwgZWxmX2ZwcmVnc2V0X3QgZHN0KQorewor
CXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRzdCk7CisJcmV0dXJuIDE7CS8qIGYwLWYz
MSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFsd2F5cyByZXR1cm4gMSAqLworfQorCitzdGF0aWMg
dm9pZAorZG9fY29weV90YXNrX3JlZ3MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0
IHVud19mcmFtZV9pbmZvICppbmZvLCB2b2lkICphcmcpCit7CiAJdW5zaWduZWQgbG9uZyBtYXNr
LCBzcCwgbmF0X2JpdHMgPSAwLCBpcCwgYXJfcm5hdCwgdXJic19lbmQsIGNmbTsKIAllbGZfZ3Jl
Z190ICpkc3QgPSBhcmc7CiAJc3RydWN0IHB0X3JlZ3MgKnB0OwpAQCAtMzg2LDEyICs0MTEsMTIg
QEAKIAl1bndfZ2V0X3NwKGluZm8sICZzcCk7CiAJcHQgPSAoc3RydWN0IHB0X3JlZ3MgKikgKHNw
ICsgMTYpOwogCi0JdXJic19lbmQgPSBpYTY0X2dldF91c2VyX3Jic19lbmQoY3VycmVudCwgcHQs
ICZjZm0pOworCXVyYnNfZW5kID0gaWE2NF9nZXRfdXNlcl9yYnNfZW5kKHRhc2ssIHB0LCAmY2Zt
KTsKIAotCWlmIChpYTY0X3N5bmNfdXNlcl9yYnMoY3VycmVudCwgaW5mby0+c3csIHB0LT5hcl9i
c3BzdG9yZSwgdXJic19lbmQpIDwgMCkKKwlpZiAoaWE2NF9zeW5jX3VzZXJfcmJzKHRhc2ssIGlu
Zm8tPnN3LCBwdC0+YXJfYnNwc3RvcmUsIHVyYnNfZW5kKSA8IDApCiAJCXJldHVybjsKIAotCWlh
NjRfcGVlayhjdXJyZW50LCBpbmZvLT5zdywgdXJic19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0
X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAorCWlhNjRfcGVlayh0YXNrLCBpbmZvLT5zdywgdXJi
c19lbmQsIChsb25nKSBpYTY0X3JzZV9ybmF0X2FkZHIoKGxvbmcgKikgdXJic19lbmQpLAogCQkg
ICZhcl9ybmF0KTsKIAogCS8qCkBAIC00NDAsNyArNDY1LDcgQEAKIH0KIAogdm9pZAotZG9fZHVt
cF9mcHUgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqYXJnKQorZG9fZHVtcF90
YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdW53X2ZyYW1lX2luZm8g
KmluZm8sIHZvaWQgKmFyZykKIHsKIAllbGZfZnByZWdfdCAqZHN0ID0gYXJnOwogCWludCBpOwpA
QCAtNDU1LDIyICs0ODAsNDEgQEAKIAlmb3IgKGkgPSAyOyBpIDwgMzI7ICsraSkKIAkJdW53X2dl
dF9mcihpbmZvLCBpLCBkc3QgKyBpKTsKIAotCWlhNjRfZmx1c2hfZnBoKGN1cnJlbnQpOwotCWlm
ICgoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKSAhPSAwKQot
CQltZW1jcHkoZHN0ICsgMzIsIGN1cnJlbnQtPnRocmVhZC5mcGgsIDk2KjE2KTsKKwlpYTY0X2Zs
dXNoX2ZwaCh0YXNrKTsKKwlpZiAoKHRhc2stPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX0ZQ
SF9WQUxJRCkgIT0gMCkKKwkJbWVtY3B5KGRzdCArIDMyLCB0YXNrLT50aHJlYWQuZnBoLCA5Niox
Nik7CiB9CiAKLXZvaWQKLWlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAq
cHQsIGVsZl9ncmVnc2V0X3QgZHN0KQoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0
cnVjdCAqdGFzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKIHsKLQl1bndfaW5pdF9ydW5uaW5nKGRv
X2NvcHlfcmVncywgZHN0KTsKKwlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gdGNvcmVfaW5mbzsKKwor
CWlmKGN1cnJlbnQgPT0gdGFzaykgeworCQl1bndfaW5pdF9ydW5uaW5nKGRvX2NvcHlfcmVncywg
cmVncyk7CisJfQorCWVsc2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29y
ZV9pbmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFz
ayk7CisJCWRvX2NvcHlfdGFza19yZWdzKHRhc2ssICZ0Y29yZV9pbmZvLCByZWdzKTsKKwl9CisK
KwlyZXR1cm4gMTsKIH0KIAotaW50Ci1kdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKnB0LCBlbGZf
ZnByZWdzZXRfdCBkc3QpCitpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICp0
YXNrLCBlbGZfZnByZWdzZXRfdCAqZHN0KQogewotCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9m
cHUsIGRzdCk7Ci0JcmV0dXJuIDE7CS8qIGYwLWYzMSBhcmUgYWx3YXlzIHZhbGlkIHNvIHdlIGFs
d2F5cyByZXR1cm4gMSAqLworCXN0cnVjdCB1bndfZnJhbWVfaW5mbyB0Y29yZV9pbmZvOworCisJ
aWYoY3VycmVudCA9PSB0YXNrKSB7CisJCXVud19pbml0X3J1bm5pbmcoZG9fZHVtcF9mcHUsIGRz
dCk7CisJfQorCWVsc2UgeworCQltZW1zZXQoJnRjb3JlX2luZm8sIDAsIHNpemVvZih0Y29yZV9p
bmZvKSk7CQorCQl1bndfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmdGNvcmVfaW5mbywgdGFzayk7
CisJCWRvX2R1bXBfdGFza19mcHUodGFzaywgJnRjb3JlX2luZm8sIGRzdCk7CisJfQorCisJcmV0
dXJuIDE7IAogfQogCiBhc21saW5rYWdlIGxvbmcKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4
LTIuNS4yMS9mcy9iaW5mbXRfZWxmLmMgbGludXgyNTIxLnRjb3JlL2ZzL2JpbmZtdF9lbGYuYwot
LS0gbGludXgtMi41LjIxL2ZzL2JpbmZtdF9lbGYuYwlTdW4gSnVuICA5IDAxOjI5OjQwIDIwMDIK
KysrIGxpbnV4MjUyMS50Y29yZS9mcy9iaW5mbXRfZWxmLmMJRnJpIEp1biAxNCAxNToyMjozMiAy
MDAyCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUg
PGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4
L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4K
QEAgLTMwLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAjaW5jbHVkZSA8
bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KKyNpbmNsdWRlIDxsaW51
eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Nv
bXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtOTYzLDcgKzk2NSw3IEBA
CiAvKiAjZGVmaW5lIERFQlVHICovCiAKICNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgZHVtcF9y
ZWdzKGNvbnN0IGNoYXIgKnN0ciwgZWxmX2dyZWdfdCAqcikKK3N0YXRpYyB2b2lkIGR1bXBfcmVn
cyhjb25zdCBjaGFyICpzdHIsIGVsZl9ncmVnc2V0X3QgKnIpCiB7CiAJaW50IGk7CiAJc3RhdGlj
IGNvbnN0IGNoYXIgKnJlZ3NbXSA9IHsgImVieCIsICJlY3giLCAiZWR4IiwgImVzaSIsICJlZGki
LCAiZWJwIiwKQEAgLTEwMTEsNiArMTAxMywxNTggQEAKICNkZWZpbmUgRFVNUF9TRUVLKG9mZikJ
XAogCWlmICghZHVtcF9zZWVrKGZpbGUsIChvZmYpKSkgXAogCQlnb3RvIGVuZF9jb3JlZHVtcDsK
Kworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfZWxmX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYs
IGludCBzZWdzKQoreworCW1lbWNweShlbGYtPmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRyk7CisJ
ZWxmLT5lX2lkZW50W0VJX0NMQVNTXSA9IEVMRl9DTEFTUzsKKwllbGYtPmVfaWRlbnRbRUlfREFU
QV0gPSBFTEZfREFUQTsKKwllbGYtPmVfaWRlbnRbRUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5UOwor
CW1lbXNldChlbGYtPmVfaWRlbnQrRUlfUEFELCAwLCBFSV9OSURFTlQtRUlfUEFEKTsKKworCWVs
Zi0+ZV90eXBlID0gRVRfQ09SRTsKKwllbGYtPmVfbWFjaGluZSA9IEVMRl9BUkNIOworCWVsZi0+
ZV92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKKwllbGYtPmVfZW50cnkgPSAwOworCWVsZi0+ZV9waG9m
ZiA9IHNpemVvZihzdHJ1Y3QgZWxmaGRyKTsKKwllbGYtPmVfc2hvZmYgPSAwOworCWVsZi0+ZV9m
bGFncyA9IDA7CisJZWxmLT5lX2Voc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWxmaGRyKTsKKwllbGYt
PmVfcGhlbnRzaXplID0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CisJZWxmLT5lX3BobnVtID0g
c2VnczsKKwllbGYtPmVfc2hlbnRzaXplID0gMDsKKwllbGYtPmVfc2hudW0gPSAwOworCWVsZi0+
ZV9zaHN0cm5keCA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9l
bGZfbm90ZV9waGRyKHN0cnVjdCBlbGZfcGhkciAqcGhkciwgaW50IHN6LCBvZmZfdCBvZmZzZXQp
Cit7CisJcGhkci0+cF90eXBlID0gUFRfTk9URTsKKwlwaGRyLT5wX29mZnNldCA9IG9mZnNldDsK
KwlwaGRyLT5wX3ZhZGRyID0gMDsKKwlwaGRyLT5wX3BhZGRyID0gMDsKKwlwaGRyLT5wX2ZpbGVz
eiA9IHN6OworCXBoZHItPnBfbWVtc3ogPSAwOworCXBoZHItPnBfZmxhZ3MgPSAwOworCXBoZHIt
PnBfYWxpZ24gPSAwOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxfbm90
ZShzdHJ1Y3QgbWVtZWxmbm90ZSAqbm90ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIAor
CQl1bnNpZ25lZCBpbnQgc3osIHZvaWQgKmRhdGEpCit7CisJbm90ZS0+bmFtZSA9IG5hbWU7CisJ
bm90ZS0+dHlwZSA9IHR5cGU7CisJbm90ZS0+ZGF0YXN6ID0gc3o7CisJbm90ZS0+ZGF0YSA9IGRh
dGE7CisJcmV0dXJuOworfQorCisvKgorICogZmlsbCB1cCBhbGwgdGhlIGZpZWxkcyBpbiBwcnN0
YXR1cyBmcm9tIHRoZSBnaXZlbiB0YXNrIHN0cnVjdCwgZXhjZXB0IHJlZ2lzdGVycworICogd2hp
Y2ggbmVlZCB0byBiZSBmaWxsZWQgdXAgc2VwZXJhdGVseS4KKyAqLworc3RhdGljIGlubGluZSB2
b2lkIGZpbGxfcHJzdGF0dXMoc3RydWN0IGVsZl9wcnN0YXR1cyAqcHJzdGF0dXMsIHN0cnVjdCB0
YXNrX3N0cnVjdCAqcCwgbG9uZyBzaWducikgCit7CisJcHJzdGF0dXMtPnByX2luZm8uc2lfc2ln
bm8gPSBwcnN0YXR1cy0+cHJfY3Vyc2lnID0gc2lnbnI7CisJcHJzdGF0dXMtPnByX3NpZ3BlbmQg
PSBwLT5wZW5kaW5nLnNpZ25hbC5zaWdbMF07CisJcHJzdGF0dXMtPnByX3NpZ2hvbGQgPSBwLT5i
bG9ja2VkLnNpZ1swXTsKKwlwcnN0YXR1cy0+cHJfcGlkID0gcC0+cGlkOworCXByc3RhdHVzLT5w
cl9wcGlkID0gcC0+cGFyZW50LT5waWQ7CisJcHJzdGF0dXMtPnByX3BncnAgPSBwLT5wZ3JwOwor
CXByc3RhdHVzLT5wcl9zaWQgPSBwLT5zZXNzaW9uOworCXByc3RhdHVzLT5wcl91dGltZS50dl9z
ZWMgPSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc191dGltZSk7CisJcHJzdGF0dXMtPnByX3V0aW1l
LnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfdXRpbWUpOworCXByc3RhdHVzLT5w
cl9zdGltZS50dl9zZWMgPSBDVF9UT19TRUNTKHAtPnRpbWVzLnRtc19zdGltZSk7CisJcHJzdGF0
dXMtPnByX3N0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1lcy50bXNfc3RpbWUpOwor
CXByc3RhdHVzLT5wcl9jdXRpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhwLT50aW1lcy50bXNfY3V0
aW1lKTsKKwlwcnN0YXR1cy0+cHJfY3V0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhwLT50aW1l
cy50bXNfY3V0aW1lKTsKKwlwcnN0YXR1cy0+cHJfY3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1Mo
cC0+dGltZXMudG1zX2NzdGltZSk7CisJcHJzdGF0dXMtPnByX2NzdGltZS50dl91c2VjID0gQ1Rf
VE9fVVNFQ1MocC0+dGltZXMudG1zX2NzdGltZSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgZmlsbF9wc2luZm8oc3RydWN0IGVsZl9wcnBzaW5mbyAqcHNpbmZvLCBzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnApCit7CisJaW50IGk7CisJCisJcHNpbmZvLT5wcl9waWQgPSBwLT5waWQ7
CisJcHNpbmZvLT5wcl9wcGlkID0gcC0+cGFyZW50LT5waWQ7CisJcHNpbmZvLT5wcl9wZ3JwID0g
cC0+cGdycDsKKwlwc2luZm8tPnByX3NpZCA9IHAtPnNlc3Npb247CisKKwlpID0gcC0+c3RhdGUg
PyBmZnoofnAtPnN0YXRlKSArIDEgOiAwOworCXBzaW5mby0+cHJfc3RhdGUgPSBpOworCXBzaW5m
by0+cHJfc25hbWUgPSAoaSA8IDAgfHwgaSA+IDUpID8gJy4nIDogIlJTRFpURCJbaV07CisJcHNp
bmZvLT5wcl96b21iID0gcHNpbmZvLT5wcl9zbmFtZSA9PSAnWic7CisJcHNpbmZvLT5wcl9uaWNl
ID0gIHRhc2tfbmljZShwKTsKKwlwc2luZm8tPnByX2ZsYWcgPSBwLT5mbGFnczsKKwlwc2luZm8t
PnByX3VpZCA9IE5FV19UT19PTERfVUlEKHAtPnVpZCk7CisJcHNpbmZvLT5wcl9naWQgPSBORVdf
VE9fT0xEX0dJRChwLT5naWQpOworCXN0cm5jcHkocHNpbmZvLT5wcl9mbmFtZSwgcC0+Y29tbSwg
c2l6ZW9mKHBzaW5mby0+cHJfZm5hbWUpKTsKKwlyZXR1cm47Cit9CisKKy8qIEhlcmUgaXMgdGhl
IHN0cnVjdHVyZSBpbiB3aGljaCBzdGF0dXMgb2YgZWFjaCB0aHJlYWQgaXMgY2FwdHVyZWQuICov
CitzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJ
c3RydWN0IGVsZl9wcnN0YXR1cyBwcnN0YXR1czsJLyogTlRfUFJTVEFUVVMgKi8KKwllbGZfZnBy
ZWdzZXRfdCBmcHU7CQkvKiBOVF9QUkZQUkVHICovCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBS
RUdTCisJZWxmX2ZweHJlZ3NldF90IHhmcHU7CQkvKiBOVF9QUlhGUFJFRyAqLworI2VuZGlmCisJ
c3RydWN0IG1lbWVsZm5vdGUgbm90ZXNbM107CisJaW50IG51bV9ub3RlczsKK307CisKKy8qCisg
KiBJbiBvcmRlciB0byBhZGQgdGhlIHNwZWNpZmljIHRocmVhZCBpbmZvcm1hdGlvbiBmb3IgdGhl
IGVsZiBmaWxlIGZvcm1hdCwKKyAqIHdlIG5lZWQgdG8ga2VlcCBhIGxpbmtlZCBsaXN0IG9mIGV2
ZXJ5IHRocmVhZHMgcHJfc3RhdHVzIGFuZCB0aGVuCisgKiBjcmVhdGUgYSBzaW5nbGUgc2VjdGlv
biBmb3IgdGhlbSBpbiB0aGUgZmluYWwgY29yZSBmaWxlLgorICovCitzdGF0aWMgaW50IGVsZl9k
dW1wX3RocmVhZF9zdGF0dXMobG9uZyBzaWduciwgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3Ry
dWN0IGxpc3RfaGVhZCAqIHRocmVhZF9saXN0KQoreworCisJc3RydWN0IGVsZl90aHJlYWRfc3Rh
dHVzICp0OworCWludCBzeiA9IDA7CisKKwl0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VS
TkVMKTsKKwlpZiAoIXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jYXRl
IG1lbW9yeSBmb3IgdGhyZWFkIHN0YXR1cy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlJTklU
X0xJU1RfSEVBRCgmdC0+bGlzdCk7CisJdC0+bnVtX25vdGVzID0gMDsKKworCWZpbGxfcHJzdGF0
dXMoJnQtPnByc3RhdHVzLCBwLCBzaWducik7CisJZWxmX2NvcmVfY29weV90YXNrX3JlZ3MocCwg
JnQtPnByc3RhdHVzLnByX3JlZyk7CQorCQorCWZpbGxfbm90ZSgmdC0+bm90ZXNbMF0sICJDT1JF
IiwgTlRfUFJTVEFUVVMsIHNpemVvZih0LT5wcnN0YXR1cyksICYodC0+cHJzdGF0dXMpKTsKKwl0
LT5udW1fbm90ZXMrKzsKKwlzeiArPSBub3Rlc2l6ZSgmdC0+bm90ZXNbMF0pOworCisJaWYgKCh0
LT5wcnN0YXR1cy5wcl9mcHZhbGlkID0gZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhwLCAmdC0+
ZnB1KSkpIHsKKwkJZmlsbF9ub3RlKCZ0LT5ub3Rlc1sxXSwgIkNPUkUiLCBOVF9QUkZQUkVHLCBz
aXplb2YodC0+ZnB1KSwgJih0LT5mcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5v
dGVzaXplKCZ0LT5ub3Rlc1sxXSk7CisJfQorCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdT
CisJaWYgKGVsZl9jb3JlX2NvcHlfdGFza194ZnByZWdzKHAsICZ0LT54ZnB1KSkgeworCQlmaWxs
X25vdGUoJnQtPm5vdGVzWzJdLCAiTElOVVgiLCBOVF9QUlhGUFJFRywgc2l6ZW9mKHQtPnhmcHUp
LCAmKHQtPnhmcHUpKTsKKwkJdC0+bnVtX25vdGVzKys7CisJCXN6ICs9IG5vdGVzaXplKCZ0LT5u
b3Rlc1syXSk7CisJfQorI2VuZGlmCQorCWxpc3RfYWRkKCZ0LT5saXN0LCB0aHJlYWRfbGlzdCk7
CisJcmV0dXJuIHN6OworfQorCisKKwogLyoKICAqIEFjdHVhbCBkdW1wZXIKICAqCkBAIC0xMDI5
LDEyICsxMTgzLDIzIEBACiAJc3RydWN0IGVsZmhkciBlbGY7CiAJb2ZmX3Qgb2Zmc2V0ID0gMCwg
ZGF0YW9mZjsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gY3VycmVudC0+cmxpbVtSTElNSVRfQ09S
RV0ucmxpbV9jdXI7Ci0JaW50IG51bW5vdGUgPSA0OwotCXN0cnVjdCBtZW1lbGZub3RlIG5vdGVz
WzRdOworCWludCBudW1ub3RlID0gNTsKKwlzdHJ1Y3QgbWVtZWxmbm90ZSBub3Rlc1s1XTsKIAlz
dHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzOwkvKiBOVF9QUlNUQVRVUyAqLwotCWVsZl9mcHJl
Z3NldF90IGZwdTsJCS8qIE5UX1BSRlBSRUcgKi8KIAlzdHJ1Y3QgZWxmX3BycHNpbmZvIHBzaW5m
bzsJLyogTlRfUFJQU0lORk8gKi8KKyAJc3RydWN0IHRhc2tfc3RydWN0ICpwOworIAlMSVNUX0hF
QUQodGhyZWFkX2xpc3QpOworIAlzdHJ1Y3QgbGlzdF9oZWFkICp0OworCWVsZl9mcHJlZ3NldF90
IGZwdTsKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX1hGUFJFR1MKKwllbGZfZnB4cmVnc2V0X3QgeGZw
dTsKKyNlbmRpZgorCWludCB0aHJlYWRfc3RhdHVzX3NpemUgPSAwOworCQogCisJLyogRmlyc3Qg
cGF1c2UgYWxsIHJlbGF0ZWQgdGhyZWFkZWQgcHJvY2Vzc2VzICovCisJdGNvcmVfc3VzcGVuZF90
aHJlYWRzKCk7CisJCiAJLyogZmlyc3QgY29weSB0aGUgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3Bh
Y2UgKi8KIAltZW1zZXQoJnBzaW5mbywgMCwgc2l6ZW9mKHBzaW5mbykpOwogCXsKQEAgLTEwNTIs
NyArMTIxNyw2IEBACiAKIAl9CiAKLQltZW1zZXQoJnByc3RhdHVzLCAwLCBzaXplb2YocHJzdGF0
dXMpKTsKIAkvKgogCSAqIFRoaXMgdHJhbnNmZXJzIHRoZSByZWdpc3RlcnMgZnJvbSByZWdzIGlu
dG8gdGhlIHN0YW5kYXJkCiAJICogY29yZWR1bXAgYXJyYW5nZW1lbnQsIHdoYXRldmVyIHRoYXQg
aXMuCkBAIC0xMDY4LDkgKzEyMzIsNDIgQEAKIAllbHNlCiAJCSooc3RydWN0IHB0X3JlZ3MgKikm
cHJzdGF0dXMucHJfcmVnID0gKnJlZ3M7CiAjZW5kaWYKKyAKKwkvKiBjYXB0dXJlIHRoZSBzdGF0
dXMgb2YgYWxsIG90aGVyIHRocmVhZHMgKi8KKwlpZiAoc2lnbnIpIHsKKwkJcmVhZF9sb2NrKCZ0
YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfdGFzayhwKQorCQkJaWYgKGN1cnJlbnQtPm1tID09
IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJCWludCBzeiA9IGVsZl9kdW1wX3RocmVhZF9z
dGF0dXMoc2lnbnIsIHAsICZ0aHJlYWRfbGlzdCk7CisJCQkJaWYgKCFzeikgeworCQkJCQlyZWFk
X3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQkJ
ZWxzZQorCQkJCQl0aHJlYWRfc3RhdHVzX3NpemUgKz0gc3o7CisJCQl9CisJCXJlYWRfdW5sb2Nr
KCZ0YXNrbGlzdF9sb2NrKTsKKwl9CisJCisJbWVtc2V0KCZwcnN0YXR1cywgMCwgc2l6ZW9mKHBy
c3RhdHVzKSk7CisJZmlsbF9wcnN0YXR1cygmcHJzdGF0dXMsIGN1cnJlbnQsIHNpZ25yKTsKKwll
bGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLnByX3JlZywgcmVncyk7CisJCisJLyogV2Ugbm8g
bG9uZ2VyIHN0b3AgYWxsIHZtIG9wZXJhdGlvbnMgKi8KIAotCS8qIG5vdyBzdG9wIGFsbCB2bSBv
cGVyYXRpb25zICovCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkvKiBU
aGlzIGJlY2F1c2UgdGhvc2UgcHJvY2VzZXMgdGhhdCBjb3VsZCBwb3NzaWJseSAKKwkgKiBjaGFu
Z2UgbWFwX2NvdW50IG9yIHRoZSBtbWFwIC8gdm1hIHBhZ2VzIGFyZSBub3cgc3VzcGVuZGVkLgor
CSAqCisJICogT25seSBwdHJhY2UgY2FuIHRvdWNoIHRoZXNlIG1lbW9yeSBhZGRyZXNzLCBidXQg
aXQgY2Fubm90IGNoYW5nZQorCSAqIHRoZSBtYXBfY291bnQgb3IgdGhlIHBhZ2VzLiAgU28gbm8g
cG9zc2liaWxpdHkgb2YgY3Jhc2hpbmcgZXhpc3RzIHdoaWxlIGR1bXBpbmcKKwkgKiB0aGUgbW0t
PnZtX25leHQgYXJlYXMgdG8gdGhlIGNvcmUgZmlsZS4KKwkgKgorCSAqIEdyYWJiaW5nIG1tYXBf
c2VtIGluIHRoaXMgZnVuY3Rpb24gaXMgcmlza3kgV1JUIHRoZSB1c2Ugb2Ygc3VzcGVuZF90aHJl
YWRzLgorCSAqIEFsdGhvdWdoIG5vIGxvY2tzIHVwcyBoYXZlIGJlZW4gaW5kdWNlZCwgaWYgb25l
IG9mIHRoZSBzdXNwZW5kZWQgdGhyZWFkcyB3YXMgCisJICogaW4gbGluZSBmb3IgdGhlIGN1cnJl
bnQtPm1tYXBfc2VtIGFuZCBpZiBnZXRzIGl0IHdoaWxlIG9uIHRoZSBQaGFudG9tIHJ1bnF1ZSwK
KwkgKiB0aGVuIHdlIHdvdWxkIGRlYWQgbG9jayBpbiB0aGlzIGZ1bmN0aW9uIGlmIHdlIGNvbnRp
bnVlIHRvIGF0dGVtcHQgdG8gZG93bl93cml0ZQorCSAqIGluIHRoaXMgZnVuY3Rpb24uCisJICov
CiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7CiAKICNpZmRlZiBERUJVRwpAQCAtMTA3
OCwyNSArMTI3NSw3IEBACiAjZW5kaWYKIAogCS8qIFNldCB1cCBoZWFkZXIgKi8KLQltZW1jcHko
ZWxmLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRyk7Ci0JZWxmLmVfaWRlbnRbRUlfQ0xBU1NdID0g
RUxGX0NMQVNTOwotCWVsZi5lX2lkZW50W0VJX0RBVEFdID0gRUxGX0RBVEE7Ci0JZWxmLmVfaWRl
bnRbRUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5UOwotCW1lbXNldChlbGYuZV9pZGVudCtFSV9QQUQs
IDAsIEVJX05JREVOVC1FSV9QQUQpOwotCi0JZWxmLmVfdHlwZSA9IEVUX0NPUkU7Ci0JZWxmLmVf
bWFjaGluZSA9IEVMRl9BUkNIOwotCWVsZi5lX3ZlcnNpb24gPSBFVl9DVVJSRU5UOwotCWVsZi5l
X2VudHJ5ID0gMDsKLQllbGYuZV9waG9mZiA9IHNpemVvZihlbGYpOwotCWVsZi5lX3Nob2ZmID0g
MDsKLQllbGYuZV9mbGFncyA9IDA7Ci0JZWxmLmVfZWhzaXplID0gc2l6ZW9mKGVsZik7Ci0JZWxm
LmVfcGhlbnRzaXplID0gc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7Ci0JZWxmLmVfcGhudW0gPSBz
ZWdzKzE7CQkvKiBJbmNsdWRlIG5vdGVzICovCi0JZWxmLmVfc2hlbnRzaXplID0gMDsKLQllbGYu
ZV9zaG51bSA9IDA7Ci0JZWxmLmVfc2hzdHJuZHggPSAwOworCWZpbGxfZWxmX2hlYWRlcigmZWxm
LCBzZWdzKzEpOyAvKiBpbmNsdWRpbmcgbm90ZXMgc2VjdGlvbiovCiAKIAlmcyA9IGdldF9mcygp
OwogCXNldF9mcyhLRVJORUxfRFMpOwpAQCAtMTExMyw2NCArMTI5MiwzNCBAQAogCSAqIHdpdGgg
aW5mbyBmcm9tIHRoZWlyIC9wcm9jLgogCSAqLwogCi0Jbm90ZXNbMF0ubmFtZSA9ICJDT1JFIjsK
LQlub3Rlc1swXS50eXBlID0gTlRfUFJTVEFUVVM7Ci0Jbm90ZXNbMF0uZGF0YXN6ID0gc2l6ZW9m
KHByc3RhdHVzKTsKLQlub3Rlc1swXS5kYXRhID0gJnByc3RhdHVzOwotCXByc3RhdHVzLnByX2lu
Zm8uc2lfc2lnbm8gPSBwcnN0YXR1cy5wcl9jdXJzaWcgPSBzaWducjsKLQlwcnN0YXR1cy5wcl9z
aWdwZW5kID0gY3VycmVudC0+cGVuZGluZy5zaWduYWwuc2lnWzBdOwotCXByc3RhdHVzLnByX3Np
Z2hvbGQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQlwc2luZm8ucHJfcGlkID0gcHJzdGF0
dXMucHJfcGlkID0gY3VycmVudC0+cGlkOwotCXBzaW5mby5wcl9wcGlkID0gcHJzdGF0dXMucHJf
cHBpZCA9IGN1cnJlbnQtPnBhcmVudC0+cGlkOwotCXBzaW5mby5wcl9wZ3JwID0gcHJzdGF0dXMu
cHJfcGdycCA9IGN1cnJlbnQtPnBncnA7Ci0JcHNpbmZvLnByX3NpZCA9IHByc3RhdHVzLnByX3Np
ZCA9IGN1cnJlbnQtPnNlc3Npb247Ci0JcHJzdGF0dXMucHJfdXRpbWUudHZfc2VjID0gQ1RfVE9f
U0VDUyhjdXJyZW50LT50aW1lcy50bXNfdXRpbWUpOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3Vz
ZWMgPSBDVF9UT19VU0VDUyhjdXJyZW50LT50aW1lcy50bXNfdXRpbWUpOwotCXByc3RhdHVzLnBy
X3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1MoY3VycmVudC0+dGltZXMudG1zX3N0aW1lKTsKLQlw
cnN0YXR1cy5wcl9zdGltZS50dl91c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1z
X3N0aW1lKTsKLQlwcnN0YXR1cy5wcl9jdXRpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50
LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0YXR1cy5wcl9jdXRpbWUudHZfdXNlYyA9IENUX1RP
X1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jdXRpbWUpOwotCXByc3RhdHVzLnByX2NzdGltZS50
dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19jc3RpbWUpOwotCXByc3RhdHVz
LnByX2NzdGltZS50dl91c2VjID0gQ1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX2NzdGlt
ZSk7CisJZmlsbF9ub3RlKCZub3Rlc1swXSwgIkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHBy
c3RhdHVzKSwgJnByc3RhdHVzKTsKKyAJCisJZmlsbF9wc2luZm8oJnBzaW5mbywgY3VycmVudCk7
CisJZmlsbF9ub3RlKCZub3Rlc1sxXSwgIkNPUkUiLCBOVF9QUlBTSU5GTywgc2l6ZW9mKHBzaW5m
byksICZwc2luZm8pOworCQorCWZpbGxfbm90ZSgmbm90ZXNbMl0sICJDT1JFIiwgTlRfVEFTS1NU
UlVDVCwgc2l6ZW9mKCpjdXJyZW50KSwgY3VycmVudCk7CisgIAorICAJLyogVHJ5IHRvIGR1bXAg
dGhlIEZQVS4gKi8KKwlpZiAoKHByc3RhdHVzLnByX2ZwdmFsaWQgPSBlbGZfY29yZV9jb3B5X3Rh
c2tfZnByZWdzKGN1cnJlbnQsICZmcHUpKSkgeworCQlmaWxsX25vdGUoJm5vdGVzWzNdLCAiQ09S
RSIsIE5UX1BSRlBSRUcsIHNpemVvZihmcHUpLCAmZnB1KTsKKwl9IGVsc2UgeworCQktLW51bW5v
dGU7CisgCX0KKyNpZmRlZiBFTEZfQ09SRV9DT1BZX1hGUFJFR1MKKwlpZiAoZWxmX2NvcmVfY29w
eV90YXNrX3hmcHJlZ3MoY3VycmVudCwgJnhmcHUpKSB7CisJCWZpbGxfbm90ZSgmbm90ZXNbNF0s
ICJMSU5VWCIsIE5UX1BSWEZQUkVHLCBzaXplb2YoeGZwdSksICZ4ZnB1KTsKKwl9IGVsc2Ugewor
CQktLW51bW5vdGU7CisJfQorI2Vsc2UKKwludW1ub3RlIC0tOworI2VuZGlmCQogCiAjaWZkZWYg
REVCVUcKIAlkdW1wX3JlZ3MoIlBhc3NlZCBpbiByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsK
IAlkdW1wX3JlZ3MoInByc3RhdHVzIHJlZ3MiLCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9y
ZWcpOwogI2VuZGlmCiAKLQlub3Rlc1sxXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUg
PSBOVF9QUlBTSU5GTzsKLQlub3Rlc1sxXS5kYXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rl
c1sxXS5kYXRhID0gJnBzaW5mbzsKLQlpID0gY3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQt
PnN0YXRlKSArIDEgOiAwOwotCXBzaW5mby5wcl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1l
ID0gKGkgPCAwIHx8IGkgPiA1KSA/ICcuJyA6ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21i
ID0gcHNpbmZvLnByX3NuYW1lID09ICdaJzsKLQlwc2luZm8ucHJfbmljZSA9IHRhc2tfbmljZShj
dXJyZW50KTsKLQlwc2luZm8ucHJfZmxhZyA9IGN1cnJlbnQtPmZsYWdzOwotCXBzaW5mby5wcl91
aWQgPSBORVdfVE9fT0xEX1VJRChjdXJyZW50LT51aWQpOwotCXBzaW5mby5wcl9naWQgPSBORVdf
VE9fT0xEX0dJRChjdXJyZW50LT5naWQpOwotCXN0cm5jcHkocHNpbmZvLnByX2ZuYW1lLCBjdXJy
ZW50LT5jb21tLCBzaXplb2YocHNpbmZvLnByX2ZuYW1lKSk7Ci0KLQlub3Rlc1syXS5uYW1lID0g
IkNPUkUiOwotCW5vdGVzWzJdLnR5cGUgPSBOVF9UQVNLU1RSVUNUOwotCW5vdGVzWzJdLmRhdGFz
eiA9IHNpemVvZigqY3VycmVudCk7Ci0Jbm90ZXNbMl0uZGF0YSA9IGN1cnJlbnQ7Ci0KLQkvKiBU
cnkgdG8gZHVtcCB0aGUgRlBVLiAqLwotCXByc3RhdHVzLnByX2ZwdmFsaWQgPSBkdW1wX2ZwdSAo
cmVncywgJmZwdSk7Ci0JaWYgKCFwcnN0YXR1cy5wcl9mcHZhbGlkKQotCXsKLQkJbnVtbm90ZS0t
OwotCX0KLQllbHNlCi0JewotCQlub3Rlc1szXS5uYW1lID0gIkNPUkUiOwotCQlub3Rlc1szXS50
eXBlID0gTlRfUFJGUFJFRzsKLQkJbm90ZXNbM10uZGF0YXN6ID0gc2l6ZW9mKGZwdSk7Ci0JCW5v
dGVzWzNdLmRhdGEgPSAmZnB1OwotCX0KLQkKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICov
CiAJewogCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkcjsKQEAgLTExNzgsMTcgKzEzMjcsMTEgQEAKIAog
CQlmb3IoaSA9IDA7IGkgPCBudW1ub3RlOyBpKyspCiAJCQlzeiArPSBub3Rlc2l6ZSgmbm90ZXNb
aV0pOworCQkKKwkJc3ogKz0gdGhyZWFkX3N0YXR1c19zaXplOwogCi0JCXBoZHIucF90eXBlID0g
UFRfTk9URTsKLQkJcGhkci5wX29mZnNldCA9IG9mZnNldDsKLQkJcGhkci5wX3ZhZGRyID0gMDsK
LQkJcGhkci5wX3BhZGRyID0gMDsKLQkJcGhkci5wX2ZpbGVzeiA9IHN6OwotCQlwaGRyLnBfbWVt
c3ogPSAwOwotCQlwaGRyLnBfZmxhZ3MgPSAwOwotCQlwaGRyLnBfYWxpZ24gPSAwOwotCi0JCW9m
ZnNldCArPSBwaGRyLnBfZmlsZXN6OworCQlmaWxsX2VsZl9ub3RlX3BoZHIoJnBoZHIsIHN6LCBv
ZmZzZXQpOworCQlvZmZzZXQgKz0gc3o7CiAJCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRy
KSk7CiAJfQogCkBAIC0xMjE3LDEwICsxMzYwLDE5IEBACiAJCURVTVBfV1JJVEUoJnBoZHIsIHNp
emVvZihwaGRyKSk7CiAJfQogCisgCS8qIHdyaXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwog
CWZvcihpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKIAkJaWYgKCF3cml0ZW5vdGUoJm5vdGVzW2ld
LCBmaWxlKSkKIAkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCisJLyogd3JpdGUgb3V0IHRoZSB0aHJl
YWQgc3RhdHVzIG5vdGVzIHNlY3Rpb24gKi8KKwlsaXN0X2Zvcl9lYWNoKHQsICZ0aHJlYWRfbGlz
dCkgeworCQlzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMgKnRtcCA9IGxpc3RfZW50cnkodCwgc3Ry
dWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KTsKKwkJZm9yIChpID0gMDsgaSA8IHRtcC0+bnVt
X25vdGVzOyBpKyspCisJCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSkpCisJ
CQkJZ290byBlbmRfY29yZWR1bXA7CisJfQorIAogCURVTVBfU0VFSyhkYXRhb2ZmKTsKIAogCWZv
cih2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsgdm1hICE9IE5VTEw7IHZtYSA9IHZtYS0+dm1fbmV4
dCkgewpAQCAtMTI2NCwxMSArMTQxNiwyMSBAQAogCQkgICAgICAgKG9mZl90KSBmaWxlLT5mX3Bv
cywgb2Zmc2V0KTsKIAl9CiAKLSBlbmRfY29yZWR1bXA6CitlbmRfY29yZWR1bXA6CiAJc2V0X2Zz
KGZzKTsKLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworY2xlYW51cDoKKwl3
aGlsZSghbGlzdF9lbXB0eSgmdGhyZWFkX2xpc3QpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnRt
cCA9IHRocmVhZF9saXN0Lm5leHQ7CisJCWxpc3RfZGVsKHRtcCk7CisJCWtmcmVlKGxpc3RfZW50
cnkodG1wLCBzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpKTsKKwl9CisKKwl0Y29yZV9y
ZXN1bWVfdGhyZWFkcygpOworCiAJcmV0dXJuIGhhc19kdW1wZWQ7CiB9CisKICNlbmRpZgkJLyog
VVNFX0VMRl9DT1JFX0RVTVAgKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9lbGZfYmluZm10
KHZvaWQpCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMjEvaW5jbHVkZS9hc20taTM4
Ni9lbGYuaCBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAotLS0gbGludXgt
Mi41LjIxL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgJU3VuIEp1biAgOSAwMTozMDo1MiAyMDAyCisr
KyBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAlGcmkgSnVuIDE0IDE1OjIy
OjMyIDIwMDIKQEAgLTk5LDYgKzk5LDE2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5l
IFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9T
VlI0OlBFUl9MSU5VWCkKKworCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAo
c3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1w
X3Rhc2tfZXh0ZW5kZWRfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHVzZXJfZnhz
cl9zdHJ1Y3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZf
cmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBlbGZfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09Q
WV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykK
KyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9YRlBSRUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFz
a19leHRlbmRlZF9mcHUodHNrLCBlbGZfeGZwcmVncykKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZm
IC11ck4gLVggZG9udGRpZmYgbGludXgtMi41LjIxL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggbGlu
dXgyNTIxLnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKLS0tIGxpbnV4LTIuNS4yMS9pbmNs
dWRlL2FzbS1pYTY0L2VsZi5oCVN1biBKdW4gIDkgMDE6MzA6NTMgMjAwMgorKysgbGludXgyNTIx
LnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBA
IC02NSwxMiArNjUsMTYgQEAKICNkZWZpbmUgRUxGX05HUkVHCTEyOAkvKiB3ZSByZWFsbHkgbmVl
ZCBqdXN0IDcyIGJ1dCBsZXQncyBsZWF2ZSBzb21lIGhlYWRyb29tLi4uICovCiAjZGVmaW5lIEVM
Rl9ORlBSRUcJMTI4CS8qIGYwIGFuZCBmMSBjb3VsZCBiZSBvbWl0dGVkLCBidXQgc28gd2hhdC4u
LiAqLwogCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZweHJlZ3NldF90OworCiB0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKIHR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3Nl
dF90W0VMRl9OR1JFR107CiAKIHR5cGVkZWYgc3RydWN0IGlhNjRfZnByZWcgZWxmX2ZwcmVnX3Q7
CiB0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOwogCisKKwog
c3RydWN0IHB0X3JlZ3M7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24uLi4gKi8KIGV4dGVybiB2b2lk
IGlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChzdHJ1Y3QgcHRfcmVncyAqc3JjLCBlbGZfZ3JlZ3Nl
dF90IGRzdCk7CiAjZGVmaW5lIEVMRl9DT1JFX0NPUFlfUkVHUyhfZGVzdCxfcmVncykJaWE2NF9l
bGZfY29yZV9jb3B5X3JlZ3MoX3JlZ3MsIF9kZXN0KTsKQEAgLTg4LDYgKzkyLDE0IEBACiBzdHJ1
Y3QgZWxmNjRfaGRyOwogZXh0ZXJuIHZvaWQgaWE2NF9zZXRfcGVyc29uYWxpdHkgKHN0cnVjdCBl
bGY2NF9oZHIgKmVsZl9leCwgaW50IGliY3MyX2ludGVycHJldGVyKTsKICNkZWZpbmUgU0VUX1BF
UlNPTkFMSVRZKGV4LCBpYmNzMikJaWE2NF9zZXRfcGVyc29uYWxpdHkoJihleCksIGliY3MyKQor
CitleHRlcm4gaW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3Jl
Z3NldF90ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3Qg
KiwgZWxmX2ZwcmVnc2V0X3QgKik7CisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1Mo
dHNrLCBlbGZfZ3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX2dyZWdzKQorI2RlZmluZSBF
TEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVsZl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBl
bGZfZnByZWdzKQorCisKICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X0VMRl9IICovCmRp
ZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMjEvaW5jbHVkZS9saW51eC9lbGYuaCBsaW51
eDI1MjEudGNvcmUvaW5jbHVkZS9saW51eC9lbGYuaAotLS0gbGludXgtMi41LjIxL2luY2x1ZGUv
bGludXgvZWxmLmgJU3VuIEp1biAgOSAwMToyNzozOSAyMDAyCisrKyBsaW51eDI1MjEudGNvcmUv
aW5jbHVkZS9saW51eC9lbGYuaAlGcmkgSnVuIDE0IDE1OjIyOjMyIDIwMDIKQEAgLTU3Niw2ICs1
NzYsOSBAQAogI2RlZmluZSBOVF9QUlBTSU5GTwkzCiAjZGVmaW5lIE5UX1RBU0tTVFJVQ1QJNAog
I2RlZmluZSBOVF9QUkZQWFJFRwkyMAorI2RlZmluZSBOVF9QUlhGUFJFRyAgICAgMHg0NmU2MmI3
ZgkvKiBub3RlIG5hbWUgbXVzdCBiZSAiTElOVVgiIGFzIHBlciBHREIgKi8KKwkJCQkJLyogZnJv
bSBnZGI1LjEvaW5jbHVkZS9lbGYvY29tbW9uLmggKi8KKwogCiAvKiBOb3RlIGhlYWRlciBpbiBh
IFBUX05PVEUgc2VjdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CkBAIC02MDYs
NiArNjA5LDUgQEAKICNkZWZpbmUgZWxmX25vdGUJZWxmNjRfbm90ZQogCiAjZW5kaWYKLQogCiAj
ZW5kaWYgLyogX0xJTlVYX0VMRl9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUu
MjEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmggbGludXgyNTIxLnRjb3JlL2luY2x1ZGUvbGludXgv
ZWxmY29yZS5oCi0tLSBsaW51eC0yLjUuMjEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgJU3VuIEp1
biAgOSAwMToyOTo1MCAyMDAyCisrKyBsaW51eDI1MjEudGNvcmUvaW5jbHVkZS9saW51eC9lbGZj
b3JlLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBAIC04Niw0ICs4Niw0OCBAQAogI2RlZmlu
ZSBQUkFSR1NaIEVMRl9QUkFSR1NaIAogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdGF0
aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29weV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3Ms
IHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfUkVHUworCUVM
Rl9DT1JFX0NPUFlfUkVHUygoKmVsZnJlZ3MpLCByZWdzKQorI2Vsc2UKKwlpZiAoc2l6ZW9mKGVs
Zl9ncmVnc2V0X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpIHsKKwkJcHJpbnRrKCJzaXpl
b2YoZWxmX2dyZWdzZXRfdCkgKCVsZCkgIT0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAoJWxkKVxu
IiwKKwkJCShsb25nKXNpemVvZihlbGZfZ3JlZ3NldF90KSwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBw
dF9yZWdzKSk7CisJfSBlbHNlCisJCSooc3RydWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7
CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Mo
c3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQoreworI2lmZGVm
IEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCisJCisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfVEFTS19S
RUdTKHQsIGVsZnJlZ3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgZHVt
cF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOworCitzdGF0aWMgaW5s
aW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwg
ZWxmX2ZwcmVnc2V0X3QgKmZwdSkKK3sKKyNpZmRlZiBFTEZfQ09SRV9DT1BZX0ZQUkVHUworCXJl
dHVybiBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0LCBmcHUpOworI2Vsc2UKKwlyZXR1cm4gZHVtcF9m
cHUoTlVMTCwgZnB1KTsKKyNlbmRpZgorfQorCisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdT
CitzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfeGZwcmVncyhzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKnQsIGVsZl9mcHhyZWdzZXRfdCAqeGZwdSkKK3sKKwlyZXR1cm4gRUxGX0NPUkVf
Q09QWV9YRlBSRUdTKHQsIHhmcHUpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9f
ICovCisKKwogI2VuZGlmIC8qIF9MSU5VWF9FTEZDT1JFX0ggKi8KZGlmZiAtdXJOIC1YIGRvbnRk
aWZmIGxpbnV4LTIuNS4yMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbGludXgyNTIxLnRjb3JlL2lu
Y2x1ZGUvbGludXgvc2NoZWQuaAotLS0gbGludXgtMi41LjIxL2luY2x1ZGUvbGludXgvc2NoZWQu
aAlTdW4gSnVuICA5IDAxOjI3OjIxIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9pbmNsdWRlL2xp
bnV4L3NjaGVkLmgJRnJpIEp1biAxNCAxNToyMjozMiAyMDAyCkBAIC0xMzIsNiArMTMyLDE0IEBA
CiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCisKKy8qIGZ1bmN0aW9ucyBmb3IgcGF1
c2luZyBhbmQgcmVzdW1taW5nIGZ1bmN0aW9ucyAKKyAqIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNp
bmcgc2lnbmFscy4gIFRoZXNlIGFyZSB1c2VkCisgKiBieSB0aGUgbXVsdGl0aHJlYWRlZCBlbGYg
Y29yZSBkdW1wIGNvZGUgaW4gYmluZm10X2VsZi5jKi8KK2V4dGVybiB2b2lkIHRjb3JlX3N1c3Bl
bmRfdGhyZWFkcyggdm9pZCApOworZXh0ZXJuIHZvaWQgdGNvcmVfcmVzdW1lX3RocmVhZHMoIHZv
aWQgKTsKKworCiAvKgogICogVGhpcyBzZXJpYWxpemVzICJzY2hlZHVsZSgpIiBhbmQgYWxzbyBw
cm90ZWN0cwogICogdGhlIHJ1bi1xdWV1ZSBmcm9tIGRlbGV0aW9ucy9tb2RpZmljYXRpb25zIChi
dXQKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMS9rZXJuZWwvc2NoZWQuYyBsaW51
eDI1MjEudGNvcmUva2VybmVsL3NjaGVkLmMKLS0tIGxpbnV4LTIuNS4yMS9rZXJuZWwvc2NoZWQu
YwlTdW4gSnVuICA5IDAxOjI4OjEzIDIwMDIKKysrIGxpbnV4MjUyMS50Y29yZS9rZXJuZWwvc2No
ZWQuYwlGcmkgSnVuIDE0IDE1OjI3OjEwIDIwMDIKQEAgLTE0NSw3ICsxNDUsOCBAQAogCWxpc3Rf
dCBtaWdyYXRpb25fcXVldWU7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAotc3RhdGljIHN0
cnVjdCBydW5xdWV1ZSBydW5xdWV1ZXNbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0
YXRpYyBzdHJ1Y3QgcnVucXVldWUgcnVucXVldWVzW05SX0NQVVMgKyAxXSBfX2NhY2hlbGluZV9h
bGlnbmVkOworI2RlZmluZSBQSEFOVE9NX0NQVSBOUl9DUFVTCiAKICNkZWZpbmUgY3B1X3JxKGNw
dSkJCShydW5xdWV1ZXMgKyAoY3B1KSkKICNkZWZpbmUgdGhpc19ycSgpCQljcHVfcnEoc21wX3By
b2Nlc3Nvcl9pZCgpKQpAQCAtMjU2LDYgKzI1Nyw5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWlu
dCBuZWVkX3Jlc2NoZWQsIG5ycG9sbGluZzsKIAorCWlmKCB1bmxpa2VseSghcC0+Y3B1c19hbGxv
d2VkKSApCisJCQlyZXR1cm47CisJCQkKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBtaW5pbWlz
ZSB0aGUgY2hhbmNlIG9mIHNlbmRpbmcgYW4gaW50ZXJydXB0IHRvIHBvbGxfaWRsZSgpICovCiAJ
bnJwb2xsaW5nID0gdGVzdF90c2tfdGhyZWFkX2ZsYWcocCxUSUZfUE9MTElOR19OUkZMQUcpOwpA
QCAtMzM2LDcgKzM0MCw3IEBACiAJCWlmIChvbGRfc3RhdGUgPT0gVEFTS19VTklOVEVSUlVQVElC
TEUpCiAJCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CiAJCWFjdGl2YXRlX3Rhc2socCwgcnEp
OwotCQlpZiAocC0+cHJpbyA8IHJxLT5jdXJyLT5wcmlvKQorCQlpZiAocC0+Y3B1c19hbGxvd2Vk
ICYmIChwLT5wcmlvIDwgcnEtPmN1cnItPnByaW8pICkKIAkJCXJlc2NoZWRfdGFzayhycS0+Y3Vy
cik7CiAJCXN1Y2Nlc3MgPSAxOwogCX0KQEAgLTEwMDQsNiArMTAwOCwxMzMgQEAKIAogdm9pZCBz
Y2hlZHVsaW5nX2Z1bmN0aW9uc19lbmRfaGVyZSh2b2lkKSB7IH0KIAorLyoKKyAqIG5lZWRlZCBm
b3IgYWNjdXJhdGUgY29yZSBkdW1wcyBvZiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisg
KiBzZWUgYmluZm10X2VsZi5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9p
ZCByZXNjaGVkdWxlX290aGVyX2NwdXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50
IGksIGNwdTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlmb3IoaT0wOyBpPCBzbXBfbnVt
X2NwdXM7IGkrKykgeworCQljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CisJCXAgPSBjcHVfY3Vy
cihjcHUpOworCQlpZiAocC0+dGhyZWFkX2luZm8tPmNwdSE9IHNtcF9wcm9jZXNzb3JfaWQoKSkg
eworCQkJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CisJCQlzbXBfc2VuZF9yZXNjaGVkdWxlKHAt
PnRocmVhZF9pbmZvLT5jcHUpOworCQl9CisJfQorI2VuZGlmCQorCXJldHVybjsKK30KKworCisv
KiBmdW5jdGlvbnMgZm9yIHBhdXNpbmcgYW5kIHJlc3VtbWluZyBmdW5jdGlvbnMgd2l0aCBvdXQg
dXNpbmcgc2lnbmFscyAqLwordm9pZCB0Y29yZV9zdXNwZW5kX3RocmVhZHModm9pZCkKK3sKKwl1
bnNpZ25lZCBsb25nIGZsYWdzOworCXJ1bnF1ZXVlX3QgKnBoYW50b21ROworCXRhc2tfdCAqdGhy
ZWFkc1tOUl9DUFVTXSwgKnA7CisJaW50IGksIE9uQ1BVQ291bnQgPSAwOworCisvLworLy8gZ3Jh
YiBhbGwgdGhlIHJxX2xvY2tzLgorLy8gY3VycmVudCBpcyB0aGUgcHJvY2VzcyBkdW1waW5nIGNv
cmUKKy8vICAKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJLy8gYXZv
aWQgcG90ZW50aWFsIHJhY2Ugb24gPjIgd2F5IFNNUCBpZiAzIG9yIG1vcmUgdGhyZWFkIHByb2Nz
CisJLy8gZHVtcCBjb3JlIGF0IHRoZSBzYW1lIHRpbWUuCisJCisJbG9jYWxfaXJxX3NhdmUoZmxh
Z3MpOworCisJZm9yKGk9MDsgaTwgc21wX251bV9jcHVzOyBpKyspIHsKKwkJc3Bpbl9sb2NrKCZj
cHVfcnEoaSktPmxvY2spOworCX0KKworCWN1cnJlbnQtPmNwdXNfYWxsb3dlZCA9IDFVTCA8PCBj
dXJyZW50LT50aHJlYWRfaW5mby0+Y3B1OworCS8vIHByZXZlbnQgbWlncmFpb24gb2YgZHVtcGlu
ZyBwcm9jZXNzIG1ha2luZyBsaWZlIGNvbXBsaWNhdGVkLgorCisJcGhhbnRvbVEgPSBjcHVfcnEo
UEhBTlRPTV9DUFUpOyAKKwlzcGluX2xvY2soJnBoYW50b21RLT5sb2NrKTsKKwkKKwlyZXNjaGVk
dWxlX290aGVyX2NwdXMoKTsKKwkvLyB0aGlzIGlzIGFuIG9wdGlvbmFsIElQSSwgYnV0IGl0IG1h
a2VzIGZvciB0aGUgbW9zdCBhY2N1cmF0ZSBjb3JlIGZpbGVzIHBvc3NpYmxlLgorCQorCXJlYWRf
bG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlmb3JfZWFjaF90YXNrKHApIHsKKwkJaWYgKGN1cnJl
bnQtPm1tID09IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJaWYoIHAgPT0gdGFza19ycShw
KS0+Y3VyciApIHsKKwkJCQkvL3RoZW4gcmVtZW1iZXIgaXQgZm9yIGxhdGVyIHVzIG9mIHNldF9j
cHVzX2FsbG93ZWQKKwkJCQl0aHJlYWRzW09uQ1BVQ291bnRdID0gcDsKKwkJCQlwLT5jcHVzX2Fs
bG93ZWQgPSAwOy8vcHJldmVudCBsb2FkIGJhbGFuY2UgZnJvbSBtb3ZpbmcgdGhlc2UgZ3V5cy4K
KwkJCQlPbkNQVUNvdW50ICsrOworCQkJfSBlbHNlIHsKKwkJCQkvLyB3ZSBtYW51YWx5IG1vdmUg
dGhlIHByb2Nlc3MgdG8gdGhlIHBoYW50b20gcnVuIHF1ZXVlLgorCisJCQkJaWYgKHAtPmFycmF5
KSB7CisJCQkJCWRlYWN0aXZhdGVfdGFzayhwLCB0YXNrX3JxKHApKTsKKwkJCQkJYWN0aXZhdGVf
dGFzayhwLCBwaGFudG9tUSk7CisJCQkJfQorCQkJCXAtPnRocmVhZF9pbmZvLT5jcHUgPSBQSEFO
VE9NX0NQVTsKKwkJCQlwLT5jcHVzX2FsbG93ZWQgPSAwOy8vcHJldmVudCBsb2FkIGJhbGFuY2Ug
ZnJvbSBtb3ZpbmcgdGhlc2UgZ3V5cy4KKwkJCX0KKwkJfQorCX0KKwlyZWFkX3VubG9jaygmdGFz
a2xpc3RfbG9jayk7CisKKwlzcGluX3VubG9jaygmcGhhbnRvbVEtPmxvY2spOworCWZvcihpPXNt
cF9udW1fY3B1cy0xOyAwPD0gaTsgaS0tKSB7CisJCXNwaW5fdW5sb2NrKCZjcHVfcnEoaSktPmxv
Y2spOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWZvciggaSA9IDA7IGk8
T25DUFVDb3VudDsgaSsrKSB7CisJCXNldF9jcHVzX2FsbG93ZWQodGhyZWFkc1tpXSwgMCk7CisJ
fQorCQorCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworfQorCit2b2lkIHRjb3Jl
X3Jlc3VtZV90aHJlYWRzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlydW5xdWV1
ZV90ICpwaGFudG9tUTsKKwl0YXNrX3QgKnA7CisJaW50IGk7CisKKwlsb2NhbF9pcnFfc2F2ZShm
bGFncyk7CisJcGhhbnRvbVEgPSBjcHVfcnEoUEhBTlRPTV9DUFUpOworCisJc3Bpbl9sb2NrKCZ0
YXNrX3JxKGN1cnJlbnQpLT5sb2NrKTsKKwlzcGluX2xvY2soJnBoYW50b21RLT5sb2NrKTsKKwkK
KwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWZvcl9lYWNoX3Rhc2socCkgeworCQlpZiAo
Y3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVudCAhPSBwKSB7CisJCQlwLT5jcHVzX2FsbG93
ZWQgPSAxVUwgPDwgY3VycmVudC0+dGhyZWFkX2luZm8tPmNwdTsKKwkJCWlmIChwLT5hcnJheSkg
eworCQkJCWRlYWN0aXZhdGVfdGFzayhwLHBoYW50b21RKTsKKwkJCQlhY3RpdmF0ZV90YXNrKHAs
IHRhc2tfcnEoY3VycmVudCkpOworCQkJfQorCQkJcC0+dGhyZWFkX2luZm8tPmNwdSA9IGN1cnJl
bnQtPnRocmVhZF9pbmZvLT5jcHU7CisJCX0KKwl9CisKKwlyZWFkX3VubG9jaygmdGFza2xpc3Rf
bG9jayk7CisKKwlzcGluX3VubG9jaygmcGhhbnRvbVEtPmxvY2spOworCXNwaW5fdW5sb2NrKCZ0
YXNrX3JxKGN1cnJlbnQpLT5sb2NrKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30K
KworCisKIHZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSkKIHsKIAl1bnNp
Z25lZCBsb25nIGZsYWdzOwpAQCAtMTU5MSw5ICsxNzIyLDkgQEAKIHsKIAlydW5xdWV1ZV90ICpy
cTsKIAlpbnQgaSwgaiwgazsKKwlwcmlvX2FycmF5X3QgKmFycmF5OwogCiAJZm9yIChpID0gMDsg
aSA8IE5SX0NQVVM7IGkrKykgewotCQlwcmlvX2FycmF5X3QgKmFycmF5OwogCiAJCXJxID0gY3B1
X3JxKGkpOwogCQlycS0+YWN0aXZlID0gcnEtPmFycmF5czsKQEAgLTE2MTIsNiArMTc0MywyOCBA
QAogCQkJX19zZXRfYml0KE1BWF9QUklPLCBhcnJheS0+Yml0bWFwKTsKIAkJfQogCX0KKworIAor
CWkgPSBQSEFOVE9NX0NQVTsKKwlycSA9IGNwdV9ycShpKTsKKwlycS0+YWN0aXZlID0gcnEtPmFy
cmF5czsKKwlycS0+ZXhwaXJlZCA9IHJxLT5hcnJheXMgKyAxOworCXJxLT5jdXJyID0gTlVMTDsK
KwlzcGluX2xvY2tfaW5pdCgmcnEtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZycS0+ZnJvemVu
KTsKKwlJTklUX0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisKKwlmb3IgKGogPSAw
OyBqIDwgMjsgaisrKSB7CisJCWFycmF5ID0gcnEtPmFycmF5cyArIGo7CisJCWZvciAoayA9IDA7
IGsgPCBNQVhfUFJJTzsgaysrKSB7CisJCQlJTklUX0xJU1RfSEVBRChhcnJheS0+cXVldWUgKyBr
KTsKKwkJCV9fY2xlYXJfYml0KGssIGFycmF5LT5iaXRtYXApOworCQl9CisJCS8vIGRlbGltaXRl
ciBmb3IgYml0c2VhcmNoCisJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CisJ
fQorCisKIAkvKgogCSAqIFdlIGhhdmUgdG8gZG8gYSBsaXR0bGUgbWFnaWMgdG8gZ2V0IHRoZSBm
aXJzdAogCSAqIHByb2Nlc3MgcmlnaHQgaW4gU01QIG1vZGUuCkBAIC0xNjcyLDkgKzE4MjUsMTEg
QEAKIAltaWdyYXRpb25fcmVxX3QgcmVxOwogCXJ1bnF1ZXVlX3QgKnJxOwogCi0JbmV3X21hc2sg
Jj0gY3B1X29ubGluZV9tYXA7Ci0JaWYgKCFuZXdfbWFzaykKLQkJQlVHKCk7CisJaWYobmV3X21h
c2speyAvLyBjYW4gYmUgTyBmb3IgVENvcmUgcHJvY2VzcyBzdXNwZW5kcworCQluZXdfbWFzayAm
PSBjcHVfb25saW5lX21hcDsKKwkJaWYgKCFuZXdfbWFzaykKKwkJCUJVRygpOworCX0KIAogCXBy
ZWVtcHRfZGlzYWJsZSgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CkBAIC0xNzQ3
LDcgKzE5MDIsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdz
KTsKIAogCQlwID0gcmVxLT50YXNrOwotCQljcHVfZGVzdCA9IF9fZmZzKHAtPmNwdXNfYWxsb3dl
ZCk7CisKKwkJaWYoIHAtPmNwdXNfYWxsb3dlZCkKKwkJCWNwdV9kZXN0ID0gX19mZnMocC0+Y3B1
c19hbGxvd2VkKTsKKwkJZWxzZQorCQkJY3B1X2Rlc3QgPSBQSEFOVE9NX0NQVTsKKwogCQlycV9k
ZXN0ID0gY3B1X3JxKGNwdV9kZXN0KTsKIHJlcGVhdDoKIAkJY3B1X3NyYyA9IHAtPnRocmVhZF9p
bmZvLT5jcHU7CkJpbmFyeSBmaWxlcyBsaW51eC0yLjUuMjEvc2NyaXB0cy9maXhkZXAgYW5kIGxp
bnV4MjUyMS50Y29yZS9zY3JpcHRzL2ZpeGRlcCBkaWZmZXIK

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