Re: [PATCH] TCore patch for 2.5.22

mgross (mgross@unix-os.sc.intel.com)
Tue, 18 Jun 2002 16:40:57 -0400


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

Patch actually attached this time.

--mgross

On Tuesday 18 June 2002 03:47 pm, mgross wrote:
> Attached is a re-base to the 2.5.22 kernel of the patch posted last week.
> It also includes the clean up suggested by Vamsi Krishna.
>
> This patch has been tested on my SMP system and is stable.
> I would like very much to see this feature added to the 2.5.x kernels and
> more milage given to it.
>
> 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
>
> -
> 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/

--------------Boundary-00=_9G5XVGHSTR7YMBI3OIXT
Content-Type: text/x-diff;
charset="iso-8859-1";
name="tcore-2522-061802.pat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tcore-2522-061802.pat"

ZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMi9hcmNoL2kzODYva2VybmVsL2kzODcu
YyBsaW51eDI1MjIudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9pMzg3LmMKLS0tIGxpbnV4LTIuNS4y
Mi9hcmNoL2kzODYva2VybmVsL2kzODcuYwlTdW4gSnVuIDE2IDIyOjMxOjM3IDIwMDIKKysrIGxp
bnV4MjUyMi50Y29yZS9hcmNoL2kzODYva2VybmVsL2kzODcuYwlUdWUgSnVuIDE4IDE1OjE3OjEy
IDIwMDIKQEAgLTUyOCwzICs1MjgsMzYgQEAKIAogCXJldHVybiBmcHZhbGlkOwogfQorCitpbnQg
ZHVtcF90YXNrX2ZwdSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2kzODdf
c3RydWN0ICpmcHUgKQoreworCWludCBmcHZhbGlkOworCisJZnB2YWxpZCA9IHRzay0+dXNlZF9t
YXRoOworCWlmICggZnB2YWxpZCApIHsKKwkJaWYgKHRzayA9PSBjdXJyZW50KSB1bmxhenlfZnB1
KCB0c2sgKTsKKwkJaWYgKCBjcHVfaGFzX2Z4c3IgKSB7CisJCQljb3B5X2ZwdV9meHNhdmUoIHRz
aywgZnB1ICk7CisJCX0gZWxzZSB7CisJCQljb3B5X2ZwdV9mc2F2ZSggdHNrLCBmcHUgKTsKKwkJ
fQorCX0KKworCXJldHVybiBmcHZhbGlkOworfQorCitpbnQgZHVtcF90YXNrX2V4dGVuZGVkX2Zw
dSggc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0ICpmcHUg
KQoreworCWludCBmcHZhbGlkOworCQorCWZwdmFsaWQgPSB0c2stPnVzZWRfbWF0aCAmJiBjcHVf
aGFzX2Z4c3I7CisJaWYgKCBmcHZhbGlkICkgeworCQlpZiAodHNrID09IGN1cnJlbnQpIHVubGF6
eV9mcHUoIHRzayApOworCQltZW1jcHkoIGZwdSwgJnRzay0+dGhyZWFkLmkzODcuZnhzYXZlLAor
CQlzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpICk7CisJfQorCQorCXJldHVybiBmcHZh
bGlkOworfQorCisKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMi9hcmNoL2kzODYv
a2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjIudGNvcmUvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNz
LmMKLS0tIGxpbnV4LTIuNS4yMi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwlTdW4gSnVuIDE2
IDIyOjMxOjIyIDIwMDIKKysrIGxpbnV4MjUyMi50Y29yZS9hcmNoL2kzODYva2VybmVsL3Byb2Nl
c3MuYwlUdWUgSnVuIDE4IDE1OjE3OjEyIDIwMDIKQEAgLTYyNiw2ICs2MjYsMjQgQEAKIAogCWR1
bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+aTM4Nyk7CiB9CisvKiAKKyAq
IENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBydW5u
aW5nIChpbiB1c2VyIHNwYWNlKQorICovCisjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgoraW50
IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCAgZWxmX2dyZWdzZXRfdCAq
cmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7CisJCisJcHRyZWdzID0gKihzdHJ1Y3Qg
cHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0c2stPnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUg
LSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlwdHJlZ3MueGNzICY9IDB4ZmZmZjsKKwlwdHJl
Z3MueGRzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueGVzICY9IDB4ZmZmZjsKKwlwdHJlZ3MueHNzICY9
IDB4ZmZmZjsKKworCWVsZl9jb3JlX2NvcHlfcmVncyhyZWdzLCAmcHRyZWdzKTsKKworCXJldHVy
biAxOworfQogCiAvKgogICogVGhpcyBzcGVjaWFsIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGxvYWQg
YSBkZWJ1Z2dpbmcgcmVnaXN0ZXIKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMi9h
cmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBsaW51eDI1MjIudGNvcmUvYXJjaC9pYTY0L2tlcm5l
bC9wcm9jZXNzLmMKLS0tIGxpbnV4LTIuNS4yMi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwlT
dW4gSnVuIDE2IDIyOjMxOjMyIDIwMDIKKysrIGxpbnV4MjUyMi50Y29yZS9hcmNoL2lhNjQva2Vy
bmVsL3Byb2Nlc3MuYwlUdWUgSnVuIDE4IDE1OjE3OjEyIDIwMDIKQEAgLTM3Miw2ICszNzIsMzEg
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
LTIuNS4yMi9mcy9iaW5mbXRfZWxmLmMgbGludXgyNTIyLnRjb3JlL2ZzL2JpbmZtdF9lbGYuYwot
LS0gbGludXgtMi41LjIyL2ZzL2JpbmZtdF9lbGYuYwlTdW4gSnVuIDE2IDIyOjMxOjMxIDIwMDIK
KysrIGxpbnV4MjUyMi50Y29yZS9mcy9iaW5mbXRfZWxmLmMJVHVlIEp1biAxOCAxNToxNzoxMiAy
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
MjUgKzEyMTcsNDEgQEAKIAogCX0KIAotCW1lbXNldCgmcHJzdGF0dXMsIDAsIHNpemVvZihwcnN0
YXR1cykpOwotCS8qCi0JICogVGhpcyB0cmFuc2ZlcnMgdGhlIHJlZ2lzdGVycyBmcm9tIHJlZ3Mg
aW50byB0aGUgc3RhbmRhcmQKLQkgKiBjb3JlZHVtcCBhcnJhbmdlbWVudCwgd2hhdGV2ZXIgdGhh
dCBpcy4KLQkgKi8KLSNpZmRlZiBFTEZfQ09SRV9DT1BZX1JFR1MKLQlFTEZfQ09SRV9DT1BZX1JF
R1MocHJzdGF0dXMucHJfcmVnLCByZWdzKQotI2Vsc2UKLQlpZiAoc2l6ZW9mKGVsZl9ncmVnc2V0
X3QpICE9IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpCi0JewotCQlwcmludGsoInNpemVvZihlbGZf
Z3JlZ3NldF90KSAoJWxkKSAhPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICglbGQpXG4iLAotCQkJ
KGxvbmcpc2l6ZW9mKGVsZl9ncmVnc2V0X3QpLCAobG9uZylzaXplb2Yoc3RydWN0IHB0X3JlZ3Mp
KTsKKwkvKiBjYXB0dXJlIHRoZSBzdGF0dXMgb2YgYWxsIG90aGVyIHRocmVhZHMgKi8KKwlpZiAo
c2lnbnIpIHsKKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZm9yX2VhY2hfdGFzayhw
KQorCQkJaWYgKGN1cnJlbnQtPm1tID09IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJCWlu
dCBzeiA9IGVsZl9kdW1wX3RocmVhZF9zdGF0dXMoc2lnbnIsIHAsICZ0aHJlYWRfbGlzdCk7CisJ
CQkJaWYgKCFzeikgeworCQkJCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCQkJCWdv
dG8gY2xlYW51cDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQl0aHJlYWRfc3RhdHVzX3NpemUgKz0g
c3o7CisJCQl9CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl9Ci0JZWxzZQotCQkq
KHN0cnVjdCBwdF9yZWdzICopJnByc3RhdHVzLnByX3JlZyA9ICpyZWdzOwotI2VuZGlmCisJCisJ
bWVtc2V0KCZwcnN0YXR1cywgMCwgc2l6ZW9mKHByc3RhdHVzKSk7CisJZmlsbF9wcnN0YXR1cygm
cHJzdGF0dXMsIGN1cnJlbnQsIHNpZ25yKTsKKwllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVz
LnByX3JlZywgcmVncyk7CisJCisJLyogV2Ugbm8gbG9uZ2VyIHN0b3AgYWxsIHZtIG9wZXJhdGlv
bnMgKi8KIAotCS8qIG5vdyBzdG9wIGFsbCB2bSBvcGVyYXRpb25zICovCi0JZG93bl93cml0ZSgm
Y3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkvKiBUaGlzIGJlY2F1c2UgdGhvc2UgcHJvY2VzZXMg
dGhhdCBjb3VsZCBwb3NzaWJseSAKKwkgKiBjaGFuZ2UgbWFwX2NvdW50IG9yIHRoZSBtbWFwIC8g
dm1hIHBhZ2VzIGFyZSBub3cgc3VzcGVuZGVkLgorCSAqCisJICogT25seSBwdHJhY2UgY2FuIHRv
dWNoIHRoZXNlIG1lbW9yeSBhZGRyZXNzLCBidXQgaXQgY2Fubm90IGNoYW5nZQorCSAqIHRoZSBt
YXBfY291bnQgb3IgdGhlIHBhZ2VzLiAgU28gbm8gcG9zc2liaWxpdHkgb2YgY3Jhc2hpbmcgZXhp
c3RzIHdoaWxlIGR1bXBpbmcKKwkgKiB0aGUgbW0tPnZtX25leHQgYXJlYXMgdG8gdGhlIGNvcmUg
ZmlsZS4KKwkgKgorCSAqIEdyYWJiaW5nIG1tYXBfc2VtIGluIHRoaXMgZnVuY3Rpb24gaXMgcmlz
a3kgV1JUIHRoZSB1c2Ugb2Ygc3VzcGVuZF90aHJlYWRzLgorCSAqIEFsdGhvdWdoIG5vIGxvY2tz
IHVwcyBoYXZlIGJlZW4gaW5kdWNlZCwgaWYgb25lIG9mIHRoZSBzdXNwZW5kZWQgdGhyZWFkcyB3
YXMgCisJICogaW4gbGluZSBmb3IgdGhlIGN1cnJlbnQtPm1tYXBfc2VtIGFuZCBpZiBnZXRzIGl0
IHdoaWxlIG9uIHRoZSBQaGFudG9tIHJ1bnF1ZSwKKwkgKiB0aGVuIHdlIHdvdWxkIGRlYWQgbG9j
ayBpbiB0aGlzIGZ1bmN0aW9uIGlmIHdlIGNvbnRpbnVlIHRvIGF0dGVtcHQgdG8gZG93bl93cml0
ZQorCSAqIGluIHRoaXMgZnVuY3Rpb24uCisJICovCiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBf
Y291bnQ7CiAKICNpZmRlZiBERUJVRwpAQCAtMTA3OCwyNSArMTI1OSw3IEBACiAjZW5kaWYKIAog
CS8qIFNldCB1cCBoZWFkZXIgKi8KLQltZW1jcHkoZWxmLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1B
Ryk7Ci0JZWxmLmVfaWRlbnRbRUlfQ0xBU1NdID0gRUxGX0NMQVNTOwotCWVsZi5lX2lkZW50W0VJ
X0RBVEFdID0gRUxGX0RBVEE7Ci0JZWxmLmVfaWRlbnRbRUlfVkVSU0lPTl0gPSBFVl9DVVJSRU5U
OwotCW1lbXNldChlbGYuZV9pZGVudCtFSV9QQUQsIDAsIEVJX05JREVOVC1FSV9QQUQpOwotCi0J
ZWxmLmVfdHlwZSA9IEVUX0NPUkU7Ci0JZWxmLmVfbWFjaGluZSA9IEVMRl9BUkNIOwotCWVsZi5l
X3ZlcnNpb24gPSBFVl9DVVJSRU5UOwotCWVsZi5lX2VudHJ5ID0gMDsKLQllbGYuZV9waG9mZiA9
IHNpemVvZihlbGYpOwotCWVsZi5lX3Nob2ZmID0gMDsKLQllbGYuZV9mbGFncyA9IDA7Ci0JZWxm
LmVfZWhzaXplID0gc2l6ZW9mKGVsZik7Ci0JZWxmLmVfcGhlbnRzaXplID0gc2l6ZW9mKHN0cnVj
dCBlbGZfcGhkcik7Ci0JZWxmLmVfcGhudW0gPSBzZWdzKzE7CQkvKiBJbmNsdWRlIG5vdGVzICov
Ci0JZWxmLmVfc2hlbnRzaXplID0gMDsKLQllbGYuZV9zaG51bSA9IDA7Ci0JZWxmLmVfc2hzdHJu
ZHggPSAwOworCWZpbGxfZWxmX2hlYWRlcigmZWxmLCBzZWdzKzEpOyAvKiBpbmNsdWRpbmcgbm90
ZXMgc2VjdGlvbiovCiAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwpAQCAt
MTExMyw2NCArMTI3NiwzNCBAQAogCSAqIHdpdGggaW5mbyBmcm9tIHRoZWlyIC9wcm9jLgogCSAq
LwogCi0Jbm90ZXNbMF0ubmFtZSA9ICJDT1JFIjsKLQlub3Rlc1swXS50eXBlID0gTlRfUFJTVEFU
VVM7Ci0Jbm90ZXNbMF0uZGF0YXN6ID0gc2l6ZW9mKHByc3RhdHVzKTsKLQlub3Rlc1swXS5kYXRh
ID0gJnByc3RhdHVzOwotCXByc3RhdHVzLnByX2luZm8uc2lfc2lnbm8gPSBwcnN0YXR1cy5wcl9j
dXJzaWcgPSBzaWducjsKLQlwcnN0YXR1cy5wcl9zaWdwZW5kID0gY3VycmVudC0+cGVuZGluZy5z
aWduYWwuc2lnWzBdOwotCXByc3RhdHVzLnByX3NpZ2hvbGQgPSBjdXJyZW50LT5ibG9ja2VkLnNp
Z1swXTsKLQlwc2luZm8ucHJfcGlkID0gcHJzdGF0dXMucHJfcGlkID0gY3VycmVudC0+cGlkOwot
CXBzaW5mby5wcl9wcGlkID0gcHJzdGF0dXMucHJfcHBpZCA9IGN1cnJlbnQtPnBhcmVudC0+cGlk
OwotCXBzaW5mby5wcl9wZ3JwID0gcHJzdGF0dXMucHJfcGdycCA9IGN1cnJlbnQtPnBncnA7Ci0J
cHNpbmZvLnByX3NpZCA9IHByc3RhdHVzLnByX3NpZCA9IGN1cnJlbnQtPnNlc3Npb247Ci0JcHJz
dGF0dXMucHJfdXRpbWUudHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1lcy50bXNfdXRp
bWUpOwotCXByc3RhdHVzLnByX3V0aW1lLnR2X3VzZWMgPSBDVF9UT19VU0VDUyhjdXJyZW50LT50
aW1lcy50bXNfdXRpbWUpOwotCXByc3RhdHVzLnByX3N0aW1lLnR2X3NlYyA9IENUX1RPX1NFQ1Mo
Y3VycmVudC0+dGltZXMudG1zX3N0aW1lKTsKLQlwcnN0YXR1cy5wcl9zdGltZS50dl91c2VjID0g
Q1RfVE9fVVNFQ1MoY3VycmVudC0+dGltZXMudG1zX3N0aW1lKTsKLQlwcnN0YXR1cy5wcl9jdXRp
bWUudHZfc2VjID0gQ1RfVE9fU0VDUyhjdXJyZW50LT50aW1lcy50bXNfY3V0aW1lKTsKLQlwcnN0
YXR1cy5wcl9jdXRpbWUudHZfdXNlYyA9IENUX1RPX1VTRUNTKGN1cnJlbnQtPnRpbWVzLnRtc19j
dXRpbWUpOwotCXByc3RhdHVzLnByX2NzdGltZS50dl9zZWMgPSBDVF9UT19TRUNTKGN1cnJlbnQt
PnRpbWVzLnRtc19jc3RpbWUpOwotCXByc3RhdHVzLnByX2NzdGltZS50dl91c2VjID0gQ1RfVE9f
VVNFQ1MoY3VycmVudC0+dGltZXMudG1zX2NzdGltZSk7CisJZmlsbF9ub3RlKCZub3Rlc1swXSwg
IkNPUkUiLCBOVF9QUlNUQVRVUywgc2l6ZW9mKHByc3RhdHVzKSwgJnByc3RhdHVzKTsKKyAJCisJ
ZmlsbF9wc2luZm8oJnBzaW5mbywgY3VycmVudCk7CisJZmlsbF9ub3RlKCZub3Rlc1sxXSwgIkNP
UkUiLCBOVF9QUlBTSU5GTywgc2l6ZW9mKHBzaW5mbyksICZwc2luZm8pOworCQorCWZpbGxfbm90
ZSgmbm90ZXNbMl0sICJDT1JFIiwgTlRfVEFTS1NUUlVDVCwgc2l6ZW9mKCpjdXJyZW50KSwgY3Vy
cmVudCk7CisgIAorICAJLyogVHJ5IHRvIGR1bXAgdGhlIEZQVS4gKi8KKwlpZiAoKHByc3RhdHVz
LnByX2ZwdmFsaWQgPSBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKGN1cnJlbnQsICZmcHUpKSkg
eworCQlmaWxsX25vdGUoJm5vdGVzWzNdLCAiQ09SRSIsIE5UX1BSRlBSRUcsIHNpemVvZihmcHUp
LCAmZnB1KTsKKwl9IGVsc2UgeworCQktLW51bW5vdGU7CisgCX0KKyNpZmRlZiBFTEZfQ09SRV9D
T1BZX1hGUFJFR1MKKwlpZiAoZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3MoY3VycmVudCwgJnhm
cHUpKSB7CisJCWZpbGxfbm90ZSgmbm90ZXNbNF0sICJMSU5VWCIsIE5UX1BSWEZQUkVHLCBzaXpl
b2YoeGZwdSksICZ4ZnB1KTsKKwl9IGVsc2UgeworCQktLW51bW5vdGU7CisJfQorI2Vsc2UKKwlu
dW1ub3RlIC0tOworI2VuZGlmCQogCiAjaWZkZWYgREVCVUcKIAlkdW1wX3JlZ3MoIlBhc3NlZCBp
biByZWdzIiwgKGVsZl9ncmVnX3QgKilyZWdzKTsKIAlkdW1wX3JlZ3MoInByc3RhdHVzIHJlZ3Mi
LCAoZWxmX2dyZWdfdCAqKSZwcnN0YXR1cy5wcl9yZWcpOwogI2VuZGlmCiAKLQlub3Rlc1sxXS5u
YW1lID0gIkNPUkUiOwotCW5vdGVzWzFdLnR5cGUgPSBOVF9QUlBTSU5GTzsKLQlub3Rlc1sxXS5k
YXRhc3ogPSBzaXplb2YocHNpbmZvKTsKLQlub3Rlc1sxXS5kYXRhID0gJnBzaW5mbzsKLQlpID0g
Y3VycmVudC0+c3RhdGUgPyBmZnoofmN1cnJlbnQtPnN0YXRlKSArIDEgOiAwOwotCXBzaW5mby5w
cl9zdGF0ZSA9IGk7Ci0JcHNpbmZvLnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1KSA/ICcuJyA6
ICJSU0RaVEQiW2ldOwotCXBzaW5mby5wcl96b21iID0gcHNpbmZvLnByX3NuYW1lID09ICdaJzsK
LQlwc2luZm8ucHJfbmljZSA9IHRhc2tfbmljZShjdXJyZW50KTsKLQlwc2luZm8ucHJfZmxhZyA9
IGN1cnJlbnQtPmZsYWdzOwotCXBzaW5mby5wcl91aWQgPSBORVdfVE9fT0xEX1VJRChjdXJyZW50
LT51aWQpOwotCXBzaW5mby5wcl9naWQgPSBORVdfVE9fT0xEX0dJRChjdXJyZW50LT5naWQpOwot
CXN0cm5jcHkocHNpbmZvLnByX2ZuYW1lLCBjdXJyZW50LT5jb21tLCBzaXplb2YocHNpbmZvLnBy
X2ZuYW1lKSk7Ci0KLQlub3Rlc1syXS5uYW1lID0gIkNPUkUiOwotCW5vdGVzWzJdLnR5cGUgPSBO
VF9UQVNLU1RSVUNUOwotCW5vdGVzWzJdLmRhdGFzeiA9IHNpemVvZigqY3VycmVudCk7Ci0Jbm90
ZXNbMl0uZGF0YSA9IGN1cnJlbnQ7Ci0KLQkvKiBUcnkgdG8gZHVtcCB0aGUgRlBVLiAqLwotCXBy
c3RhdHVzLnByX2ZwdmFsaWQgPSBkdW1wX2ZwdSAocmVncywgJmZwdSk7Ci0JaWYgKCFwcnN0YXR1
cy5wcl9mcHZhbGlkKQotCXsKLQkJbnVtbm90ZS0tOwotCX0KLQllbHNlCi0JewotCQlub3Rlc1sz
XS5uYW1lID0gIkNPUkUiOwotCQlub3Rlc1szXS50eXBlID0gTlRfUFJGUFJFRzsKLQkJbm90ZXNb
M10uZGF0YXN6ID0gc2l6ZW9mKGZwdSk7Ci0JCW5vdGVzWzNdLmRhdGEgPSAmZnB1OwotCX0KLQkK
IAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICovCiAJewogCQlzdHJ1Y3QgZWxmX3BoZHIgcGhk
cjsKQEAgLTExNzgsMTcgKzEzMTEsMTEgQEAKIAogCQlmb3IoaSA9IDA7IGkgPCBudW1ub3RlOyBp
KyspCiAJCQlzeiArPSBub3Rlc2l6ZSgmbm90ZXNbaV0pOworCQkKKwkJc3ogKz0gdGhyZWFkX3N0
YXR1c19zaXplOwogCi0JCXBoZHIucF90eXBlID0gUFRfTk9URTsKLQkJcGhkci5wX29mZnNldCA9
IG9mZnNldDsKLQkJcGhkci5wX3ZhZGRyID0gMDsKLQkJcGhkci5wX3BhZGRyID0gMDsKLQkJcGhk
ci5wX2ZpbGVzeiA9IHN6OwotCQlwaGRyLnBfbWVtc3ogPSAwOwotCQlwaGRyLnBfZmxhZ3MgPSAw
OwotCQlwaGRyLnBfYWxpZ24gPSAwOwotCi0JCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OworCQlm
aWxsX2VsZl9ub3RlX3BoZHIoJnBoZHIsIHN6LCBvZmZzZXQpOworCQlvZmZzZXQgKz0gc3o7CiAJ
CURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CiAJfQogCkBAIC0xMjE3LDEwICsxMzQ0
LDE5IEBACiAJCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CiAJfQogCisgCS8qIHdy
aXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwogCWZvcihpID0gMDsgaSA8IG51bW5vdGU7IGkr
KykKIAkJaWYgKCF3cml0ZW5vdGUoJm5vdGVzW2ldLCBmaWxlKSkKIAkJCWdvdG8gZW5kX2NvcmVk
dW1wOwogCisJLyogd3JpdGUgb3V0IHRoZSB0aHJlYWQgc3RhdHVzIG5vdGVzIHNlY3Rpb24gKi8K
KwlsaXN0X2Zvcl9lYWNoKHQsICZ0aHJlYWRfbGlzdCkgeworCQlzdHJ1Y3QgZWxmX3RocmVhZF9z
dGF0dXMgKnRtcCA9IGxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0
KTsKKwkJZm9yIChpID0gMDsgaSA8IHRtcC0+bnVtX25vdGVzOyBpKyspCisJCQlpZiAoIXdyaXRl
bm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSkpCisJCQkJZ290byBlbmRfY29yZWR1bXA7CisJfQor
IAogCURVTVBfU0VFSyhkYXRhb2ZmKTsKIAogCWZvcih2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsg
dm1hICE9IE5VTEw7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewpAQCAtMTI2NCwxMSArMTQwMCwyMSBA
QAogCQkgICAgICAgKG9mZl90KSBmaWxlLT5mX3Bvcywgb2Zmc2V0KTsKIAl9CiAKLSBlbmRfY29y
ZWR1bXA6CitlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKLQl1cF93cml0ZSgmY3VycmVudC0+
bW0tPm1tYXBfc2VtKTsKKworY2xlYW51cDoKKwl3aGlsZSghbGlzdF9lbXB0eSgmdGhyZWFkX2xp
c3QpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IHRocmVhZF9saXN0Lm5leHQ7CisJCWxp
c3RfZGVsKHRtcCk7CisJCWtmcmVlKGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZWxmX3RocmVhZF9z
dGF0dXMsIGxpc3QpKTsKKwl9CisKKwl0Y29yZV9yZXN1bWVfdGhyZWFkcygpOworCiAJcmV0dXJu
IGhhc19kdW1wZWQ7CiB9CisKICNlbmRpZgkJLyogVVNFX0VMRl9DT1JFX0RVTVAgKi8KIAogc3Rh
dGljIGludCBfX2luaXQgaW5pdF9lbGZfYmluZm10KHZvaWQpCmRpZmYgLXVyTiAtWCBkb250ZGlm
ZiBsaW51eC0yLjUuMjIvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBsaW51eDI1MjIudGNvcmUvaW5j
bHVkZS9hc20taTM4Ni9lbGYuaAotLS0gbGludXgtMi41LjIyL2luY2x1ZGUvYXNtLWkzODYvZWxm
LmgJU3VuIEp1biAxNiAyMjozMTozNCAyMDAyCisrKyBsaW51eDI1MjIudGNvcmUvaW5jbHVkZS9h
c20taTM4Ni9lbGYuaAlUdWUgSnVuIDE4IDE1OjE3OjEyIDIwMDIKQEAgLTk5LDYgKzk5LDE2IEBA
CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIp
IHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKworCitleHRlcm4g
aW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAq
KTsKK2V4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9m
cHJlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1wX3Rhc2tfZXh0ZW5kZWRfZnB1IChzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKiwgc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgKik7CisKKyNkZWZpbmUgRUxG
X0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZfcmVncykgZHVtcF90YXNrX3JlZ3ModHNrLCBl
bGZfcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBk
dW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9YRlBS
RUdTKHRzaywgZWxmX3hmcHJlZ3MpIGR1bXBfdGFza19leHRlbmRlZF9mcHUodHNrLCBlbGZfeGZw
cmVncykKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC11ck4gLVggZG9udGRpZmYgbGludXgtMi41
LjIyL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggbGludXgyNTIyLnRjb3JlL2luY2x1ZGUvYXNtLWlh
NjQvZWxmLmgKLS0tIGxpbnV4LTIuNS4yMi9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCVN1biBKdW4g
MTYgMjI6MzE6MzQgMjAwMgorKysgbGludXgyNTIyLnRjb3JlL2luY2x1ZGUvYXNtLWlhNjQvZWxm
LmgJVHVlIEp1biAxOCAxNToxNzoxMiAyMDAyCkBAIC02NSwxMiArNjUsMTYgQEAKICNkZWZpbmUg
RUxGX05HUkVHCTEyOAkvKiB3ZSByZWFsbHkgbmVlZCBqdXN0IDcyIGJ1dCBsZXQncyBsZWF2ZSBz
b21lIGhlYWRyb29tLi4uICovCiAjZGVmaW5lIEVMRl9ORlBSRUcJMTI4CS8qIGYwIGFuZCBmMSBj
b3VsZCBiZSBvbWl0dGVkLCBidXQgc28gd2hhdC4uLiAqLwogCit0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgZWxmX2ZweHJlZ3NldF90OworCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsK
IHR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CiAKIHR5cGVkZWYg
c3RydWN0IGlhNjRfZnByZWcgZWxmX2ZwcmVnX3Q7CiB0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9m
cHJlZ3NldF90W0VMRl9ORlBSRUddOwogCisKKwogc3RydWN0IHB0X3JlZ3M7CS8qIGZvcndhcmQg
ZGVjbGFyYXRpb24uLi4gKi8KIGV4dGVybiB2b2lkIGlhNjRfZWxmX2NvcmVfY29weV9yZWdzIChz
dHJ1Y3QgcHRfcmVncyAqc3JjLCBlbGZfZ3JlZ3NldF90IGRzdCk7CiAjZGVmaW5lIEVMRl9DT1JF
X0NPUFlfUkVHUyhfZGVzdCxfcmVncykJaWE2NF9lbGZfY29yZV9jb3B5X3JlZ3MoX3JlZ3MsIF9k
ZXN0KTsKQEAgLTg4LDYgKzkyLDE0IEBACiBzdHJ1Y3QgZWxmNjRfaGRyOwogZXh0ZXJuIHZvaWQg
aWE2NF9zZXRfcGVyc29uYWxpdHkgKHN0cnVjdCBlbGY2NF9oZHIgKmVsZl9leCwgaW50IGliY3My
X2ludGVycHJldGVyKTsKICNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJaWE2NF9z
ZXRfcGVyc29uYWxpdHkoJihleCksIGliY3MyKQorCitleHRlcm4gaW50IGR1bXBfdGFza19yZWdz
KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBlbGZfZ3JlZ3NldF90ICopOworZXh0ZXJuIGludCBkdW1w
X3Rhc2tfZnB1IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2ZwcmVnc2V0X3QgKik7CisKKyNk
ZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1ModHNrLCBlbGZfZ3JlZ3MpIGR1bXBfdGFza19y
ZWdzKHRzaywgZWxmX2dyZWdzKQorI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0c2ssIGVs
Zl9mcHJlZ3MpIGR1bXBfdGFza19mcHUodHNrLCBlbGZfZnByZWdzKQorCisKICNlbmRpZgogCiAj
ZW5kaWYgLyogX0FTTV9JQTY0X0VMRl9IICovCmRpZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0y
LjUuMjIvaW5jbHVkZS9saW51eC9lbGYuaCBsaW51eDI1MjIudGNvcmUvaW5jbHVkZS9saW51eC9l
bGYuaAotLS0gbGludXgtMi41LjIyL2luY2x1ZGUvbGludXgvZWxmLmgJU3VuIEp1biAxNiAyMjoz
MToyNiAyMDAyCisrKyBsaW51eDI1MjIudGNvcmUvaW5jbHVkZS9saW51eC9lbGYuaAlUdWUgSnVu
IDE4IDE1OjE3OjEyIDIwMDIKQEAgLTU3Niw2ICs1NzYsOSBAQAogI2RlZmluZSBOVF9QUlBTSU5G
TwkzCiAjZGVmaW5lIE5UX1RBU0tTVFJVQ1QJNAogI2RlZmluZSBOVF9QUkZQWFJFRwkyMAorI2Rl
ZmluZSBOVF9QUlhGUFJFRyAgICAgMHg0NmU2MmI3ZgkvKiBub3RlIG5hbWUgbXVzdCBiZSAiTElO
VVgiIGFzIHBlciBHREIgKi8KKwkJCQkJLyogZnJvbSBnZGI1LjEvaW5jbHVkZS9lbGYvY29tbW9u
LmggKi8KKwogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwogdHlwZWRl
ZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CkBAIC02MDYsNiArNjA5LDUgQEAKICNkZWZpbmUgZWxmX25v
dGUJZWxmNjRfbm90ZQogCiAjZW5kaWYKLQogCiAjZW5kaWYgLyogX0xJTlVYX0VMRl9IICovCmRp
ZmYgLXVyTiAtWCBkb250ZGlmZiBsaW51eC0yLjUuMjIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgg
bGludXgyNTIyLnRjb3JlL2luY2x1ZGUvbGludXgvZWxmY29yZS5oCi0tLSBsaW51eC0yLjUuMjIv
aW5jbHVkZS9saW51eC9lbGZjb3JlLmgJU3VuIEp1biAxNiAyMjozMTozMiAyMDAyCisrKyBsaW51
eDI1MjIudGNvcmUvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgJVHVlIEp1biAxOCAxNToxNzoxMiAy
MDAyCkBAIC04Niw0ICs4Niw0OCBAQAogI2RlZmluZSBQUkFSR1NaIEVMRl9QUkFSR1NaIAogI2Vu
ZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdGF0aWMgaW5saW5lIHZvaWQgZWxmX2NvcmVfY29w
eV9yZWdzKGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorewor
I2lmZGVmIEVMRl9DT1JFX0NPUFlfUkVHUworCUVMRl9DT1JFX0NPUFlfUkVHUygoKmVsZnJlZ3Mp
LCByZWdzKQorI2Vsc2UKKwlpZiAoc2l6ZW9mKGVsZl9ncmVnc2V0X3QpICE9IHNpemVvZihzdHJ1
Y3QgcHRfcmVncykpIHsKKwkJcHJpbnRrKCJzaXplb2YoZWxmX2dyZWdzZXRfdCkgKCVsZCkgIT0g
c2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAoJWxkKVxuIiwKKwkJCShsb25nKXNpemVvZihlbGZfZ3Jl
Z3NldF90KSwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJfSBlbHNlCisJCSooc3Ry
dWN0IHB0X3JlZ3MgKillbGZyZWdzID0gKnJlZ3M7CisjZW5kaWYKK30KKworc3RhdGljIGlubGlu
ZSBpbnQgZWxmX2NvcmVfY29weV90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZf
Z3JlZ3NldF90KiBlbGZyZWdzKQoreworI2lmZGVmIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTCisJ
CisJcmV0dXJuIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHQsIGVsZnJlZ3MpOworI2VuZGlmCisJ
cmV0dXJuIDA7Cit9CisKK2V4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVs
Zl9mcHJlZ3NldF90ICopOworCitzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tf
ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2ZwcmVnc2V0X3QgKmZwdSkKK3sKKyNp
ZmRlZiBFTEZfQ09SRV9DT1BZX0ZQUkVHUworCXJldHVybiBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0
LCBmcHUpOworI2Vsc2UKKwlyZXR1cm4gZHVtcF9mcHUoTlVMTCwgZnB1KTsKKyNlbmRpZgorfQor
CisjaWZkZWYgRUxGX0NPUkVfQ09QWV9YRlBSRUdTCitzdGF0aWMgaW5saW5lIGludCBlbGZfY29y
ZV9jb3B5X3Rhc2tfeGZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9mcHhyZWdzZXRf
dCAqeGZwdSkKK3sKKwlyZXR1cm4gRUxGX0NPUkVfQ09QWV9YRlBSRUdTKHQsIHhmcHUpOworfQor
I2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKwogI2VuZGlmIC8qIF9MSU5VWF9F
TEZDT1JFX0ggKi8KZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxpbnV4LTIuNS4yMi9pbmNsdWRlL2xp
bnV4L3NjaGVkLmggbGludXgyNTIyLnRjb3JlL2luY2x1ZGUvbGludXgvc2NoZWQuaAotLS0gbGlu
dXgtMi41LjIyL2luY2x1ZGUvbGludXgvc2NoZWQuaAlTdW4gSnVuIDE2IDIyOjMxOjI1IDIwMDIK
KysrIGxpbnV4MjUyMi50Y29yZS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJVHVlIEp1biAxOCAxNTox
NzoxMiAyMDAyCkBAIC0xMzIsNiArMTMyLDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9j
ay5oPgogCisKKy8qIGZ1bmN0aW9ucyBmb3IgcGF1c2luZyBhbmQgcmVzdW1taW5nIGZ1bmN0aW9u
cyAKKyAqIGNvbW1vbiBtbSdzIHdpdGhvdXQgdXNpbmcgc2lnbmFscy4gIFRoZXNlIGFyZSB1c2Vk
CisgKiBieSB0aGUgbXVsdGl0aHJlYWRlZCBlbGYgY29yZSBkdW1wIGNvZGUgaW4gYmluZm10X2Vs
Zi5jKi8KK2V4dGVybiB2b2lkIHRjb3JlX3N1c3BlbmRfdGhyZWFkcyggdm9pZCApOworZXh0ZXJu
IHZvaWQgdGNvcmVfcmVzdW1lX3RocmVhZHMoIHZvaWQgKTsKKworCiAvKgogICogVGhpcyBzZXJp
YWxpemVzICJzY2hlZHVsZSgpIiBhbmQgYWxzbyBwcm90ZWN0cwogICogdGhlIHJ1bi1xdWV1ZSBm
cm9tIGRlbGV0aW9ucy9tb2RpZmljYXRpb25zIChidXQKZGlmZiAtdXJOIC1YIGRvbnRkaWZmIGxp
bnV4LTIuNS4yMi9rZXJuZWwvc2NoZWQuYyBsaW51eDI1MjIudGNvcmUva2VybmVsL3NjaGVkLmMK
LS0tIGxpbnV4LTIuNS4yMi9rZXJuZWwvc2NoZWQuYwlTdW4gSnVuIDE2IDIyOjMxOjI3IDIwMDIK
KysrIGxpbnV4MjUyMi50Y29yZS9rZXJuZWwvc2NoZWQuYwlUdWUgSnVuIDE4IDE1OjI1OjM0IDIw
MDIKQEAgLTE0NCw3ICsxNDQsOCBAQAogCWxpc3RfdCBtaWdyYXRpb25fcXVldWU7CiB9IF9fX19j
YWNoZWxpbmVfYWxpZ25lZDsKIAotc3RhdGljIHN0cnVjdCBydW5xdWV1ZSBydW5xdWV1ZXNbTlJf
Q1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0YXRpYyBzdHJ1Y3QgcnVucXVldWUgcnVucXVl
dWVzW05SX0NQVVMgKyAxXSBfX2NhY2hlbGluZV9hbGlnbmVkOworI2RlZmluZSBQSEFOVE9NX0NQ
VSBOUl9DUFVTCiAKICNkZWZpbmUgY3B1X3JxKGNwdSkJCShydW5xdWV1ZXMgKyAoY3B1KSkKICNk
ZWZpbmUgdGhpc19ycSgpCQljcHVfcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKQpAQCAtMjc1LDYgKzI3
Niw5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWludCBuZWVkX3Jlc2NoZWQsIG5ycG9sbGluZzsK
IAorCWlmKCB1bmxpa2VseSghcC0+Y3B1c19hbGxvd2VkKSApCisJCQlyZXR1cm47CisJCQkKIAlw
cmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBtaW5pbWlzZSB0aGUgY2hhbmNlIG9mIHNlbmRpbmcgYW4g
aW50ZXJydXB0IHRvIHBvbGxfaWRsZSgpICovCiAJbnJwb2xsaW5nID0gdGVzdF90c2tfdGhyZWFk
X2ZsYWcocCxUSUZfUE9MTElOR19OUkZMQUcpOwpAQCAtMzcxLDcgKzM3NSw3IEBACiAJCS8qCiAJ
CSAqIElmIHN5bmMgaXMgc2V0LCBhIHJlc2NoZWRfdGFzaygpIGlzIGEgTk9PUAogCQkgKi8KLQkJ
aWYgKHAtPnByaW8gPCBycS0+Y3Vyci0+cHJpbykKKwkJaWYgKHAtPmNwdXNfYWxsb3dlZCAmJiAo
cC0+cHJpbyA8IHJxLT5jdXJyLT5wcmlvKSApCiAJCQlyZXNjaGVkX3Rhc2socnEtPmN1cnIpOwog
CQlzdWNjZXNzID0gMTsKIAl9CkBAIC0xMDU3LDYgKzEwNjEsMTMyIEBACiAKIHZvaWQgc2NoZWR1
bGluZ19mdW5jdGlvbnNfZW5kX2hlcmUodm9pZCkgeyB9CiAKKy8qCisgKiBuZWVkZWQgZm9yIGFj
Y3VyYXRlIGNvcmUgZHVtcHMgb2YgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLgorICogc2Vl
IGJpbmZtdF9lbGYuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcmVz
Y2hlZHVsZV9vdGhlcl9jcHVzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBpLCBj
cHU7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJZm9yKGk9MDsgaTwgc21wX251bV9jcHVz
OyBpKyspIHsKKwkJY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGkpOworCQlwID0gY3B1X2N1cnIoY3B1
KTsKKwkJaWYgKHAtPnRocmVhZF9pbmZvLT5jcHUhPSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJ
CXNldF90c2tfbmVlZF9yZXNjaGVkKHApOworCQkJc21wX3NlbmRfcmVzY2hlZHVsZShwLT50aHJl
YWRfaW5mby0+Y3B1KTsKKwkJfQorCX0KKyNlbmRpZgkKKwlyZXR1cm47Cit9CisKKworLyogZnVu
Y3Rpb25zIGZvciBwYXVzaW5nIGFuZCByZXN1bW1pbmcgZnVuY3Rpb25zIHdpdGggb3V0IHVzaW5n
IHNpZ25hbHMgKi8KK3ZvaWQgdGNvcmVfc3VzcGVuZF90aHJlYWRzKHZvaWQpCit7CisJdW5zaWdu
ZWQgbG9uZyBmbGFnczsKKwlydW5xdWV1ZV90ICpwaGFudG9tUTsKKwl0YXNrX3QgKnRocmVhZHNb
TlJfQ1BVU10sICpwOworCWludCBpLCBPbkNQVUNvdW50ID0gMDsKKworLy8KKy8vIGdyYWIgYWxs
IHRoZSBycV9sb2Nrcy4KKy8vIGN1cnJlbnQgaXMgdGhlIHByb2Nlc3MgZHVtcGluZyBjb3JlCisv
LyAgCisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCS8vIGF2b2lkIHBv
dGVudGlhbCByYWNlIG9uID4yIHdheSBTTVAgaWYgMyBvciBtb3JlIHRocmVhZCBwcm9jcworCS8v
IGR1bXAgY29yZSBhdCB0aGUgc2FtZSB0aW1lLgorCQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsK
KworCWZvcihpPTA7IGk8IHNtcF9udW1fY3B1czsgaSsrKSB7CisJCXNwaW5fbG9jaygmY3B1X3Jx
KGkpLT5sb2NrKTsKKwl9CisKKwljdXJyZW50LT5jcHVzX2FsbG93ZWQgPSAxVUwgPDwgY3VycmVu
dC0+dGhyZWFkX2luZm8tPmNwdTsKKwkvLyBwcmV2ZW50IG1pZ3JhaW9uIG9mIGR1bXBpbmcgcHJv
Y2VzcyBtYWtpbmcgbGlmZSBjb21wbGljYXRlZC4KKworCXBoYW50b21RID0gY3B1X3JxKFBIQU5U
T01fQ1BVKTsgCisJc3Bpbl9sb2NrKCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVzY2hlZHVsZV9v
dGhlcl9jcHVzKCk7CisJLy8gdGhpcyBpcyBhbiBvcHRpb25hbCBJUEksIGJ1dCBpdCBtYWtlcyBm
b3IgdGhlIG1vc3QgYWNjdXJhdGUgY29yZSBmaWxlcyBwb3NzaWJsZS4KKwkKKwlyZWFkX2xvY2so
JnRhc2tsaXN0X2xvY2spOworCisJZm9yX2VhY2hfdGFzayhwKSB7CisJCWlmIChjdXJyZW50LT5t
bSA9PSBwLT5tbSAmJiBjdXJyZW50ICE9IHApIHsKKwkJCWlmKCBwID09IHRhc2tfcnEocCktPmN1
cnIgKSB7CisJCQkJLy90aGVuIHJlbWVtYmVyIGl0IGZvciBsYXRlciB1cyBvZiBzZXRfY3B1c19h
bGxvd2VkCisJCQkJdGhyZWFkc1tPbkNQVUNvdW50XSA9IHA7CisJCQkJcC0+Y3B1c19hbGxvd2Vk
ID0gMDsvL3ByZXZlbnQgbG9hZCBiYWxhbmNlIGZyb20gbW92aW5nIHRoZXNlIGd1eXMuCisJCQkJ
T25DUFVDb3VudCArKzsKKwkJCX0gZWxzZSB7CisJCQkJLy8gd2UgbWFudWFseSBtb3ZlIHRoZSBw
cm9jZXNzIHRvIHRoZSBwaGFudG9tIHJ1biBxdWV1ZS4KKworCQkJCWlmIChwLT5hcnJheSkgewor
CQkJCQlkZWFjdGl2YXRlX3Rhc2socCwgdGFza19ycShwKSk7CisJCQkJCWFjdGl2YXRlX3Rhc2so
cCwgcGhhbnRvbVEpOworCQkJCX0KKwkJCQlwLT50aHJlYWRfaW5mby0+Y3B1ID0gUEhBTlRPTV9D
UFU7CisJCQkJcC0+Y3B1c19hbGxvd2VkID0gMDsvL3ByZXZlbnQgbG9hZCBiYWxhbmNlIGZyb20g
bW92aW5nIHRoZXNlIGd1eXMuCisJCQl9CisJCX0KKwl9CisJcmVhZF91bmxvY2soJnRhc2tsaXN0
X2xvY2spOworCisJc3Bpbl91bmxvY2soJnBoYW50b21RLT5sb2NrKTsKKwlmb3IoaT1zbXBfbnVt
X2NwdXMtMTsgMDw9IGk7IGktLSkgeworCQlzcGluX3VubG9jaygmY3B1X3JxKGkpLT5sb2NrKTsK
Kwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlmb3IoIGkgPSAwOyBpPE9uQ1BV
Q291bnQ7IGkrKykgeworCQlzZXRfY3B1c19hbGxvd2VkKHRocmVhZHNbaV0sIDApOworCX0KKwkK
Kwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKK30KKwordm9pZCB0Y29yZV9yZXN1
bWVfdGhyZWFkcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcnVucXVldWVfdCAq
cGhhbnRvbVE7CisJdGFza190ICpwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXBoYW50
b21RID0gY3B1X3JxKFBIQU5UT01fQ1BVKTsKKworCXNwaW5fbG9jaygmdGFza19ycShjdXJyZW50
KS0+bG9jayk7CisJc3Bpbl9sb2NrKCZwaGFudG9tUS0+bG9jayk7CisJCisJcmVhZF9sb2NrKCZ0
YXNrbGlzdF9sb2NrKTsKKwlmb3JfZWFjaF90YXNrKHApIHsKKwkJaWYgKGN1cnJlbnQtPm1tID09
IHAtPm1tICYmIGN1cnJlbnQgIT0gcCkgeworCQkJcC0+Y3B1c19hbGxvd2VkID0gMVVMIDw8IGN1
cnJlbnQtPnRocmVhZF9pbmZvLT5jcHU7CisJCQlpZiAocC0+YXJyYXkpIHsKKwkJCQlkZWFjdGl2
YXRlX3Rhc2socCxwaGFudG9tUSk7CisJCQkJYWN0aXZhdGVfdGFzayhwLCB0YXNrX3JxKGN1cnJl
bnQpKTsKKwkJCX0KKwkJCXAtPnRocmVhZF9pbmZvLT5jcHUgPSBjdXJyZW50LT50aHJlYWRfaW5m
by0+Y3B1OworCQl9CisJfQorCisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJc3Bp
bl91bmxvY2soJnBoYW50b21RLT5sb2NrKTsKKwlzcGluX3VubG9jaygmdGFza19ycShjdXJyZW50
KS0+bG9jayk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworCiB2b2lkIHNl
dF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFn
czsKQEAgLTE2NDEsOSArMTc3MSw5IEBACiB7CiAJcnVucXVldWVfdCAqcnE7CiAJaW50IGksIGos
IGs7CisJcHJpb19hcnJheV90ICphcnJheTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBp
KyspIHsKLQkJcHJpb19hcnJheV90ICphcnJheTsKIAogCQlycSA9IGNwdV9ycShpKTsKIAkJcnEt
PmFjdGl2ZSA9IHJxLT5hcnJheXM7CkBAIC0xNjYxLDYgKzE3OTEsMjcgQEAKIAkJCV9fc2V0X2Jp
dChNQVhfUFJJTywgYXJyYXktPmJpdG1hcCk7CiAJCX0KIAl9CisKKyAKKwlpID0gUEhBTlRPTV9D
UFU7CisJcnEgPSBjcHVfcnEoaSk7CisJcnEtPmFjdGl2ZSA9IHJxLT5hcnJheXM7CisJcnEtPmV4
cGlyZWQgPSBycS0+YXJyYXlzICsgMTsKKwlycS0+Y3VyciA9IE5VTEw7CisJc3Bpbl9sb2NrX2lu
aXQoJnJxLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisK
Kwlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCWFycmF5ID0gcnEtPmFycmF5cyArIGo7CisJ
CWZvciAoayA9IDA7IGsgPCBNQVhfUFJJTzsgaysrKSB7CisJCQlJTklUX0xJU1RfSEVBRChhcnJh
eS0+cXVldWUgKyBrKTsKKwkJCV9fY2xlYXJfYml0KGssIGFycmF5LT5iaXRtYXApOworCQl9CisJ
CS8vIGRlbGltaXRlciBmb3IgYml0c2VhcmNoCisJCV9fc2V0X2JpdChNQVhfUFJJTywgYXJyYXkt
PmJpdG1hcCk7CisJfQorCisKIAkvKgogCSAqIFdlIGhhdmUgdG8gZG8gYSBsaXR0bGUgbWFnaWMg
dG8gZ2V0IHRoZSBmaXJzdAogCSAqIHByb2Nlc3MgcmlnaHQgaW4gU01QIG1vZGUuCkBAIC0xNzIx
LDkgKzE4NzIsMTEgQEAKIAltaWdyYXRpb25fcmVxX3QgcmVxOwogCXJ1bnF1ZXVlX3QgKnJxOwog
Ci0JbmV3X21hc2sgJj0gY3B1X29ubGluZV9tYXA7Ci0JaWYgKCFuZXdfbWFzaykKLQkJQlVHKCk7
CisJaWYobmV3X21hc2speyAvLyBjYW4gYmUgTyBmb3IgVENvcmUgcHJvY2VzcyBzdXNwZW5kcwor
CQluZXdfbWFzayAmPSBjcHVfb25saW5lX21hcDsKKwkJaWYgKCFuZXdfbWFzaykKKwkJCUJVRygp
OworCX0KIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFn
cyk7CkBAIC0xODA0LDcgKzE5NTcsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEt
PmxvY2ssIGZsYWdzKTsKIAogCQlwID0gcmVxLT50YXNrOwotCQljcHVfZGVzdCA9IF9fZmZzKHAt
PmNwdXNfYWxsb3dlZCk7CisKKwkJaWYoIHAtPmNwdXNfYWxsb3dlZCkKKwkJCWNwdV9kZXN0ID0g
X19mZnMocC0+Y3B1c19hbGxvd2VkKTsKKwkJZWxzZQorCQkJY3B1X2Rlc3QgPSBQSEFOVE9NX0NQ
VTsKKwogCQlycV9kZXN0ID0gY3B1X3JxKGNwdV9kZXN0KTsKIHJlcGVhdDoKIAkJY3B1X3NyYyA9
IHAtPnRocmVhZF9pbmZvLT5jcHU7CkJpbmFyeSBmaWxlcyBsaW51eC0yLjUuMjIvc2NyaXB0cy9m
aXhkZXAgYW5kIGxpbnV4MjUyMi50Y29yZS9zY3JpcHRzL2ZpeGRlcCBkaWZmZXIK

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