Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Aug 2010 21:40:00 +0530
From:      "Jayachandran C." <c.jayachandran@gmail.com>
To:        Juli Mallett <jmallett@freebsd.org>, "M. Warner Losh" <imp@bsdimp.com>, Alan Cox <alc@cs.rice.edu>,  Randall Stewart <rrs@lakerest.net>, Neel Natu <neelnatu@gmail.com>
Cc:        freebsd-mips@freebsd.org
Subject:   [PATCH] Move from kseg0 to xkphys for 64 bit.
Message-ID:  <AANLkTinc2P7mO2qu%2BAiDtB=%2BoH3Winfc0AOAUxXS2XBh@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--0016367f9f6a8ae7a3048df31007
Content-Type: text/plain; charset=ISO-8859-1

I've attached the changes to move the 64bit port to use 64bit XKPHYS
mapping of the physical memory instead of the current KSEG0.  With
this changes the 64bit port will use just one freelist, and can
allocate page table pages from anywhere in the memory.

The changes are mainly to introduce macros like
MIPS_PHYS_TO_DIRECT(pa), MIPS_DIRECT_TO_PHYS(), which will use KSEG0
in 32 bit compilation and XKPHYS in 64 bit compilation. I also ended
up changing the macro based PMAP_LMEM_MAP1(), PMAP_LMEM_MAP2(),
PMAP_LMEM_UNMAP() to inline functions.

I have also introduced a macro MIPS_DIRECT_MAPPABLE(pa), which will
further reduce the cases in which we will need to have a special case
for 64 bit compilation.

Please let me know your comments.

Thanks,
JC.

--0016367f9f6a8ae7a3048df31007
Content-Type: application/octet-stream; name="64-xkphys.patch"
Content-Disposition: attachment; filename="64-xkphys.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gcxihmsd0

SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvY3B1cmVncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz
L2luY2x1ZGUvY3B1cmVncy5oCShyZXZpc2lvbiAyMTEzMzIpCisrKyBzeXMvbWlwcy9pbmNsdWRl
L2NwdXJlZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsMTAgQEAKICAqIENhY2hpbmcg
b2YgbWFwcGVkIGFkZHJlc3NlcyBpcyBjb250cm9sbGVkIGJ5IGJpdHMgaW4gdGhlIFRMQiBlbnRy
eS4KICAqLwogCi0jZGVmaW5lCU1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTICAgICAgICAgKDB4MjAw
MDAwMDApCisjZGVmaW5lCU1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTCQkoMHgyMDAwMDAwMCkKICNk
ZWZpbmUJTUlQU19QSFlTX01BU0sJCQkoMHgxZmZmZmZmZikKKyNkZWZpbmUJTUlQU19YS1BIWVNf
TEFSR0VTVF9QSFlTCSgweDEwMDAwMDAwMDAwKQorI2RlZmluZQlNSVBTX1hQSFlTX01BU0sJCQko
MHgwZmZmZmZmZmZmZikKIAogI2lmbmRlZiBMT0NPUkUKICNkZWZpbmUJTUlQU19LVVNFR19TVEFS
VAkJMHgwMDAwMDAwMApAQCAtMTA3LDkgKzEwOSw2IEBACiAjZGVmaW5lCU1JUFNfSVNfVkFMSURf
UFRSKHgpCQkoTUlQU19JU19LU0VHMF9BRERSKHgpIHx8IFwKIAkJCQkJICAgIE1JUFNfSVNfS1NF
RzFfQUREUih4KSkKIAotI2RlZmluZQlNSVBTX1hLUEhZU19TVEFSVAkJMHg4MDAwMDAwMDAwMDAw
MDAwCi0jZGVmaW5lCU1JUFNfWEtQSFlTX0VORAkJCTB4YmZmZmZmZmZmZmZmZmZmZgotCiAvKgog
ICogQ2FjaGUgQ29oZXJlbmN5IEF0dHJpYnV0ZXM6CiAgKglVQzoJVW5jYWNoZWQuCkBAIC0xODAs
MTkgKzE3OSwzNCBAQAogI2RlZmluZQlNSVBTX1BIWVNfVE9fWEtQSFlTX1VOQ0FDSEVEKHgpIFwK
IAkoKDB4MlVMTCA8PCA2MikgfCAoKHVuc2lnbmVkIGxvbmcgbG9uZykoTUlQU19DQ0FfVU5DQUNI
RUQpIDw8IDU5KSB8ICh4KSkKIAotI2RlZmluZQlNSVBTX1hLUEhZU19UT19QSFlTKHgpCQkoKHgp
ICYgMHgwN2ZmZmZmZmZmZmZmZmZmVUxMKQorI2RlZmluZQlNSVBTX1hLUEhZU19UT19QSFlTKHgp
CQkoKHVpbnRwdHJfdCkoeCkgJiAweDA3ZmZmZmZmZmZmZmZmZmYpCiAKKyNkZWZpbmUJTUlQU19Y
S1BIWVNfU1RBUlQJCTB4ODAwMDAwMDAwMDAwMDAwMAorI2RlZmluZQlNSVBTX1hLUEhZU19FTkQJ
CQkweGJmZmZmZmZmZmZmZmZmZmYKICNkZWZpbmUJTUlQU19YVVNFR19TVEFSVAkJMHgwMDAwMDAw
MDAwMDAwMDAwCiAjZGVmaW5lCU1JUFNfWFVTRUdfRU5ECQkJMHgwMDAwMDEwMDAwMDAwMDAwCi0K
ICNkZWZpbmUJTUlQU19YS1NFR19TVEFSVAkJMHhjMDAwMDAwMDAwMDAwMDAwCiAjZGVmaW5lCU1J
UFNfWEtTRUdfRU5ECQkJMHhjMDAwMDBmZjgwMDAwMDAwCiAKKyNpZmRlZiBfX21pcHNfbjY0Cisj
ZGVmaW5lCU1JUFNfRElSRUNUX01BUFBBQkxFKHBhKQkxCisjZGVmaW5lCU1JUFNfUEhZU19UT19E
SVJFQ1QocGEpCQlNSVBTX1BIWVNfVE9fWEtQSFlTX0NBQ0hFRChwYSkKKyNkZWZpbmUJTUlQU19Q
SFlTX1RPX0RJUkVDVF9VTkNBQ0hFRChwYSkJTUlQU19QSFlTX1RPX1hLUEhZU19VTkNBQ0hFRChw
YSkKKyNkZWZpbmUJTUlQU19ESVJFQ1RfVE9fUEhZUyh2YSkJCU1JUFNfWEtQSFlTX1RPX1BIWVMo
dmEpCisjZWxzZQorI2RlZmluZQlNSVBTX0RJUkVDVF9NQVBQQUJMRShwYSkJKChwYSkgPCBNSVBT
X0tTRUcwX0xBUkdFU1RfUEhZUykKKyNkZWZpbmUJTUlQU19QSFlTX1RPX0RJUkVDVChwYSkJCU1J
UFNfUEhZU19UT19LU0VHMChwYSkKKyNkZWZpbmUJTUlQU19QSFlTX1RPX0RJUkVDVF9VTkNBQ0hF
RChwYSkJTUlQU19QSFlTX1RPX0tTRUcxKHBhKQorI2RlZmluZQlNSVBTX0RJUkVDVF9UT19QSFlT
KHZhKQkJTUlQU19LU0VHMF9UT19QSFlTKHZhKQorI2VuZGlmCisKIC8qIENQVSBkZXBlbmRlbnQg
bXRjMCBoYXphcmQgaG9vayAqLwogI2lmZGVmIENQVV9DTk1JUFMKICNkZWZpbmUJQ09QMF9TWU5D
ICBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsKICNlbGlmIGRlZmluZWQoQ1BVX1NCMSkKICNkZWZp
bmUgQ09QMF9TWU5DICBzc25vcDsgc3Nub3A7IHNzbm9wOyBzc25vcDsgc3Nub3A7IHNzbm9wOyBz
c25vcDsgc3Nub3A7IHNzbm9wCisjZWxpZiBkZWZpbmVkKENQVV9STUkpCisjZGVmaW5lIENPUDBf
U1lOQwogI2Vsc2UKIC8qCiAgKiBQaWNrIGEgcmVhc29uYWJsZSBkZWZhdWx0IGJhc2VkIG9uIHRo
ZSAidHlwaWNhbCIgc3BhY2luZyBkZXNjcmliZWQgaW4gdGhlCkluZGV4OiBzeXMvbWlwcy9pbmNs
dWRlL3ZtcGFyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9pbmNsdWRlL3ZtcGFyYW0uaAko
cmV2aXNpb24gMjExMzMyKQorKysgc3lzL21pcHMvaW5jbHVkZS92bXBhcmFtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUJVk1fTUlOVVNFUl9BRERSRVNTCSgodm1f
b2Zmc2V0X3QpMHgwMDAwMDAwMCkKICNkZWZpbmUJVk1fTUFYX01NQVBfQUREUglWTV9NQVhVU0VS
X0FERFJFU1MKIAotI2lmIGRlZmluZWQoX19taXBzX242NCkKKyNpZmRlZiBfX21pcHNfbjY0CiAj
ZGVmaW5lCVZNX01BWFVTRVJfQUREUkVTUwkoVk1fTUlOVVNFUl9BRERSRVNTICsgKE5QREVQRyAq
IE5CU0VHKSkKICNkZWZpbmUJVk1fTUlOX0tFUk5FTF9BRERSRVNTCSgodm1fb2Zmc2V0X3QpMHhj
MDAwMDAwMDAwMDAwMDAwKQogI2RlZmluZQlWTV9NQVhfS0VSTkVMX0FERFJFU1MJKFZNX01JTl9L
RVJORUxfQUREUkVTUyArIChOUERFUEcgKiBOQlNFRykpCkBAIC0xODUsNyArMTg1LDcgQEAKICAq
CSAgYWxsb2NhdGlvbnMgdXNlIEhJR0hNRU0gaWYgYXZhaWxhYmxlLCBhbmQgdGhlbiBERUZBVUxU
LiAKICAqCS0gSElHSE1FTSBmb3Igb3RoZXIgcGFnZXMgCiAgKi8KLSNpZiAwIC8qIE5vdCB5ZXQs
IGNoYW5nZSBuNjQgdG8gdXNlIHhrcGh5cyAqLworI2lmZGVmIF9fbWlwc19uNjQKICNkZWZpbmUJ
Vk1fTkZSRUVMSVNUCQkxCiAjZGVmaW5lCVZNX0ZSRUVMSVNUX0RFRkFVTFQJMAogI2RlZmluZQlW
TV9GUkVFTElTVF9ESVJFQ1QJVk1fRlJFRUxJU1RfREVGQVVMVApJbmRleDogc3lzL21pcHMvbWlw
cy9wbWFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvbWlwcy9wbWFwLmMJKHJldmlzaW9uIDIx
MTMzMikKKysrIHN5cy9taXBzL21pcHMvcG1hcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNzUg
KzE5OCwxNDMgQEAKIHN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uKHZvaWQgKmFy
Zyk7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKF9fbWlwc19uNjQpCisjaWZuZGVmIF9fbWlwc19u
NjQKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBmb3IgaGlnaCBtZW1vcnkgKG1lbW9yeSBhYm92
ZSA1MTJNZWcgaW4gMzIgYml0KQorICogVGhpcyBtZW1vcnkgYXJlYSBkb2VzIG5vdCBoYXZlIGRp
cmVjdCBtYXBwaW5nLCBzbyB3ZSBhIG1lY2hhbmlzbSB0byBkbworICogdGVtcG9yYXJ5IHBlci1D
UFUgbWFwcGluZyB0byBhY2Nlc3MgdGhlc2UgYWRkcmVzc2VzLgorICoKKyAqIEF0IGJvb3R1cCB3
ZSByZXNlcnZlIDIgdmlydHVhbCBwYWdlcyBwZXIgQ1BVIGZvciBtYXBwaW5nIGhpZ2htZW0gcGFn
ZXMsIHRvIAorICogYWNjZXNzIGEgaGlnaG1lbSBwaHlzaWNhbCBhZGRyZXNzIG9uIGEgQ1BVLCB3
ZSB3aWxsIGRpc2FibGUgaW50ZXJydXB0cyBhbmQKKyAqIGFkZCB0aGUgbWFwcGluZyBmcm9tIHRo
ZSByZXNlcnZlZCB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBDUFUgdG8gdGhlIHBoeXNpY2FsCisg
KiBhZGRyZXNzIGluIHRoZSBrZXJuZWwgcGFnZXRhYmxlLgorICovCiBzdHJ1Y3QgbG9jYWxfc3lz
bWFwcyB7Ci0Jdm1fb2Zmc2V0X3QgYmFzZTsKLQl1aW50MTZfdCB2YWxpZDEsIHZhbGlkMjsKKwl2
bV9vZmZzZXRfdAliYXNlOworCXVpbnQzMl90CXNhdmVkX2ludHI7CisJdWludDE2X3QJdmFsaWQx
LCB2YWxpZDI7CiB9OwotCi0vKiBUaGlzIHN0cnVjdHVyZSBpcyBmb3IgbGFyZ2UgbWVtb3J5Ci0g
KiBhYm92ZSA1MTJNZWcuIFdlIGNhbid0IChpbiAzMiBiaXQgbW9kZSkKLSAqIGp1c3QgdXNlIHRo
ZSBkaXJlY3QgbWFwcGVkIE1JUFNfS1NFRzBfVE9fUEhZUygpCi0gKiBtYWNyb3Mgc2luY2Ugd2Ug
Y2FuJ3Qgc2VlIHRoZSBtZW1vcnkgYW5kIG11c3QKLSAqIG1hcCBpdCBpbiB3aGVuIHdlIG5lZWQg
dG8gYWNjZXNzIGl0LiBJbiA2NAotICogYml0IG1vZGUgdGhpcyBnb2VzIGF3YXkuCi0gKi8KIHN0
YXRpYyBzdHJ1Y3QgbG9jYWxfc3lzbWFwcyBzeXNtYXBfbG1lbVtNQVhDUFVdOwogCi0jZGVmaW5l
CVBNQVBfTE1FTV9NQVAxKHZhLCBwaHlzKQkJCQkJXAotCWludCBjcHU7CQkJCQkJCVwKLQlzdHJ1
Y3QgbG9jYWxfc3lzbWFwcyAqc3lzbTsJCQkJCVwKLQlwdF9lbnRyeV90ICpwdGUsIG5wdGU7CQkJ
CQkJXAotCQkJCQkJCQkJXAotCWludHIgPSBpbnRyX2Rpc2FibGUoKTsJCQkJCQlcCi0JY3B1ID0g
UENQVV9HRVQoY3B1aWQpOwkJCQkJCVwKLQlzeXNtID0gJnN5c21hcF9sbWVtW2NwdV07CQkJCQlc
Ci0JdmEgPSBzeXNtLT5iYXNlOwkJCQkJCVwKLQlucHRlID0gVExCTE9fUEFfVE9fUEZOKHBoeXMp
IHwJCQkJCVwKLQkgICAgUFRFX0QgfCBQVEVfViB8IFBURV9HIHwgUFRFX1cgfCBQVEVfQ19DQUNI
RTsJCVwKLQlwdGUgPSBwbWFwX3B0ZShrZXJuZWxfcG1hcCwgdmEpOwkJCQlcCi0JKnB0ZSA9IG5w
dGU7CQkJCQkJCVwKLQlzeXNtLT52YWxpZDEgPSAxCitzdGF0aWMgX19pbmxpbmUgdm9pZAorcG1h
cF9hbGxvY19sbWVtX21hcCh2b2lkKQoreworCWludCBpOwogCi0jZGVmaW5lCVBNQVBfTE1FTV9N
QVAyKHZhMSwgcGh5czEsIHZhMiwgcGh5czIpCQkJCVwKLQlpbnQgY3B1OwkJCQkJCQlcCi0Jc3Ry
dWN0IGxvY2FsX3N5c21hcHMgKnN5c207CQkJCQlcCi0JcHRfZW50cnlfdCAqcHRlLCBucHRlOwkJ
CQkJCVwKLQkJCQkJCQkJCVwKLQlpbnRyID0gaW50cl9kaXNhYmxlKCk7CQkJCQkJXAotCWNwdSA9
IFBDUFVfR0VUKGNwdWlkKTsJCQkJCQlcCi0Jc3lzbSA9ICZzeXNtYXBfbG1lbVtjcHVdOwkJCQkJ
XAotCXZhMSA9IHN5c20tPmJhc2U7CQkJCQkJXAotCXZhMiA9IHN5c20tPmJhc2UgKyBQQUdFX1NJ
WkU7CQkJCQlcCi0JbnB0ZSA9IFRMQkxPX1BBX1RPX1BGTihwaHlzMSkgfAkJCQkJXAotCSAgICBQ
VEVfRCB8IFBURV9WIHwgUFRFX0cgfCBQVEVfVyB8IFBURV9DX0NBQ0hFOwkJXAotCXB0ZSA9IHBt
YXBfcHRlKGtlcm5lbF9wbWFwLCB2YTEpOwkJCQlcCi0JKnB0ZSA9IG5wdGU7CQkJCQkJCVwKLQlu
cHRlID0gIFRMQkxPX1BBX1RPX1BGTihwaHlzMikgfAkJCQlcCi0JICAgIFBURV9EIHwgUFRFX1Yg
fCBQVEVfRyB8IFBURV9XIHwgUFRFX0NfQ0FDSEU7CQlcCi0JcHRlID0gcG1hcF9wdGUoa2VybmVs
X3BtYXAsIHZhMik7CQkJCVwKLQkqcHRlID0gbnB0ZTsJCQkJCQkJXAotCXN5c20tPnZhbGlkMSA9
IDE7CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBNQVhDUFU7IGkrKykgeworCQlzeXNtYXBfbG1l
bVtpXS5iYXNlID0gdmlydHVhbF9hdmFpbDsKKwkJdmlydHVhbF9hdmFpbCArPSBQQUdFX1NJWkUg
KiAyOworCQlzeXNtYXBfbG1lbVtpXS52YWxpZDEgPSBzeXNtYXBfbG1lbVtpXS52YWxpZDIgPSAw
OworCX0KK30KKworc3RhdGljIF9faW5saW5lIHZtX29mZnNldF90CitwbWFwX2xtZW1fbWFwMSh2
bV9wYWRkcl90IHBoeXMpCit7CisJc3RydWN0IGxvY2FsX3N5c21hcHMgKnN5c207CisJcHRfZW50
cnlfdCAqcHRlLCBucHRlOworCXZtX29mZnNldF90IHZhOworCXVpbnQzMl90IGludHI7CisJaW50
IGNwdTsKKworCWludHIgPSBpbnRyX2Rpc2FibGUoKTsKKwljcHUgPSBQQ1BVX0dFVChjcHVpZCk7
CisJc3lzbSA9ICZzeXNtYXBfbG1lbVtjcHVdOworCXN5c20tPnNhdmVkX2ludHIgPSBpbnRyOwor
CXZhID0gc3lzbS0+YmFzZTsKKwlucHRlID0gVExCTE9fUEFfVE9fUEZOKHBoeXMpIHwKKwkgICAg
UFRFX0QgfCBQVEVfViB8IFBURV9HIHwgUFRFX1cgfCBQVEVfQ19DQUNIRTsKKwlwdGUgPSBwbWFw
X3B0ZShrZXJuZWxfcG1hcCwgdmEpOworCSpwdGUgPSBucHRlOworCXN5c20tPnZhbGlkMSA9IDE7
CisJcmV0dXJuIHZhOworfQorCitzdGF0aWMgX19pbmxpbmUgdm1fb2Zmc2V0X3QKK3BtYXBfbG1l
bV9tYXAyKHZtX3BhZGRyX3QgcGh5czEsIHZtX3BhZGRyX3QgcGh5czIpCit7CisJc3RydWN0IGxv
Y2FsX3N5c21hcHMgKnN5c207CisJcHRfZW50cnlfdCAqcHRlLCBucHRlOworCXZtX29mZnNldF90
IHZhMSwgdmEyOworCXVpbnQzMl90IGludHI7CisJaW50IGNwdTsKKworCWludHIgPSBpbnRyX2Rp
c2FibGUoKTsKKwljcHUgPSBQQ1BVX0dFVChjcHVpZCk7CisJc3lzbSA9ICZzeXNtYXBfbG1lbVtj
cHVdOworCXN5c20tPnNhdmVkX2ludHIgPSBpbnRyOworCXZhMSA9IHN5c20tPmJhc2U7CisJdmEy
ID0gc3lzbS0+YmFzZSArIFBBR0VfU0laRTsKKwlucHRlID0gVExCTE9fUEFfVE9fUEZOKHBoeXMx
KSB8CisJICAgIFBURV9EIHwgUFRFX1YgfCBQVEVfRyB8IFBURV9XIHwgUFRFX0NfQ0FDSEU7CisJ
cHRlID0gcG1hcF9wdGUoa2VybmVsX3BtYXAsIHZhMSk7CisJKnB0ZSA9IG5wdGU7CisJbnB0ZSA9
ICBUTEJMT19QQV9UT19QRk4ocGh5czIpIHwKKwkgICAgUFRFX0QgfCBQVEVfViB8IFBURV9HIHwg
UFRFX1cgfCBQVEVfQ19DQUNIRTsKKwlwdGUgPSBwbWFwX3B0ZShrZXJuZWxfcG1hcCwgdmEyKTsK
KwkqcHRlID0gbnB0ZTsKKwlzeXNtLT52YWxpZDEgPSAxOwogCXN5c20tPnZhbGlkMiA9IDE7CisJ
cmV0dXJuIHZhMTsKK30KIAotI2RlZmluZQlQTUFQX0xNRU1fVU5NQVAoKQkJCQkJCVwKLQlwdGUg
PSBwbWFwX3B0ZShrZXJuZWxfcG1hcCwgc3lzbS0+YmFzZSk7CQkJXAotCSpwdGUgPSBQVEVfRzsJ
CQkJCQkJXAotCXRsYl9pbnZhbGlkYXRlX2FkZHJlc3Moa2VybmVsX3BtYXAsIHN5c20tPmJhc2Up
OwkJXAotCXN5c20tPnZhbGlkMSA9IDA7CQkJCQkJXAotCXB0ZSA9IHBtYXBfcHRlKGtlcm5lbF9w
bWFwLCBzeXNtLT5iYXNlICsgUEFHRV9TSVpFKTsJCVwKLQkqcHRlID0gUFRFX0c7CQkJCQkJCVwK
LQl0bGJfaW52YWxpZGF0ZV9hZGRyZXNzKGtlcm5lbF9wbWFwLCBzeXNtLT5iYXNlICsgUEFHRV9T
SVpFKTsJXAotCXN5c20tPnZhbGlkMiA9IDA7CQkJCQkJXAotCWludHJfcmVzdG9yZShpbnRyKQot
I2VuZGlmCitzdGF0aWMgX19pbmxpbmUgdm9pZAorcG1hcF9sbWVtX3VubWFwKHZvaWQpCit7CisJ
c3RydWN0IGxvY2FsX3N5c21hcHMgKnN5c207CisJcHRfZW50cnlfdCAqcHRlOworCWludCBjcHU7
CiAKKwljcHUgPSBQQ1BVX0dFVChjcHVpZCk7CisJc3lzbSA9ICZzeXNtYXBfbG1lbVtjcHVdOwor
CXB0ZSA9IHBtYXBfcHRlKGtlcm5lbF9wbWFwLCBzeXNtLT5iYXNlKTsKKwkqcHRlID0gUFRFX0c7
CisJdGxiX2ludmFsaWRhdGVfYWRkcmVzcyhrZXJuZWxfcG1hcCwgc3lzbS0+YmFzZSk7CisJc3lz
bS0+dmFsaWQxID0gMDsKKwlpZiAoc3lzbS0+dmFsaWQyKSB7CisJCXB0ZSA9IHBtYXBfcHRlKGtl
cm5lbF9wbWFwLCBzeXNtLT5iYXNlICsgUEFHRV9TSVpFKTsKKwkJKnB0ZSA9IFBURV9HOworCQl0
bGJfaW52YWxpZGF0ZV9hZGRyZXNzKGtlcm5lbF9wbWFwLCBzeXNtLT5iYXNlICsgUEFHRV9TSVpF
KTsKKwkJc3lzbS0+dmFsaWQyID0gMDsKKwl9CisJaW50cl9yZXN0b3JlKHN5c20tPnNhdmVkX2lu
dHIpOworfQorI2Vsc2UgIC8qIF9fbWlwc19uNjQgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQK
K3BtYXBfYWxsb2NfbG1lbV9tYXAodm9pZCkKK3sKK30KKworc3RhdGljIF9faW5saW5lIHZtX29m
ZnNldF90CitwbWFwX2xtZW1fbWFwMSh2bV9wYWRkcl90IHBoeXMpCit7CisKKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgX19pbmxpbmUgdm1fb2Zmc2V0X3QKK3BtYXBfbG1lbV9tYXAyKHZtX3Bh
ZGRyX3QgcGh5czEsIHZtX3BhZGRyX3QgcGh5czIpCit7CisKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgX19pbmxpbmUgdm1fb2Zmc2V0X3QgCitwbWFwX2xtZW1fdW5tYXAodm9pZCkKK3sKKwor
CXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyogIV9fbWlwc19uNjQgKi8KKwogLyoKICAqIFBhZ2Ug
dGFibGUgZW50cnkgbG9va3VwIHJvdXRpbmVzLgogICovCiBzdGF0aWMgX19pbmxpbmUgcGRfZW50
cnlfdCAqCiBwbWFwX3NlZ21hcChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEpCiB7CisKIAly
ZXR1cm4gKCZwbWFwLT5wbV9zZWd0YWJbcG1hcF9zZWdfaW5kZXgodmEpXSk7CiB9CiAKQEAgLTI5
NSwxMiArMzYzLDE0IEBACiBzdGF0aWMgX19pbmxpbmUgcGRfZW50cnlfdCAqCiBwbWFwX3BkcGVf
dG9fcGRlKHBkX2VudHJ5X3QgKnBkcGUsIHZtX29mZnNldF90IHZhKQogeworCiAJcmV0dXJuIHBk
cGU7CiB9CiAKIHN0YXRpYyBfX2lubGluZSAKIHBkX2VudHJ5X3QgKnBtYXBfcGRlKHBtYXBfdCBw
bWFwLCB2bV9vZmZzZXRfdCB2YSkKIHsKKwogCXJldHVybiBwbWFwX3NlZ21hcChwbWFwLCB2YSk7
CiB9CiAjZW5kaWYKQEAgLTM1MSwxMCArNDIxLDkgQEAKIAogCXBhID0gcGh5c19hdmFpbFswXTsK
IAlwaHlzX2F2YWlsWzBdICs9IHNpemU7Ci0JaWYgKHBhID49IE1JUFNfS1NFRzBfTEFSR0VTVF9Q
SFlTKSB7CisJaWYgKE1JUFNfRElSRUNUX01BUFBBQkxFKHBhKSA9PSAwKQogCQlwYW5pYygiT3V0
IG9mIG1lbW9yeSBiZWxvdyA1MTJNZWc/Iik7Ci0JfQotCXZhID0gTUlQU19QSFlTX1RPX0tTRUcw
KHBhKTsKKwl2YSA9IE1JUFNfUEhZU19UT19ESVJFQ1QocGEpOwogCWJ6ZXJvKChjYWRkcl90KXZh
LCBzaXplKTsKIAlyZXR1cm4gdmE7CiB9CkBAIC00MjYsOSArNDk1LDcgQEAKIHBtYXBfYm9vdHN0
cmFwKHZvaWQpCiB7CiAJaW50IGk7Ci0jaWYgIWRlZmluZWQoX19taXBzX242NCkKLQlpbnQgbWVt
b3J5X2xhcmdlcl90aGFuXzUxMm1lZyA9IDA7Ci0jZW5kaWYKKwlpbnQgbmVlZF9sb2NhbF9tYXBw
aW5ncyA9IDA7IAogCiAJLyogU29ydC4gKi8KIGFnYWluOgpAQCAtNDU2LDEwICs1MjMsMTMgQEAK
IAkJfQogCX0KIAotI2lmICFkZWZpbmVkKF9fbWlwc19uNjQpCi0JaWYgKHBoeXNfYXZhaWxbaSAt
IDFdID49IE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKQotCQltZW1vcnlfbGFyZ2VyX3RoYW5fNTEy
bWVnID0gMTsKLSNlbmRpZgorICAgICAgIAkvKgorCSAqIEluIDMyIGJpdCwgd2UgbWF5IGhhdmUg
bWVtb3J5IHdoaWNoIGNhbm5vdCBiZSBtYXBwZWQgZGlyZWN0bHkKKwkgKiB0aGlzIG1lbW9yeSB3
aWxsIG5lZWQgdGVtcG9yYXJ5IG1hcHBpbmcgYmVmb3JlIGl0IGNhbiBiZQorCSAqIGFjY2Vzc2Vk
LgorCSAqLworCWlmICghTUlQU19ESVJFQ1RfTUFQUEFCTEUocGh5c19hdmFpbFtpIC0gMV0pKQor
CQluZWVkX2xvY2FsX21hcHBpbmdzID0gMTsKIAogCS8qCiAJICogQ29weSB0aGUgcGh5c19hdmFp
bFtdIGFycmF5IGJlZm9yZSB3ZSBzdGFydCBzdGVhbGluZyBtZW1vcnkgZnJvbSBpdC4KQEAgLTUx
OCwyMiArNTg4LDggQEAKIAkJcHJpbnRmKCJwY3B1IGlzIGF2YWlsYWJsZSBhdCB2aXJ0dWFsIGFk
ZHJlc3MgJXAuXG4iLCBwY3B1cCk7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKF9fbWlwc19uNjQp
Ci0JLyoKLQkgKiBTdGVhbCBzb21lIHZpcnR1YWwgc3BhY2UgdGhhdCB3aWxsIG5vdCBiZSBpbiBr
ZXJuZWxfc2VnbWFwLiBUaGlzCi0JICogdmEgbWVtb3J5IHNwYWNlIHdpbGwgYmUgdXNlZCB0byBt
YXAgaW4ga2VybmVsIHBhZ2VzIHRoYXQgYXJlCi0JICogb3V0c2lkZSB0aGUgNTEyTWVnIHJlZ2lv
bi4gTm90ZSB0aGF0IHdlIG9ubHkgZG8gdGhpcyBzdGVhbCB3aGVuCi0JICogd2UgZG8gaGF2ZSBt
ZW1vcnkgaW4gdGhpcyByZWdpb24sIHRoYXQgd2F5IGZvciBzeXN0ZW1zIHdpdGgKLQkgKiBzbWFs
bGVyIG1lbW9yeSB3ZSBkb24ndCAic3RlYWwiIGFueSB2YSByYW5nZXMgOi0pCi0JICovCi0JaWYg
KG1lbW9yeV9sYXJnZXJfdGhhbl81MTJtZWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IE1BWENQVTsg
aSsrKSB7Ci0JCQlzeXNtYXBfbG1lbVtpXS5iYXNlID0gdmlydHVhbF9hdmFpbDsKLQkJCXZpcnR1
YWxfYXZhaWwgKz0gUEFHRV9TSVpFICogMjsKLQkJCXN5c21hcF9sbWVtW2ldLnZhbGlkMSA9IHN5
c21hcF9sbWVtW2ldLnZhbGlkMiA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKKwlpZiAobmVlZF9sb2Nh
bF9tYXBwaW5ncykKKwkJcG1hcF9hbGxvY19sbWVtX21hcCgpOwogCXBtYXBfY3JlYXRlX2tlcm5l
bF9wYWdldGFibGUoKTsKIAlwbWFwX21heF9hc2lkID0gVk1OVU1fUElEUzsKIAltaXBzX3dyX2Vu
dHJ5aGkoMCk7CkBAIC04NDcsMjAgKzkwMywxMyBAQAogICoKICAqCVVzZSBYS1BIWVMgZm9yIDY0
IGJpdCwgYW5kIEtTRUcwIHdoZXJlIHBvc3NpYmxlIGZvciAzMiBiaXQuCiAgKi8KLSNpZiBkZWZp
bmVkKF9fbWlwc19uNjQpCiB2bV9vZmZzZXRfdAogcG1hcF9tYXAodm1fb2Zmc2V0X3QgKnZpcnQs
IHZtX29mZnNldF90IHN0YXJ0LCB2bV9vZmZzZXRfdCBlbmQsIGludCBwcm90KQogewotCXJldHVy
biAoTUlQU19QSFlTX1RPX1hLUEhZU19DQUNIRUQoc3RhcnQpKTsKLX0KLSNlbHNlCi12bV9vZmZz
ZXRfdAotcG1hcF9tYXAodm1fb2Zmc2V0X3QgKnZpcnQsIHZtX29mZnNldF90IHN0YXJ0LCB2bV9v
ZmZzZXRfdCBlbmQsIGludCBwcm90KQotewogCXZtX29mZnNldF90IHZhLCBzdmE7CiAKLQlpZiAo
ZW5kIDw9IE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKQotCQlyZXR1cm4gKE1JUFNfUEhZU19UT19L
U0VHMChzdGFydCkpOworCWlmIChNSVBTX0RJUkVDVF9NQVBQQUJMRShlbmQpKQorCQlyZXR1cm4g
KE1JUFNfUEhZU19UT19ESVJFQ1Qoc3RhcnQpKTsKIAogCXZhID0gc3ZhID0gKnZpcnQ7CiAJd2hp
bGUgKHN0YXJ0IDwgZW5kKSB7CkBAIC04NzEsNyArOTIwLDYgQEAKIAkqdmlydCA9IHZhOwogCXJl
dHVybiAoc3ZhKTsKIH0KLSNlbmRpZgogCiAvKgogICogQWRkIGEgbGlzdCBvZiB3aXJlZCBwYWdl
cyB0byB0aGUga3ZhCkBAIC05NjgsNyArMTAxNiw3IEBACiAJCSAqIFJlY3Vyc2l2ZWx5IGRlY3Jl
bWVudCBuZXh0IGxldmVsIHBhZ2V0YWJsZSByZWZjb3VudAogCQkgKi8KIAkJcGRwID0gKHBkX2Vu
dHJ5X3QgKikqcG1hcF9zZWdtYXAocG1hcCwgdmEpOwotCQlwZHBnID0gUEhZU19UT19WTV9QQUdF
KE1JUFNfS1NFRzBfVE9fUEhZUyhwZHApKTsKKwkJcGRwZyA9IFBIWVNfVE9fVk1fUEFHRShNSVBT
X0RJUkVDVF9UT19QSFlTKHBkcCkpOwogCQlwbWFwX3Vud2lyZV9wdGVfaG9sZChwbWFwLCB2YSwg
cGRwZyk7CiAJfQogI2VuZGlmCkBAIC0xMDAzLDcgKzEwNTEsNyBAQAogCQkJbXB0ZSA9IHBtYXAt
PnBtX3B0cGhpbnQ7CiAJCX0gZWxzZSB7CiAJCQlwdGV2YSA9ICpwbWFwX3BkZShwbWFwLCB2YSk7
Ci0JCQltcHRlID0gUEhZU19UT19WTV9QQUdFKE1JUFNfS1NFRzBfVE9fUEhZUyhwdGV2YSkpOwor
CQkJbXB0ZSA9IFBIWVNfVE9fVk1fUEFHRShNSVBTX0RJUkVDVF9UT19QSFlTKHB0ZXZhKSk7CiAJ
CQlwbWFwLT5wbV9wdHBoaW50ID0gbXB0ZTsKIAkJfQogCX0KQEAgLTEwMzIsNyArMTA4MCwxMSBA
QAogcG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hlKCkKIHsKIAorI2lmZGVmIF9fbWlwc19uNjQKKwl2
bV9jb250aWdfZ3Jvd19jYWNoZSgzLCAwLCAweGZmZmZmZmZmZmZVTCk7CisjZWxzZQogCXZtX2Nv
bnRpZ19ncm93X2NhY2hlKDMsIDAsIE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgdm1fcGFnZV90CkBAIC0xMDcyLDcgKzExMjQsNyBAQAogCXdoaWxlICgocHRk
cGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKE5VU0VSUEdUQkxTLCBWTV9BTExPQ19OT1JNQUwpKSA9
PSBOVUxMKQogCSAgICAgICBwbWFwX2dyb3dfcHRlX3BhZ2VfY2FjaGUoKTsKIAotCXB0ZHZhID0g
TUlQU19QSFlTX1RPX0tTRUcwKFZNX1BBR0VfVE9fUEhZUyhwdGRwZykpOworCXB0ZHZhID0gTUlQ
U19QSFlTX1RPX0RJUkVDVChWTV9QQUdFX1RPX1BIWVMocHRkcGcpKTsKIAlwbWFwLT5wbV9zZWd0
YWIgPSAocGRfZW50cnlfdCAqKXB0ZHZhOwogCXBtYXAtPnBtX2FjdGl2ZSA9IDA7CiAJcG1hcC0+
cG1fcHRwaGludCA9IE5VTEw7CkBAIC0xMTIzLDcgKzExNzUsNyBAQAogCSAqIE1hcCB0aGUgcGFn
ZXRhYmxlIHBhZ2UgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBpZiBpdAogCSAqIGlz
bid0IGFscmVhZHkgdGhlcmUuCiAJICovCi0JcGFnZXZhID0gTUlQU19QSFlTX1RPX0tTRUcwKFZN
X1BBR0VfVE9fUEhZUyhtKSk7CisJcGFnZXZhID0gTUlQU19QSFlTX1RPX0RJUkVDVChWTV9QQUdF
X1RPX1BIWVMobSkpOwogCiAjaWZkZWYgX19taXBzX242NAogCWlmIChwdGVwaW5kZXggPj0gTlVQ
REUpIHsKQEAgLTExNDYsNyArMTE5OCw3IEBACiAJCQkJcmV0dXJuIChOVUxMKTsKIAkJCX0KIAkJ
fSBlbHNlIHsKLQkJCXBnID0gUEhZU19UT19WTV9QQUdFKE1JUFNfS1NFRzBfVE9fUEhZUygqcGRl
cCkpOworCQkJcGcgPSBQSFlTX1RPX1ZNX1BBR0UoTUlQU19ESVJFQ1RfVE9fUEhZUygqcGRlcCkp
OwogCQkJcGctPndpcmVfY291bnQrKzsKIAkJfQogCQkvKiBOZXh0IGxldmVsIGVudHJ5ICovCkBA
IC0xMTk5LDcgKzEyNTEsNyBAQAogCQkgICAgKHBtYXAtPnBtX3B0cGhpbnQtPnBpbmRleCA9PSBw
dGVwaW5kZXgpKSB7CiAJCQltID0gcG1hcC0+cG1fcHRwaGludDsKIAkJfSBlbHNlIHsKLQkJCW0g
PSBQSFlTX1RPX1ZNX1BBR0UoTUlQU19LU0VHMF9UT19QSFlTKCpwZGUpKTsKKwkJCW0gPSBQSFlT
X1RPX1ZNX1BBR0UoTUlQU19ESVJFQ1RfVE9fUEhZUygqcGRlKSk7CiAJCQlwbWFwLT5wbV9wdHBo
aW50ID0gbTsKIAkJfQogCQltLT53aXJlX2NvdW50Kys7CkBAIC0xMjQ3LDcgKzEyOTksNyBAQAog
CSAgICBwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCkpOwogCiAJcHRkdmEgPSAodm1fb2Zm
c2V0X3QpcG1hcC0+cG1fc2VndGFiOwotCXB0ZHBnID0gUEhZU19UT19WTV9QQUdFKE1JUFNfS1NF
RzBfVE9fUEhZUyhwdGR2YSkpOworCXB0ZHBnID0gUEhZU19UT19WTV9QQUdFKE1JUFNfRElSRUNU
X1RPX1BIWVMocHRkdmEpKTsKIAogCXB0ZHBnLT53aXJlX2NvdW50LS07CiAJYXRvbWljX3N1YnRy
YWN0X2ludCgmY250LnZfd2lyZV9jb3VudCwgMSk7CkBAIC0xMjc4LDcgKzEzMzAsNyBAQAogCQkJ
bmtwZyA9IHBtYXBfYWxsb2NfcHRlX3BhZ2UobmtwdCwgVk1fQUxMT0NfSU5URVJSVVBUKTsKIAkJ
CWlmIChua3BnID09IE5VTEwpCiAJCQkJcGFuaWMoInBtYXBfZ3Jvd2tlcm5lbDogbm8gbWVtb3J5
IHRvIGdyb3cga2VybmVsIik7Ci0JCQkqcGRwZSA9IChwZF9lbnRyeV90KU1JUFNfUEhZU19UT19L
U0VHMChWTV9QQUdFX1RPX1BIWVMobmtwZykpOworCQkJKnBkcGUgPSAocGRfZW50cnlfdClNSVBT
X1BIWVNfVE9fRElSRUNUKFZNX1BBR0VfVE9fUEhZUyhua3BnKSk7CiAJCQljb250aW51ZTsgLyog
dHJ5IGFnYWluICovCiAJCX0KICNlbmRpZgpAQCAtMTI5OSw3ICsxMzUxLDcgQEAKIAkJaWYgKCFu
a3BnKQogCQkJcGFuaWMoInBtYXBfZ3Jvd2tlcm5lbDogbm8gbWVtb3J5IHRvIGdyb3cga2VybmVs
Iik7CiAJCW5rcHQrKzsKLQkJKnBkZSA9IChwZF9lbnRyeV90KU1JUFNfUEhZU19UT19LU0VHMChW
TV9QQUdFX1RPX1BIWVMobmtwZykpOworCQkqcGRlID0gKHBkX2VudHJ5X3QpTUlQU19QSFlTX1RP
X0RJUkVDVChWTV9QQUdFX1RPX1BIWVMobmtwZykpOwogCiAJCS8qCiAJCSAqIFRoZSBSWzQtN10/
MDAgc3RvcmVzIG9ubHkgb25lIGNvcHkgb2YgdGhlIEdsb2JhbCBiaXQgaW4KQEAgLTIwNzcsNyAr
MjEyOSw3IEBACiAJCQkJCW1wdGUgPSBwbWFwLT5wbV9wdHBoaW50OwogCQkJCX0gZWxzZSB7CiAJ
CQkJCW1wdGUgPSBQSFlTX1RPX1ZNX1BBR0UoCi0JCQkJCQlNSVBTX0tTRUcwX1RPX1BIWVMoKnBk
ZSkpOworCQkJCQkJTUlQU19ESVJFQ1RfVE9fUEhZUygqcGRlKSk7CiAJCQkJCXBtYXAtPnBtX3B0
cGhpbnQgPSBtcHRlOwogCQkJCX0KIAkJCQltcHRlLT53aXJlX2NvdW50Kys7CkBAIC0yMTUzLDMw
ICsyMjA1LDIxIEBACiAgKgogICogVXNlIFhLUEhZUyBmb3IgNjQgYml0LCBhbmQgS1NFRzAgd2hl
cmUgcG9zc2libGUgZm9yIDMyIGJpdC4KICAqLwotI2lmIGRlZmluZWQoX19taXBzX242NCkKIHZv
aWQgKgogcG1hcF9rZW50ZXJfdGVtcG9yYXJ5KHZtX3BhZGRyX3QgcGEsIGludCBpKQogewotCXJl
dHVybiAoKHZvaWQgKilNSVBTX1BIWVNfVE9fWEtQSFlTX0NBQ0hFRChwYSkpOwotfQotdm9pZAot
cG1hcF9rZW50ZXJfdGVtcG9yYXJ5X2ZyZWUodm1fcGFkZHJfdCBwYSkKLXsKLX0KLSNlbHNlCi12
b2lkICoKLXBtYXBfa2VudGVyX3RlbXBvcmFyeSh2bV9wYWRkcl90IHBhLCBpbnQgaSkKLXsKIAl2
bV9vZmZzZXRfdCB2YTsKLQlyZWdpc3Rlcl90IGludHI7CisKIAlpZiAoaSAhPSAwKQogCQlwcmlu
dGYoIiVzOiBFUlJPUiEhISBNb3JlIHRoYW4gb25lIHBhZ2Ugb2YgdmlydHVhbCBhZGRyZXNzIG1h
cHBpbmcgbm90IHN1cHBvcnRlZFxuIiwKIAkJICAgIF9fZnVuY19fKTsKIAotCWlmIChwYSA8IE1J
UFNfS1NFRzBfTEFSR0VTVF9QSFlTKSB7Ci0JCXZhID0gTUlQU19QSFlTX1RPX0tTRUcwKHBhKTsK
KwlpZiAoTUlQU19ESVJFQ1RfTUFQUEFCTEUocGEpKSB7CisJCXZhID0gTUlQU19QSFlTX1RPX0RJ
UkVDVChwYSk7CiAJfSBlbHNlIHsKKyNpZm5kZWYgX19taXBzX242NCAgICAvKiBYWFggOiB0byBi
ZSBjb252ZXJ0ZWQgdG8gbmV3IHN0eWxlICovCiAJCWludCBjcHU7CisJCXJlZ2lzdGVyX3QgaW50
cjsKIAkJc3RydWN0IGxvY2FsX3N5c21hcHMgKnN5c207CiAJCXB0X2VudHJ5X3QgKnB0ZSwgbnB0
ZTsKIApAQCAtMjE5Niw2ICsyMjM5LDcgQEAKIAkJcG1hcF91cGRhdGVfcGFnZShrZXJuZWxfcG1h
cCwgc3lzbS0+YmFzZSwgbnB0ZSk7CiAJCXZhID0gc3lzbS0+YmFzZTsKIAkJaW50cl9yZXN0b3Jl
KGludHIpOworI2VuZGlmCiAJfQogCXJldHVybiAoKHZvaWQgKil2YSk7CiB9CkBAIC0yMjAzLDE0
ICsyMjQ3LDE3IEBACiB2b2lkCiBwbWFwX2tlbnRlcl90ZW1wb3JhcnlfZnJlZSh2bV9wYWRkcl90
IHBhKQogeworI2lmbmRlZiBfX21pcHNfbjY0ICAgIC8qIFhYWCA6IHRvIGJlIGNvbnZlcnRlZCB0
byBuZXcgc3R5bGUgKi8KIAlpbnQgY3B1OwogCXJlZ2lzdGVyX3QgaW50cjsKIAlzdHJ1Y3QgbG9j
YWxfc3lzbWFwcyAqc3lzbTsKKyNlbmRpZgogCi0JaWYgKHBhIDwgTUlQU19LU0VHMF9MQVJHRVNU
X1BIWVMpIHsKKwlpZiAoTUlQU19ESVJFQ1RfTUFQUEFCTEUocGEpKSB7CiAJCS8qIG5vdGhpbmcg
dG8gZG8gZm9yIHRoaXMgY2FzZSAqLwogCQlyZXR1cm47CiAJfQorI2lmbmRlZiBfX21pcHNfbjY0
ICAgIC8qIFhYWCA6IHRvIGJlIGNvbnZlcnRlZCB0byBuZXcgc3R5bGUgKi8KIAljcHUgPSBQQ1BV
X0dFVChjcHVpZCk7CiAJc3lzbSA9ICZzeXNtYXBfbG1lbVtjcHVdOwogCWlmIChzeXNtLT52YWxp
ZDEpIHsKQEAgLTIyMjMsOCArMjI3MCw4IEBACiAJCWludHJfcmVzdG9yZShpbnRyKTsKIAkJc3lz
bS0+dmFsaWQxID0gMDsKIAl9Ci19CiAjZW5kaWYKK30KIAogLyoKICAqIE1vdmVkIHRoZSBjb2Rl
IHRvIE1hY2hpbmUgSW5kZXBlbmRlbnQKQEAgLTIzMzMsMTEzICsyMzgwLDY1IEBACiAgKgogICog
CVVzZSBYS1BIWVMgZm9yIDY0IGJpdCwgYW5kIEtTRUcwIHdoZXJlIHBvc3NpYmxlIGZvciAzMiBi
aXQuCiAgKi8KLSNpZiBkZWZpbmVkIChfX21pcHNfbjY0KQogdm9pZAogcG1hcF96ZXJvX3BhZ2Uo
dm1fcGFnZV90IG0pCiB7CiAJdm1fb2Zmc2V0X3QgdmE7CiAJdm1fcGFkZHJfdCBwaHlzID0gVk1f
UEFHRV9UT19QSFlTKG0pOwogCi0JdmEgPSBNSVBTX1BIWVNfVE9fWEtQSFlTX0NBQ0hFRChwaHlz
KTsKLQliemVybygoY2FkZHJfdCl2YSwgUEFHRV9TSVpFKTsKLQltaXBzX2RjYWNoZV93Ymludl9y
YW5nZSh2YSwgUEFHRV9TSVpFKTsKLX0KLSNlbHNlCi12b2lkCi1wbWFwX3plcm9fcGFnZSh2bV9w
YWdlX3QgbSkKLXsKLQl2bV9vZmZzZXRfdCB2YTsKLQl2bV9wYWRkcl90IHBoeXMgPSBWTV9QQUdF
X1RPX1BIWVMobSk7Ci0JcmVnaXN0ZXJfdCBpbnRyOwotCi0JaWYgKHBoeXMgPCBNSVBTX0tTRUcw
X0xBUkdFU1RfUEhZUykgewotCQl2YSA9IE1JUFNfUEhZU19UT19LU0VHMChwaHlzKTsKLQorCWlm
IChNSVBTX0RJUkVDVF9NQVBQQUJMRShwaHlzKSkgeworCQl2YSA9IE1JUFNfUEhZU19UT19ESVJF
Q1QocGh5cyk7CiAJCWJ6ZXJvKChjYWRkcl90KXZhLCBQQUdFX1NJWkUpOwogCQltaXBzX2RjYWNo
ZV93Ymludl9yYW5nZSh2YSwgUEFHRV9TSVpFKTsKIAl9IGVsc2UgewotCQlQTUFQX0xNRU1fTUFQ
MSh2YSwgcGh5cyk7Ci0KKwkJdmEgPSBwbWFwX2xtZW1fbWFwMShwaHlzKTsKIAkJYnplcm8oKGNh
ZGRyX3QpdmEsIFBBR0VfU0laRSk7CiAJCW1pcHNfZGNhY2hlX3diaW52X3JhbmdlKHZhLCBQQUdF
X1NJWkUpOwotCi0JCVBNQVBfTE1FTV9VTk1BUCgpOworCQlwbWFwX2xtZW1fdW5tYXAoKTsKIAl9
CiB9Ci0jZW5kaWYKKwogLyoKICAqCXBtYXBfemVyb19wYWdlX2FyZWEgemVyb3MgdGhlIHNwZWNp
ZmllZCBoYXJkd2FyZSBwYWdlIGJ5IG1hcHBpbmcKICAqCXRoZSBwYWdlIGludG8gS1ZNIGFuZCB1
c2luZyBiemVybyB0byBjbGVhciBpdHMgY29udGVudHMuCiAgKgogICoJb2ZmIGFuZCBzaXplIG1h
eSBub3QgY292ZXIgYW4gYXJlYSBiZXlvbmQgYSBzaW5nbGUgaGFyZHdhcmUgcGFnZS4KICAqLwot
I2lmIGRlZmluZWQgKF9fbWlwc19uNjQpCiB2b2lkCiBwbWFwX3plcm9fcGFnZV9hcmVhKHZtX3Bh
Z2VfdCBtLCBpbnQgb2ZmLCBpbnQgc2l6ZSkKIHsKIAl2bV9vZmZzZXRfdCB2YTsKIAl2bV9wYWRk
cl90IHBoeXMgPSBWTV9QQUdFX1RPX1BIWVMobSk7CiAKLQl2YSA9IE1JUFNfUEhZU19UT19YS1BI
WVNfQ0FDSEVEKHBoeXMpOwotCWJ6ZXJvKChjaGFyICopKGNhZGRyX3QpdmEgKyBvZmYsIHNpemUp
OwotCW1pcHNfZGNhY2hlX3diaW52X3JhbmdlKHZhICsgb2ZmLCBzaXplKTsKLX0KLSNlbHNlCi12
b2lkCi1wbWFwX3plcm9fcGFnZV9hcmVhKHZtX3BhZ2VfdCBtLCBpbnQgb2ZmLCBpbnQgc2l6ZSkK
LXsKLQl2bV9vZmZzZXRfdCB2YTsKLQl2bV9wYWRkcl90IHBoeXMgPSBWTV9QQUdFX1RPX1BIWVMo
bSk7Ci0JcmVnaXN0ZXJfdCBpbnRyOwotCi0JaWYgKHBoeXMgPCBNSVBTX0tTRUcwX0xBUkdFU1Rf
UEhZUykgewotCQl2YSA9IE1JUFNfUEhZU19UT19LU0VHMChwaHlzKTsKKwlpZiAoTUlQU19ESVJF
Q1RfTUFQUEFCTEUocGh5cykpIHsKKwkJdmEgPSBNSVBTX1BIWVNfVE9fRElSRUNUKHBoeXMpOwog
CQliemVybygoY2hhciAqKShjYWRkcl90KXZhICsgb2ZmLCBzaXplKTsKIAkJbWlwc19kY2FjaGVf
d2JpbnZfcmFuZ2UodmEgKyBvZmYsIHNpemUpOwogCX0gZWxzZSB7Ci0JCVBNQVBfTE1FTV9NQVAx
KHZhLCBwaHlzKTsKLQorCQl2YSA9IHBtYXBfbG1lbV9tYXAxKHBoeXMpOwogCQliemVybygoY2hh
ciAqKXZhICsgb2ZmLCBzaXplKTsKIAkJbWlwc19kY2FjaGVfd2JpbnZfcmFuZ2UodmEgKyBvZmYs
IHNpemUpOwotCi0JCVBNQVBfTE1FTV9VTk1BUCgpOworCQlwbWFwX2xtZW1fdW5tYXAoKTsKIAl9
CiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQgKF9fbWlwc19uNjQpCiB2b2lkCiBwbWFwX3plcm9f
cGFnZV9pZGxlKHZtX3BhZ2VfdCBtKQogewogCXZtX29mZnNldF90IHZhOwogCXZtX3BhZGRyX3Qg
cGh5cyA9IFZNX1BBR0VfVE9fUEhZUyhtKTsKIAotCXZhID0gTUlQU19QSFlTX1RPX1hLUEhZU19D
QUNIRUQocGh5cyk7Ci0JYnplcm8oKGNhZGRyX3QpdmEsIFBBR0VfU0laRSk7Ci0JbWlwc19kY2Fj
aGVfd2JpbnZfcmFuZ2UodmEsIFBBR0VfU0laRSk7Ci19Ci0jZWxzZQotdm9pZAotcG1hcF96ZXJv
X3BhZ2VfaWRsZSh2bV9wYWdlX3QgbSkKLXsKLQl2bV9vZmZzZXRfdCB2YTsKLQl2bV9wYWRkcl90
IHBoeXMgPSBWTV9QQUdFX1RPX1BIWVMobSk7Ci0JcmVnaXN0ZXJfdCBpbnRyOwotCi0JaWYgKHBo
eXMgPCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUykgewotCQl2YSA9IE1JUFNfUEhZU19UT19LU0VH
MChwaHlzKTsKKwlpZiAoTUlQU19ESVJFQ1RfTUFQUEFCTEUocGh5cykpIHsKKwkJdmEgPSBNSVBT
X1BIWVNfVE9fRElSRUNUKHBoeXMpOwogCQliemVybygoY2FkZHJfdCl2YSwgUEFHRV9TSVpFKTsK
IAkJbWlwc19kY2FjaGVfd2JpbnZfcmFuZ2UodmEsIFBBR0VfU0laRSk7CiAJfSBlbHNlIHsKLQkJ
UE1BUF9MTUVNX01BUDEodmEsIHBoeXMpOwotCisJCXZhID0gcG1hcF9sbWVtX21hcDEocGh5cyk7
CiAJCWJ6ZXJvKChjYWRkcl90KXZhLCBQQUdFX1NJWkUpOwogCQltaXBzX2RjYWNoZV93Ymludl9y
YW5nZSh2YSwgUEFHRV9TSVpFKTsKLQotCQlQTUFQX0xNRU1fVU5NQVAoKTsKKwkJcG1hcF9sbWVt
X3VubWFwKCk7CiAJfQogfQotI2VuZGlmCiAKIC8qCiAgKglwbWFwX2NvcHlfcGFnZSBjb3BpZXMg
dGhlIHNwZWNpZmllZCAobWFjaGluZSBpbmRlcGVuZGVudCkKQEAgLTI0NDksMzEgKzI0NDgsMTQg
QEAKICAqCiAgKiAJVXNlIFhLUEhZUyBmb3IgNjQgYml0LCBhbmQgS1NFRzAgd2hlcmUgcG9zc2li
bGUgZm9yIDMyIGJpdC4KICAqLwotI2lmIGRlZmluZWQgKF9fbWlwc19uNjQpCiB2b2lkCiBwbWFw
X2NvcHlfcGFnZSh2bV9wYWdlX3Qgc3JjLCB2bV9wYWdlX3QgZHN0KQogewogCXZtX29mZnNldF90
IHZhX3NyYywgdmFfZHN0OwotCXZtX3BhZGRyX3QgcGh5X3NyYyA9IFZNX1BBR0VfVE9fUEhZUyhz
cmMpOwotCXZtX3BhZGRyX3QgcGh5X2RzdCA9IFZNX1BBR0VfVE9fUEhZUyhkc3QpOworCXZtX3Bh
ZGRyX3QgcGh5c19zcmMgPSBWTV9QQUdFX1RPX1BIWVMoc3JjKTsKKwl2bV9wYWRkcl90IHBoeXNf
ZHN0ID0gVk1fUEFHRV9UT19QSFlTKGRzdCk7CiAKLQlwbWFwX2ZsdXNoX3B2Y2FjaGUoc3JjKTsK
LQltaXBzX2RjYWNoZV93Ymludl9yYW5nZV9pbmRleChNSVBTX1BIWVNfVE9fWEtQSFlTX0NBQ0hF
RChwaHlfZHN0KSwgUEFHRV9TSVpFKTsKLQl2YV9zcmMgPSBNSVBTX1BIWVNfVE9fWEtQSFlTX0NB
Q0hFRChwaHlfc3JjKTsKLQl2YV9kc3QgPSBNSVBTX1BIWVNfVE9fWEtQSFlTX0NBQ0hFRChwaHlf
ZHN0KTsKLQliY29weSgoY2FkZHJfdCl2YV9zcmMsIChjYWRkcl90KXZhX2RzdCwgUEFHRV9TSVpF
KTsKLQltaXBzX2RjYWNoZV93Ymludl9yYW5nZSh2YV9kc3QsIFBBR0VfU0laRSk7Ci19Ci0jZWxz
ZQotdm9pZAotcG1hcF9jb3B5X3BhZ2Uodm1fcGFnZV90IHNyYywgdm1fcGFnZV90IGRzdCkKLXsK
LQl2bV9vZmZzZXRfdCB2YV9zcmMsIHZhX2RzdDsKLQl2bV9wYWRkcl90IHBoeV9zcmMgPSBWTV9Q
QUdFX1RPX1BIWVMoc3JjKTsKLQl2bV9wYWRkcl90IHBoeV9kc3QgPSBWTV9QQUdFX1RPX1BIWVMo
ZHN0KTsKLQlyZWdpc3Rlcl90IGludHI7Ci0KLQlpZiAoKHBoeV9zcmMgPCBNSVBTX0tTRUcwX0xB
UkdFU1RfUEhZUykgJiYgKHBoeV9kc3QgPCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUykpIHsKKwlp
ZiAoTUlQU19ESVJFQ1RfTUFQUEFCTEUocGh5c19zcmMpICYmIE1JUFNfRElSRUNUX01BUFBBQkxF
KHBoeXNfZHN0KSkgewogCQkvKiBlYXN5IGNhc2UsIGFsbCBjYW4gYmUgYWNjZXNzZWQgdmlhIEtT
RUcwICovCiAJCS8qCiAJCSAqIEZsdXNoIGFsbCBjYWNoZXMgZm9yIFZBIHRoYXQgYXJlIG1hcHBl
ZCB0byB0aGlzIHBhZ2UKQEAgLTI0ODEsMjEgKzI0NjMsMTkgQEAKIAkJICovCiAJCXBtYXBfZmx1
c2hfcHZjYWNoZShzcmMpOwogCQltaXBzX2RjYWNoZV93Ymludl9yYW5nZV9pbmRleCgKLQkJICAg
IE1JUFNfUEhZU19UT19LU0VHMChwaHlfZHN0KSwgUEFHRV9TSVpFKTsKLQkJdmFfc3JjID0gTUlQ
U19QSFlTX1RPX0tTRUcwKHBoeV9zcmMpOwotCQl2YV9kc3QgPSBNSVBTX1BIWVNfVE9fS1NFRzAo
cGh5X2RzdCk7CisJCSAgICBNSVBTX1BIWVNfVE9fRElSRUNUKHBoeXNfZHN0KSwgUEFHRV9TSVpF
KTsKKwkJdmFfc3JjID0gTUlQU19QSFlTX1RPX0RJUkVDVChwaHlzX3NyYyk7CisJCXZhX2RzdCA9
IE1JUFNfUEhZU19UT19ESVJFQ1QocGh5c19kc3QpOwogCQliY29weSgoY2FkZHJfdCl2YV9zcmMs
IChjYWRkcl90KXZhX2RzdCwgUEFHRV9TSVpFKTsKIAkJbWlwc19kY2FjaGVfd2JpbnZfcmFuZ2Uo
dmFfZHN0LCBQQUdFX1NJWkUpOwogCX0gZWxzZSB7Ci0JCVBNQVBfTE1FTV9NQVAyKHZhX3NyYywg
cGh5X3NyYywgdmFfZHN0LCBwaHlfZHN0KTsKLQorCQl2YV9zcmMgPSBwbWFwX2xtZW1fbWFwMihw
aHlzX3NyYywgcGh5c19kc3QpOworCQl2YV9kc3QgPSB2YV9zcmMgKyBQQUdFX1NJWkU7CiAJCWJj
b3B5KCh2b2lkICopdmFfc3JjLCAodm9pZCAqKXZhX2RzdCwgUEFHRV9TSVpFKTsKIAkJbWlwc19k
Y2FjaGVfd2JpbnZfcmFuZ2UodmFfZHN0LCBQQUdFX1NJWkUpOwotCi0JCVBNQVBfTE1FTV9VTk1B
UCgpOworCQlwbWFwX2xtZW1fdW5tYXAoKTsKIAl9CiB9Ci0jZW5kaWYKIAogLyoKICAqIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgcG1hcCdzIHB2IGlzIG9uZSBvZiB0aGUgZmlyc3QKQEAgLTI5MTEsMjkg
KzI4OTEsMTcgQEAKICAqCiAgKiBVc2UgWEtQSFlTIHVuY2FjaGVkIGZvciA2NCBiaXQsIGFuZCBL
U0VHMSB3aGVyZSBwb3NzaWJsZSBmb3IgMzIgYml0LgogICovCi0jaWYgZGVmaW5lZChfX21pcHNf
bjY0KQogdm9pZCAqCiBwbWFwX21hcGRldih2bV9vZmZzZXRfdCBwYSwgdm1fc2l6ZV90IHNpemUp
CiB7Ci0JcmV0dXJuICgodm9pZCAqKU1JUFNfUEhZU19UT19YS1BIWVNfVU5DQUNIRUQocGEpKTsK
LX0KLQotdm9pZAotcG1hcF91bm1hcGRldih2bV9vZmZzZXRfdCB2YSwgdm1fc2l6ZV90IHNpemUp
Ci17Ci19Ci0jZWxzZQotdm9pZCAqCi1wbWFwX21hcGRldih2bV9vZmZzZXRfdCBwYSwgdm1fc2l6
ZV90IHNpemUpCi17CiAgICAgICAgIHZtX29mZnNldF90IHZhLCB0bXB2YSwgb2Zmc2V0OwogCiAJ
LyogCiAJICogS1NFRzEgbWFwcyBvbmx5IGZpcnN0IDUxMk0gb2YgcGh5cyBhZGRyZXNzIHNwYWNl
LiBGb3IgCiAJICogcGEgPiAweDIwMDAwMDAwIHdlIHNob3VsZCBtYWtlIHByb3BlciBtYXBwaW5n
ICogdXNpbmcgcG1hcF9rZW50ZXIuCiAJICovCi0JaWYgKChwYSArIHNpemUgLSAxKSA8IE1JUFNf
S1NFRzBfTEFSR0VTVF9QSFlTKQotCQlyZXR1cm4gKHZvaWQgKilNSVBTX1BIWVNfVE9fS1NFRzEo
cGEpOworCWlmIChNSVBTX0RJUkVDVF9NQVBQQUJMRShwYSArIHNpemUgLSAxKSkKKwkJcmV0dXJu
ICh2b2lkICopTUlQU19QSFlTX1RPX0RJUkVDVF9VTkNBQ0hFRChwYSk7CiAJZWxzZSB7CiAJCW9m
ZnNldCA9IHBhICYgUEFHRV9NQVNLOwogCQlzaXplID0gcm91bmR1cChzaXplICsgb2Zmc2V0LCBQ
QUdFX1NJWkUpOwpAQCAtMjk1Niw2ICsyOTI0LDcgQEAKIHZvaWQKIHBtYXBfdW5tYXBkZXYodm1f
b2Zmc2V0X3QgdmEsIHZtX3NpemVfdCBzaXplKQogeworI2lmbmRlZiBfX21pcHNfbjY0CiAJdm1f
b2Zmc2V0X3QgYmFzZSwgb2Zmc2V0LCB0bXB2YTsKIAogCS8qIElmIHRoZSBhZGRyZXNzIGlzIHdp
dGhpbiBLU0VHMSB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTI5NjgsOCArMjkz
Nyw4IEBACiAJZm9yICh0bXB2YSA9IGJhc2U7IHRtcHZhIDwgYmFzZSArIHNpemU7IHRtcHZhICs9
IFBBR0VfU0laRSkKIAkJcG1hcF9rcmVtb3ZlKHRtcHZhKTsKIAlrbWVtX2ZyZWUoa2VybmVsX21h
cCwgYmFzZSwgc2l6ZSk7Ci19CiAjZW5kaWYKK30KIAogLyoKICAqIHBlcmZvcm0gdGhlIHBtYXAg
d29yayBmb3IgbWluY29yZQo=
--0016367f9f6a8ae7a3048df31007--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinc2P7mO2qu%2BAiDtB=%2BoH3Winfc0AOAUxXS2XBh>