[PATCH v5 2/6] lib: utils/irqchip/aplic: add MSI mode support with IMSIC parent linking

Pawandeep Oza <[email protected]> Tue, 21 Jul 2026 14:48:26 -0700
Newsgroups org.infradead.lists.opensbi
Message-ID <[email protected]>
QWRkIHBhcmVudF91bmlxdWVfaWQgZmllbGRzIHRvIHN0cnVjdCBhcGxpY19kYXRhIGZvcgpJTVNJ
QyBwYXJlbnQgbGlua2luZyBpbiBNU0kgbW9kZS4gU3RvcmUgcGFyZW50IElNU0lDIHVuaXF1ZV9p
ZApkdXJpbmcgRkRUIHBhcnNpbmcgb2YgdGhlIEFQTElDIG5vZGUuCgpBZGQgYXBsaWNfaXNfbXNp
X21vZGUoKSBjb21wbGVtZW50aW5nIGFwbGljX2lzX2RpcmVjdF9tb2RlKCkgdG8KY29uc29saWRh
dGUgZGVsaXZlcnkgbW9kZSBkZXRlY3Rpb24uIEFkZCBBUExJQ19UQVJHRVRfRUlJRCgpIG1hY3Jv
CmZvciBwYWNraW5nIHRoZSBFSUlEIGZpZWxkIGludG8gdGhlIFRBUkdFVCByZWdpc3Rlci4KCkFk
ZCBwYXJlbnRfdW5pcXVlX2lkIGFuZCBwYXJlbnRfaXJxX21hcCBmaWVsZHMgdG8gc3RydWN0IGFw
bGljX2RhdGEuCnBhcmVudF91bmlxdWVfaWQgaWRlbnRpZmllcyB0aGUgdXBzdHJlYW0gSU1TSUMg
aXJxY2hpcCBkZXZpY2UgcmVzb2x2ZWQKdmlhIHNiaV9pcnFjaGlwX2ZpbmRfZGV2aWNlKCkgZHVy
aW5nIGh3aXJxX3NldHVwLiBwYXJlbnRfaXJxX21hcCBpcwphIHBlci1zb3VyY2UgYXJyYXkgYWxs
b2NhdGVkIGF0IGNvbGQgaW5pdCB0aW1lIHRvIHRyYWNrIHRoZSBFSUlECmFzc2lnbmVkIGJ5IHRo
ZSBJTVNJQyBmb3IgZWFjaCBBUExJQyBzb3VyY2UuCgpSZXN0b3JlIGFwbGljX3dyaXRlbF9tc2lj
ZmcoKSBhbmQgcmUtaW50cm9kdWNlIE1TSSBhZGRyZXNzIHJlZ2lzdGVyCnByb2dyYW1taW5nIGlu
IGFwbGljX2luaXQoKSwgZ2F0ZWQgb24gYXBsaWNfaXNfbXNpX21vZGUoKS4gU2V0IHRoZQpET01B
SU5DRkdfRE0gYml0IHRvIHN3aXRjaCB0aGUgaGFyZHdhcmUgdG8gTVNJIGRlbGl2ZXJ5IG1vZGUg
d2hlbgpubyBJREMgc3RydWN0dXJlcyBhcmUgcHJlc2VudC4KCkFkZCBhcGxpY19wcm9ncmFtX21z
aV90YXJnZXQoKSB0byBwYWNrIGhhcnRfaW5kZXgsIGd1ZXN0X2luZGV4LCBhbmQKRUlJRCBpbnRv
IHRoZSBBUExJQ19UQVJHRVQgcmVnaXN0ZXIuIEFkZCBhcGxpY193cml0ZV9tc2koKSBhcyB0aGUK
c2JpX2lycWNoaXAgd3JpdGVfbXNpIGNhbGxiYWNrIHRoYXQgZXh0cmFjdHMgRUlJRCBhbmQgaGFy
dF9pbmRleCBmcm9tCnRoZSBNU0kgbWVzc2FnZSBhbmQgY2FsbHMgYXBsaWNfcHJvZ3JhbV9tc2lf
dGFyZ2V0KCkuIEFkZAphcGxpY19tc2lfY2FsbGJhY2soKSBhcyB0aGUgTVNJIHJlY2VpdmUgY2Fs
bGJhY2sgdGhhdCBkaXNwYXRjaGVzIHRvCnNiaV9pcnFjaGlwX3Byb2Nlc3NfaHdpcnEoKSBvbiB0
aGUgQVBMSUMgY2hpcC4KCkV4dGVuZCBhcGxpY19od2lycV9zZXR1cCgpIHdpdGggYW4gTVNJIHBh
dGggdGhhdCByZXNvbHZlcyB0aGUgcGFyZW50CklNU0lDIGNoaXAgYnkgcGFyZW50X3VuaXF1ZV9p
ZCwgcmVnaXN0ZXJzIGFuIE1TSSByb3V0ZSB2aWEKc2JpX2lycWNoaXBfcmVnaXN0ZXJfbXNpKCks
IGFuZCBzdG9yZXMgdGhlIGFsbG9jYXRlZCBFSUlEIGluCnBhcmVudF9pcnFfbWFwIGZvciB0aGUg
c291cmNlIGJlaW5nIGNvbmZpZ3VyZWQuCgpFeHRlbmQgYXBsaWNfaHdpcnFfc2V0X2FmZmluaXR5
KCkgd2l0aCBhbiBNU0kgcGF0aCB0aGF0IGRlbGVnYXRlcwphZmZpbml0eSByZXByb2dyYW1taW5n
IHRvIHRoZSBwYXJlbnQgSU1TSUMgY2hpcCB2aWEKc2JpX2lycWNoaXBfc2V0X2FmZmluaXR5KCkg
dXNpbmcgdGhlIHN0b3JlZCBwYXJlbnRfaXJxX21hcCBlbnRyeS4KCkd1YXJkIHdhcm1faW5pdCwg
cHJvY2Vzc19od2lycXMsIGFuZCBod2lycV9lb2kgd2l0aCBlYXJseSByZXR1cm5zIGluCk1TSSBt
b2RlIGFzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgYWNrbm93bGVkZ2VtZW50IGFyZSBoYW5kbGVk
IGJ5IHRoZQpJTVNJQyBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBPemEg
UGF3YW5kZWVwIDxwYXdhbmRlZXAub3phQG9zcy5xdWFsY29tbS5jb20+Ci0tLQogaW5jbHVkZS9z
Ymkvc2JpX2lycWNoaXAuaCAgICAgICAgIHwgICA2ICsKIGluY2x1ZGUvc2JpX3V0aWxzL2lycWNo
aXAvYXBsaWMuaCB8ICAgMSArCiBsaWIvc2JpL3NiaV9pcnFjaGlwLmMgICAgICAgICAgICAgfCAg
MzQgKysrKwogbGliL3V0aWxzL2ZkdC9mZHRfaGVscGVyLmMgICAgICAgIHwgICAxICsKIGxpYi91
dGlscy9pcnFjaGlwL2FwbGljLmMgICAgICAgICB8IDI1NiArKysrKysrKysrKysrKysrKysrKysr
KysrKystLS0KIDUgZmlsZXMgY2hhbmdlZCwgMjc2IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2JpL3NiaV9pcnFjaGlwLmggYi9pbmNsdWRlL3Ni
aS9zYmlfaXJxY2hpcC5oCmluZGV4IGU3NzhkNzQ3Li5lYTAxMjYzNSAxMDA2NDQKLS0tIGEvaW5j
bHVkZS9zYmkvc2JpX2lycWNoaXAuaAorKysgYi9pbmNsdWRlL3NiaS9zYmlfaXJxY2hpcC5oCkBA
IC0xMDcsNiArMTA3LDEyIEBAIGludCBzYmlfaXJxY2hpcF91bm1hc2tfaHdpcnEoc3RydWN0IHNi
aV9pcnFjaGlwX2RldmljZSAqY2hpcCwgdTMyIGh3aXJxKTsKIC8qKiBNYXNrIGEgaGFyZHdhcmUg
aW50ZXJydXB0ICovCiBpbnQgc2JpX2lycWNoaXBfbWFza19od2lycShzdHJ1Y3Qgc2JpX2lycWNo
aXBfZGV2aWNlICpjaGlwLCB1MzIgaHdpcnEpOwogCisvKiogSGVscGVyIHRvIHNldCBwcml2YXRl
IGRhdGEgaW4gc2JpX2lycWNoaXBfaHdpcnFfZGF0YSAqLworaW50IHNiaV9pcnFjaGlwX3NldF9o
d2lycV9wcml2KHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSwgdm9p
ZCAqcHJpdik7CisKKy8qKiBIZWxwZXIgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHNiaV9pcnFjaGlw
X2h3aXJxX2RhdGEgKi8KK3ZvaWQgKnNiaV9pcnFjaGlwX2dldF9od2lycV9wcml2KHN0cnVjdCBz
YmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSk7CisKIC8qKiBEZWZhdWx0IHJhdyBo
YXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogaW50IHNiaV9pcnFjaGlwX3Jhd19oYW5kbGVy
X2RlZmF1bHQoc3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqY2hpcCwgdTMyIGh3aXJxKTsKIApk
aWZmIC0tZ2l0IGEvaW5jbHVkZS9zYmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oIGIvaW5jbHVkZS9z
YmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oCmluZGV4IDM0NjFkMWM3Li44ZDZkODcxZSAxMDA2NDQK
LS0tIGEvaW5jbHVkZS9zYmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oCisrKyBiL2luY2x1ZGUvc2Jp
X3V0aWxzL2lycWNoaXAvYXBsaWMuaApAQCAtMzYsNiArMzYsNyBAQCBzdHJ1Y3QgYXBsaWNfZGF0
YSB7CiAJc3RydWN0IHNiaV9kbGlzdCBub2RlOwogCS8qIFB1YmxpYyBtZW1iZXJzICovCiAJdTMy
IHVuaXF1ZV9pZDsKKwl1MzIgcGFyZW50X3VuaXF1ZV9pZDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7
CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgbnVtX2lkYzsKZGlmZiAtLWdp
dCBhL2xpYi9zYmkvc2JpX2lycWNoaXAuYyBiL2xpYi9zYmkvc2JpX2lycWNoaXAuYwppbmRleCA2
ZDBkZjAyZS4uMTJkNGUyNzIgMTAwNjQ0Ci0tLSBhL2xpYi9zYmkvc2JpX2lycWNoaXAuYworKysg
Yi9saWIvc2JpL3NiaV9pcnFjaGlwLmMKQEAgLTIyLDYgKzIyLDkgQEAgc3RydWN0IHNiaV9pcnFj
aGlwX2h3aXJxX2RhdGEgewogCiAJLyoqIHRhcmdldCBoYXJ0IGluZGV4ICovCiAJdTMyIGhhcnRf
aW5kZXg7CisKKwkvKiogY2hpcCdzIHByaXZhdGUgZGF0YSAqLworCXZvaWQgKnByaXY7CiB9Owog
CiAvKiogSW50ZXJuYWwgaXJxY2hpcCBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMTEzLDYgKzEx
NiwzNyBAQCBzdGF0aWMgc3RydWN0IHNiaV9pcnFjaGlwX2hhbmRsZXIgKnNiaV9pcnFjaGlwX2Zp
bmRfaGFuZGxlcihzdHJ1Y3Qgc2JpX2lycWNoaXBfZAogCXJldHVybiBOVUxMOwogfQogCitpbnQg
c2JpX2lycWNoaXBfc2V0X2h3aXJxX3ByaXYoc3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqY2hp
cCwgdTMyIGh3aXJxLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBzYmlfaXJxY2hpcF9od2lycV9k
YXRhICpkYXRhOworCisJaWYgKCFjaGlwIHx8IGNoaXAtPm51bV9od2lycSA8PSBod2lycSkKKwkg
ICAgIHJldHVybiBTQklfRUlOVkFMOworCisJZGF0YSA9ICZjaGlwLT5od2lycXNbaHdpcnFdOwor
CWRhdGEtPnByaXYgPSBwcml2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgKnNiaV9pcnFjaGlw
X2dldF9od2lycV9wcml2KHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2ly
cSkKK3sKKwlzdHJ1Y3Qgc2JpX2lycWNoaXBfaHdpcnFfZGF0YSAqZGF0YTsKKwlpZiAoIWNoaXAg
fHwgY2hpcC0+bnVtX2h3aXJxIDw9IGh3aXJxKQorCSAgICByZXR1cm4gTlVMTDsKKworCWRhdGEg
PSAmY2hpcC0+aHdpcnFzW2h3aXJxXTsKKworCXJldHVybiBkYXRhLT5wcml2OworfQorCitzdHJ1
Y3QgYXBsaWNfbXNpX2RhdGEgKnNiaV9pcnFjaGlwX2dldF9oYW5kbGVyX3ByaXYoc3RydWN0IHNi
aV9pcnFjaGlwX2RldmljZSAqY2hpcCwgdTMyIGh3aXJxKQoreworCXN0cnVjdCBzYmlfaXJxY2hp
cF9oYW5kbGVyICpoYW5kbGVyID0gc2JpX2lycWNoaXBfZmluZF9oYW5kbGVyKGNoaXAsIGh3aXJx
KTsKKworCXJldHVybiAoc3RydWN0IGFwbGljX21zaV9kYXRhICopIGhhbmRsZXItPnByaXY7Cit9
CisKIGludCBzYmlfaXJxY2hpcF9yYXdfaGFuZGxlcl9kZWZhdWx0KHN0cnVjdCBzYmlfaXJxY2hp
cF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSkKIHsKIAlzdHJ1Y3Qgc2JpX2lycWNoaXBfaGFuZGxl
ciAqaDsKZGlmZiAtLWdpdCBhL2xpYi91dGlscy9mZHQvZmR0X2hlbHBlci5jIGIvbGliL3V0aWxz
L2ZkdC9mZHRfaGVscGVyLmMKaW5kZXggYWQ0ZWZhYWYuLjc0N2JhMDI4IDEwMDY0NAotLS0gYS9s
aWIvdXRpbHMvZmR0L2ZkdF9oZWxwZXIuYworKysgYi9saWIvdXRpbHMvZmR0L2ZkdF9oZWxwZXIu
YwpAQCAtNjY0LDYgKzY2NCw3IEBAIGludCBmZHRfcGFyc2VfYXBsaWNfbm9kZShjb25zdCB2b2lk
ICpmZHQsIGludCBub2Rlb2ZmLCBzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMpCiAKIAlyYyA9IGZk
dF9hcGxpY19maW5kX2ltc2ljX25vZGUoZmR0LCBub2Rlb2ZmLCAmaW1zaWMsIHRydWUpOwogCWlm
ICghcmMpIHsKKwkJYXBsaWMtPnBhcmVudF91bmlxdWVfaWQgPSBpbXNpYy51bmlxdWVfaWQ7CiAJ
CWFwbGljLT50YXJnZXRzX21tb2RlID0gdHJ1ZTsKIAkJYXBsaWMtPmhhc19tc2ljZmdfbW1vZGUg
PSB0cnVlOwogCQlhcGxpYy0+bXNpY2ZnX21tb2RlLmxoeHMgPSBpbXNpYy5ndWVzdF9pbmRleF9i
aXRzOwpkaWZmIC0tZ2l0IGEvbGliL3V0aWxzL2lycWNoaXAvYXBsaWMuYyBiL2xpYi91dGlscy9p
cnFjaGlwL2FwbGljLmMKaW5kZXggZWZjMjU1NTUuLjAxYzJkZTRlIDEwMDY0NAotLS0gYS9saWIv
dXRpbHMvaXJxY2hpcC9hcGxpYy5jCisrKyBiL2xpYi91dGlscy9pcnFjaGlwL2FwbGljLmMKQEAg
LTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxzYmkvc2JpX2NvbnNvbGUuaD4KICNpbmNsdWRlIDxz
Ymkvc2JpX2RvbWFpbi5oPgogI2luY2x1ZGUgPHNiaS9zYmlfZXJyb3IuaD4KKyNpbmNsdWRlIDxz
Ymkvc2JpX2hlYXAuaD4KICNpbmNsdWRlIDxzYmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oPgogCiAj
ZGVmaW5lIEFQTElDX01BWF9JREMJCQkoMVVMIDw8IDE0KQpAQCAtNzMsNiArNzQsOCBAQAogI2Rl
ZmluZSBBUExJQ19UQVJHRVRfR1VFU1RfSURYKF9fZ2lkeCkgXAogCSgoKCh1MzIpKF9fZ2lkeCkp
ICYgQVBMSUNfVEFSR0VUX0dVRVNUX0lEWF9NQVNLKSA8PCBcCiAJIEFQTElDX1RBUkdFVF9HVUVT
VF9JRFhfU0hJRlQpCisjZGVmaW5lIEFQTElDX1RBUkdFVF9FSUlEKF9fZWlpZCkgXAorCSgoKHUz
MikoX19laWlkKSkgJiBBUExJQ19UQVJHRVRfRUlJRF9NQVNLKQogCiAjZGVmaW5lIEFQTElDX1NF
VElQX0JBU0UJCTB4MWMwMAogI2RlZmluZSBBUExJQ19TRVRJUE5VTQkJCTB4MWNkYwpAQCAtMTI1
LDYgKzEyOCwxMiBAQAogI2RlZmluZSBBUExJQ19ESVNBQkxFX0lUSFJFU0hPTEQJMQogI2RlZmlu
ZSBBUExJQ19FTkFCTEVfSVRIUkVTSE9MRAkJMAogCitzdHJ1Y3QgYXBsaWNfbXNpX2RhdGEgewor
CXN0cnVjdCBhcGxpY19kYXRhICphcGxpYzsKKwl1MzIgaHdpcnE7CisJdTMyIHBhcmVudF9od2ly
cTsKK307CisKIHN0YXRpYyBTQklfTElTVF9IRUFEKGFwbGljX2xpc3QpOwogc3RhdGljIHZvaWQg
YXBsaWNfd3JpdGVsX21zaWNmZyhzdHJ1Y3QgYXBsaWNfbXNpY2ZnX2RhdGEgKm1zaWNmZywKIAkJ
CQl2b2lkICptc2ljZmdhZGRyLCB2b2lkICptc2ljZmdhZGRySCk7CkBAIC0xNjksNiArMTc4LDIx
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGxpY19pcnFfY2xyaXAoc3RydWN0IGFwbGljX2RhdGEg
KmFwbGljLCB1MzIgaHdpcnEpCiAJd3JpdGVsKGh3aXJxLCAodm9pZCAqKShhcGxpYy0+YWRkciAr
IEFQTElDX0NMUklQTlVNKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGxpY19tc2lfaXJx
X3JldHJpZ2dlcl9sZXZlbChzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMsIHUzMiBod2lycSkKK3sK
KwkvKgorCSAqIFRoZSBzZWN0aW9uICI0LjkuMiBTcGVjaWFsIGNvbnNpZGVyYXRpb24gZm9yIGxl
dmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQKKwkgKiBzb3VyY2VzIiBvZiB0aGUgUklTQy1WIEFJQSBz
cGVjaWZpY2F0aW9uIHNheXM6CisJICoKKwkgKiBBIHNlY29uZCBvcHRpb24gaXMgZm9yIHRoZSBp
bnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIHdyaXRlIHRoZQorCSAqIEFQTElD4oCZcyBzb3Vy
Y2UgaWRlbnRpdHkgbnVtYmVyIGZvciB0aGUgaW50ZXJydXB0IHRvIHRoZSBkb21haW7igJlzCisJ
ICogc2V0aXBudW0gcmVnaXN0ZXIganVzdCBiZWZvcmUgZXhpdGluZy4gVGhpcyB3aWxsIGNhdXNl
IHRoZSBpbnRlcnJ1cHTigJlzCisJICogcGVuZGluZyBiaXQgdG8gYmUgc2V0IHRvIG9uZSBhZ2Fp
biBpZiB0aGUgc291cmNlIGlzIHN0aWxsIGFzc2VydGluZworCSAqIGFuIGludGVycnVwdCwgYnV0
IG5vdCBpZiB0aGUgc291cmNlIGlzIG5vdCBhc3NlcnRpbmcgYW4gaW50ZXJydXB0LgorCSAqLwor
CXdyaXRlbChod2lycSwgKHZvaWQgKikoYXBsaWMtPmFkZHIgKyBBUExJQ19TRVRJUE5VTV9MRSkp
OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgKmFwbGljX2lkY19iYXNlKHN0cnVjdCBhcGxpY19k
YXRhICphcGxpYywgdTMyIGlkY19pbmRleCkKIHsKIAlyZXR1cm4gKHZvaWQgKikoYXBsaWMtPmFk
ZHIgKyBBUExJQ19JRENfQkFTRSArCkBAIC0yOTIsNiArMzE2LDggQEAgc3RhdGljIHZvaWQgYXBs
aWNfaW5pdChzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMpCiAJfQogCiAJZG9tYWluY2ZnID0gQVBM
SUNfRE9NQUlOQ0ZHX0lFOworCWlmICghYXBsaWNfaXNfZGlyZWN0X21vZGUoYXBsaWMpKQorCQlk
b21haW5jZmcgfD0gQVBMSUNfRE9NQUlOQ0ZHX0RNOwogCiAJd3JpdGVsKGRvbWFpbmNmZywgKHZv
aWQgKikoYXBsaWMtPmFkZHIgKyBBUExJQ19ET01BSU5DRkcpKTsKIH0KQEAgLTM1Nyw2ICszODMs
OCBAQCBzdGF0aWMgaW50IGFwbGljX3dhcm1faW5pdChzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNl
ICpjaGlwKQogCWludCBpZGNfaW5kZXg7CiAKIAlhcGxpYyA9IGNvbnRhaW5lcl9vZihjaGlwLCBz
dHJ1Y3QgYXBsaWNfZGF0YSwgaXJxY2hpcCk7CisJaWYgKCFhcGxpY19pc19kaXJlY3RfbW9kZShh
cGxpYykpCisJCXJldHVybiAwOwogCiAJaGFydF9pbmRleCA9IGN1cnJlbnRfaGFydGluZGV4KCk7
CiAJaWRjX2luZGV4ICA9IGFwbGljX2ZpbmRfaWRjX2luZGV4KGFwbGljLCBoYXJ0X2luZGV4KTsK
QEAgLTM3Nyw3ICs0MDUsMTAgQEAgc3RhdGljIGludCBhcGxpY19wcm9jZXNzX2h3aXJxcyhzdHJ1
Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwKQogICAgIHUzMiBoYXJ0X2luZGV4LCBjbGFpbWks
IGh3aXJxOwogICAgIGludCBpZGNfaW5kZXgsIHJjID0gMCwgdG1wOwogCi0gICAgYXBsaWMgPSBj
b250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFwbGljX2RhdGEsIGlycWNoaXApOworCWFwbGljID0g
Y29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKKworCWlmICgh
YXBsaWNfaXNfZGlyZWN0X21vZGUoYXBsaWMpKQorCQlzYmlfcGFuaWMoImFwbGljX3Byb2Nlc3Nf
aHdpcnFzIGNhbGxlZCBpbiBNU0kgbW9kZS5cbiIpOwogCiAgICAgaGFydF9pbmRleCA9IGN1cnJl
bnRfaGFydGluZGV4KCk7CiAgICAgaWRjX2luZGV4ICA9IGFwbGljX2ZpbmRfaWRjX2luZGV4KGFw
bGljLCBoYXJ0X2luZGV4KTsKQEAgLTQwMiwzOCArNDMzLDE2MCBAQCBzdGF0aWMgaW50IGFwbGlj
X3Byb2Nlc3NfaHdpcnFzKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXApCiAgICAgcmV0
dXJuIHJjOwogfQogCitzdGF0aWMgdm9pZCBhcGxpY19od2lycV9lb2koc3RydWN0IHNiaV9pcnFj
aGlwX2RldmljZSAqY2hpcCwgdTMyIGh3aXJxKQoreworCXN0cnVjdCBhcGxpY19kYXRhICphcGxp
YzsKKyAgICB1MzIgc207CisKKwlhcGxpYyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXBs
aWNfZGF0YSwgaXJxY2hpcCk7CisgICAgaWYgKGFwbGljX2lzX2RpcmVjdF9tb2RlKGFwbGljKSkK
KwkJcmV0dXJuOworCisgICAgc20gPSBhcGxpY19zb3VyY2VjZmdfcmVhZChhcGxpYywgaHdpcnEp
ICYgQVBMSUNfU09VUkNFQ0ZHX1NNX01BU0s7CisgICAgaWYgKHNtID09IEFQTElDX1NPVVJDRUNG
R19TTV9MRVZFTF9ISUdIIHx8CisgICAgICAgIHNtID09IEFQTElDX1NPVVJDRUNGR19TTV9MRVZF
TF9MT1cpCisgICAgICAgIGFwbGljX21zaV9pcnFfcmV0cmlnZ2VyX2xldmVsKGFwbGljLCBod2ly
cSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwbGljX3Byb2dyYW1fbXNpX3RhcmdldChzdHJ1Y3QgYXBs
aWNfZGF0YSAqYXBsaWMsCisJCQkJICAgICB1MzIgaHdpcnEsIHUzMiBoYXJ0X2luZGV4LAorCQkJ
CSAgICAgdTMyIGd1ZXN0X2luZGV4LCB1MzIgZWlpZCkKK3sKKwl1MzIgdGFyZ2V0OworCisJdGFy
Z2V0ID0gQVBMSUNfVEFSR0VUX0hBUlRfSURYKGhhcnRfaW5kZXgpIHwKKwkJIEFQTElDX1RBUkdF
VF9HVUVTVF9JRFgoZ3Vlc3RfaW5kZXgpIHwKKwkJIEFQTElDX1RBUkdFVF9FSUlEKGVpaWQpOwor
CisJYXBsaWNfdGFyZ2V0X3dyaXRlKGFwbGljLCBod2lycSwgdGFyZ2V0KTsKK30KKworc3RhdGlj
IHUzMiBkZXJpdmVfaGFydF9pbmRleChzdHJ1Y3QgYXBsaWNfbXNpY2ZnX2RhdGEgKm1zaWNmZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9pcnFjaGlwX21z
aV9tc2cgKm1zZykKK3sKKwl1NjQgYWRkciA9ICgodTY0KW1zZy0+YWRkcmVzc19oaSA8PCAzMikg
fCBtc2ctPmFkZHJlc3NfbG87CisJdTY0IHRwcG4gPSBhZGRyID4+IEFQTElDX3hNU0lDRkdBRERS
X1BQTl9TSElGVDsKKwl1MzIgZ3JvdXBfaW5kZXgsIGhhcnRfaW5kZXg7CisKKwlncm91cF9pbmRl
eCA9ICh0cHBuID4+IEFQTElDX3hNU0lDRkdBRERSX1BQTl9ISFhfU0hJRlQobXNpY2ZnLT5oaHhz
KSkgJgorCQkgICAgICBBUExJQ194TVNJQ0ZHQUREUl9QUE5fSEhYX01BU0sobXNpY2ZnLT5oaHh3
KTsKKworCWhhcnRfaW5kZXggPSAodHBwbiA+PiBtc2ljZmctPmxoeHMpICYKKwkJICAgICAoKDFV
TCA8PCBtc2ljZmctPmxoeHcpIC0gMSk7CisKKwloYXJ0X2luZGV4IHw9IChncm91cF9pbmRleCA8
PCBtc2ljZmctPmxoeHcpOworCisJcmV0dXJuIGhhcnRfaW5kZXg7Cit9CisKK3N0YXRpYyB2b2lk
IGFwbGljX3dyaXRlX21zaSh1MzIgcGFyZW50X2h3aXJxLAorCQkJICAgIGNvbnN0IHN0cnVjdCBz
YmlfaXJxY2hpcF9tc2lfbXNnICptc2csCisJCQkgICAgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qg
YXBsaWNfbXNpX2RhdGEgKm1zaV9kYXRhID0gcHJpdjsKKwl1MzIgZ3Vlc3RfaW5kZXggPSAwOwor
CXUzMiBlaWlkOworCisJZWlpZCA9IG1zZy0+ZGF0YTsKKwlpZiAoIWVpaWQgfHwgZWlpZCA+IEFQ
TElDX1RBUkdFVF9FSUlEX01BU0spCisJCXJldHVybjsKKworCWFwbGljX3Byb2dyYW1fbXNpX3Rh
cmdldChtc2lfZGF0YS0+YXBsaWMsIG1zaV9kYXRhLT5od2lycSwKKwkJCQlkZXJpdmVfaGFydF9p
bmRleCgmbXNpX2RhdGEtPmFwbGljLT5tc2ljZmdfbW1vZGUsIG1zZyksCisJCQkJZ3Vlc3RfaW5k
ZXgsIGVpaWQpOworfQorCitzdGF0aWMgaW50IGFwbGljX21zaV9jYWxsYmFjayh1MzIgcGFyZW50
X2h3aXJxLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNpX2RhdGEg
PSBwcml2OworCWludCByYzsKKworCXJjID0gc2JpX2lycWNoaXBfcHJvY2Vzc19od2lycSgmbXNp
X2RhdGEtPmFwbGljLT5pcnFjaGlwLCBtc2lfZGF0YS0+aHdpcnEpOworCWlmIChyYyAmJiByYyAh
PSBTQklfRU5PRU5UKQorCQlzYmlfcHJpbnRmKCIlczogaHdpcnE9JWx1IGZhaWxlZCByYz0lZFxu
IiwKKwkJCV9fZnVuY19fLAorCQkJKHVuc2lnbmVkIGxvbmcpcGFyZW50X2h3aXJxLCByYyk7CisK
KwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYXBsaWNfc2V0dXBfbXNpKHN0cnVjdCBhcGxp
Y19kYXRhICphcGxpYywgdTMyIGh3aXJxKQoreworCXN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2Ug
KnBhcmVudDsKKwl1MzIgZmlyc3RfaHdpcnE7CisJc3RydWN0IGFwbGljX21zaV9kYXRhICptc2lf
ZGF0YTsKKwlpbnQgcmM7CisKKyAgICBwYXJlbnQgPSBzYmlfaXJxY2hpcF9maW5kX2RldmljZShh
cGxpYy0+cGFyZW50X3VuaXF1ZV9pZCk7CisgICAgaWYgKCFwYXJlbnQpIHsKKwkJc2JpX3ByaW50
ZigiJXM6IG1zaV9wYXJlbnQgaXMgTlVMTCBod2lycT0lbHVcbiIsCisJCQlfX2Z1bmNfXywgKHVu
c2lnbmVkIGxvbmcpaHdpcnEpOworCQlyZXR1cm4gU0JJX0VJTlZBTDsKKwl9CisKKwltc2lfZGF0
YSA9IHNiaV96YWxsb2Moc2l6ZW9mKHN0cnVjdCBhcGxpY19tc2lfZGF0YSkpOworCWlmICghbXNp
X2RhdGEpCisJCXJldHVybiBTQklfRU5PTUVNOworCisJbXNpX2RhdGEtPmFwbGljID0gYXBsaWM7
CisJbXNpX2RhdGEtPmh3aXJxID0gaHdpcnE7CisKKwlyYyA9IHNiaV9pcnFjaGlwX3JlZ2lzdGVy
X21zaShwYXJlbnQsIDEsCisJCQkJCWFwbGljX3dyaXRlX21zaSwKKwkJCQkJYXBsaWNfbXNpX2Nh
bGxiYWNrLAorCQkJCQltc2lfZGF0YSwKKwkJCQkJJmZpcnN0X2h3aXJxKTsKKwlpZiAocmMpIHsK
KwkJc2JpX3ByaW50ZigiJXM6IHJlZ2lzdGVyX21zaSBmYWlsZWQgaHdpcnE9JWx1IHJjPSVkXG4i
LAorCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nKWh3aXJxLCByYyk7CisJCXNiaV9mcmVlKG1z
aV9kYXRhKTsKKwkJcmV0dXJuIHJjOworCX0KKworCW1zaV9kYXRhLT5wYXJlbnRfaHdpcnEgPSBm
aXJzdF9od2lycTsKKwlzYmlfaXJxY2hpcF9zZXRfaHdpcnFfcHJpdigmYXBsaWMtPmlycWNoaXAs
IGh3aXJxLCBtc2lfZGF0YSk7CisKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhcGxp
Y19od2lycV9zZXR1cChzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwLAogCQkJICAgICB1
MzIgaHdpcnEsIHUzMiBod2lycV9mbGFncykKIHsKIAlzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWM7
Ci0JdTMyIHNvdXJjZWNmZzsJCisJdTMyIHNvdXJjZWNmZzsKIAogCWFwbGljID0gY29udGFpbmVy
X29mKGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKIAogCXNvdXJjZWNmZyA9IGFw
bGljX2h3aXJxX2ZsYWdzX3RvX3NvdXJjZWNmZyhod2lycV9mbGFncyk7CiAJaWYgKHNvdXJjZWNm
ZyA9PSBBUExJQ19TT1VSQ0VDRkdfU01fSU5BQ1RJVkUpIHsKLQkJc2JpX3ByaW50ZigiYXBsaWNf
aHdpcnFfc2V0dXA6IHVuc3VwcG9ydGVkIGZsYWdzPTB4JWx4IGh3aXJxPSVsdVxuIiwKLQkJCSAg
ICh1bnNpZ25lZCBsb25nKWh3aXJxX2ZsYWdzLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpaHdpcnEp
OworCQlzYmlfcHJpbnRmKCIlczogdW5zdXBwb3J0ZWQgZmxhZ3M9MHglbHggaHdpcnE9JWx1XG4i
LAorCQkJX19mdW5jX18sCisJCQkodW5zaWduZWQgbG9uZylod2lycV9mbGFncywKKwkJCSh1bnNp
Z25lZCBsb25nKWh3aXJxKTsKIAkJcmV0dXJuIFNCSV9FSU5WQUw7CiAJfQorCiAJYXBsaWNfc291
cmNlY2ZnX3dyaXRlKGFwbGljLCBod2lycSwgc291cmNlY2ZnKTsKIAogCWlmIChhcGxpY19od2ly
cV9pc19kZWxlZ2F0ZWQoYXBsaWMsIGh3aXJxKSkgewotCQlzYmlfcHJpbnRmKCJhcGxpY19od2ly
cV9zZXR1cDogaHdpcnE9JWx1IGlzIGRlbGVnYXRlZFxuIiwKLQkJCSAgICh1bnNpZ25lZCBsb25n
KWh3aXJxKTsKKwkJc2JpX3ByaW50ZigiJXM6IGh3aXJxPSVsdSBpcyBkZWxlZ2F0ZWRcbiIsCisJ
CQlfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpaHdpcnEpOwogCQlyZXR1cm4gU0JJX0VOT1RTVVBQ
OwogCX0KIAogCWFwbGljX2lycV9jbHJpZShhcGxpYywgaHdpcnEpOwogCWFwbGljX2lycV9jbHJp
cChhcGxpYywgaHdpcnEpOwogCisJaWYgKCFhcGxpY19pc19kaXJlY3RfbW9kZShhcGxpYykpCisJ
CXJldHVybiBhcGxpY19zZXR1cF9tc2koYXBsaWMsIGh3aXJxKTsKKwogCXJldHVybiAwOwogfQog
CiBzdGF0aWMgdm9pZCBhcGxpY19od2lycV9jbGVhbnVwKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZp
Y2UgKmNoaXAsIHUzMiBod2lycSkKIHsKIAlzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWM7CisJc3Ry
dWN0IGFwbGljX21zaV9kYXRhICptc2lfZGF0YTsKIAogCWFwbGljID0gY29udGFpbmVyX29mKGNo
aXAsIHN0cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKIAlpZiAoYXBsaWNfaHdpcnFfaXNfZGVs
ZWdhdGVkKGFwbGljLCBod2lycSkpCkBAIC00NDMsMTggKzU5Niw0MiBAQCBzdGF0aWMgdm9pZCBh
cGxpY19od2lycV9jbGVhbnVwKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBo
d2lycSkKIAlhcGxpY19pcnFfY2xyaXAoYXBsaWMsIGh3aXJxKTsKIAlhcGxpY19zb3VyY2VjZmdf
d3JpdGUoYXBsaWMsIGh3aXJxLCBBUExJQ19TT1VSQ0VDRkdfU01fSU5BQ1RJVkUpOwogCWFwbGlj
X3RhcmdldF93cml0ZShhcGxpYywgaHdpcnEsIEFQTElDX0RFRkFVTFRfUFJJT1JJVFkpOworCW1z
aV9kYXRhID0gKHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqKSBzYmlfaXJxY2hpcF9nZXRfaHdpcnFf
cHJpdihjaGlwLCBod2lycSk7CisJaWYgKG1zaV9kYXRhKQorCQlzYmlfZnJlZShtc2lfZGF0YSk7
CiB9CiAKIHN0YXRpYyBpbnQgYXBsaWNfaHdpcnFfc2V0X2FmZmluaXR5KHN0cnVjdCBzYmlfaXJx
Y2hpcF9kZXZpY2UgKmNoaXAsCiAJCQkJICAgIHUzMiBod2lycSwgdTMyIGhhcnRfaW5kZXgpCiB7
CiAJc3RydWN0IGFwbGljX2RhdGEgKmFwbGljOworCXN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNp
X2RhdGE7CisJc3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqcGFyZW50OwogCWludCBpZGNfaW5k
ZXg7CisJaW50IHJjOwogCiAJYXBsaWMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFwbGlj
X2RhdGEsIGlycWNoaXApOwogCWlmIChhcGxpY19od2lycV9pc19kZWxlZ2F0ZWQoYXBsaWMsIGh3
aXJxKSkKIAkJcmV0dXJuIFNCSV9FTk9UU1VQUDsKIAorCWlmICghYXBsaWNfaXNfZGlyZWN0X21v
ZGUoYXBsaWMpKSB7CisJCXBhcmVudCA9IHNiaV9pcnFjaGlwX2ZpbmRfZGV2aWNlKGFwbGljLT5w
YXJlbnRfdW5pcXVlX2lkKTsKKwkJaWYgKCFwYXJlbnQpIHsKKwkJCXNiaV9wcmludGYoIiVzOiBt
c2lfcGFyZW50IGlzIE5VTEwgaHdpcnE9JWx1XG4iLAorCQkJCV9fZnVuY19fLCAodW5zaWduZWQg
bG9uZylod2lycSk7CisJCQlyZXR1cm4gU0JJX0VJTlZBTDsKKwkJfQorCisJCW1zaV9kYXRhID0g
c2JpX2lycWNoaXBfZ2V0X2h3aXJxX3ByaXYoY2hpcCwgaHdpcnEpOworCQlyYyA9IHNiaV9pcnFj
aGlwX3NldF9hZmZpbml0eShwYXJlbnQsIG1zaV9kYXRhLT5wYXJlbnRfaHdpcnEsIGhhcnRfaW5k
ZXgpOworCQlpZiAocmMpIHsKKwkJCXNiaV9wcmludGYoIiVzOiBzYmlfaXJxY2hpcF9zZXRfYWZm
aW5pdHkgZmFpbGVkIGh3aXJxPSVsdSByYz0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgKHVuc2lnbmVk
IGxvbmcpaHdpcnEsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisK
IAlpZGNfaW5kZXggPSBhcGxpY19maW5kX2lkY19pbmRleChhcGxpYywgaGFydF9pbmRleCk7CiAJ
aWYgKGlkY19pbmRleCA8IDApCiAJCXJldHVybiBTQklfRUlOVkFMOwpAQCAtNDg5LDEyICs2NjYs
MTMgQEAgc3RhdGljIHZvaWQgYXBsaWNfaHdpcnFfdW5tYXNrKHN0cnVjdCBzYmlfaXJxY2hpcF9k
ZXZpY2UgKmNoaXAsIHUzMiBod2lycSkKIH0KIAogc3RhdGljIHN0cnVjdCBzYmlfaXJxY2hpcF9k
ZXZpY2UgYXBsaWNfaXJxY2hpcF90ZW1wbGF0ZSA9IHsKLQkud2FybV9pbml0CQk9IGFwbGljX3dh
cm1faW5pdCwKKwkud2FybV9pbml0CQkJPSBhcGxpY193YXJtX2luaXQsCiAJLnByb2Nlc3NfaHdp
cnFzCQk9IGFwbGljX3Byb2Nlc3NfaHdpcnFzLAorCS5od2lycV9lb2kJCQk9IGFwbGljX2h3aXJx
X2VvaSwKIAkuaHdpcnFfc2V0dXAJCT0gYXBsaWNfaHdpcnFfc2V0dXAsCiAJLmh3aXJxX2NsZWFu
dXAJCT0gYXBsaWNfaHdpcnFfY2xlYW51cCwKIAkuaHdpcnFfc2V0X2FmZmluaXR5CT0gYXBsaWNf
aHdpcnFfc2V0X2FmZmluaXR5LAotCS5od2lycV9tYXNrCQk9IGFwbGljX2h3aXJxX21hc2ssCisJ
Lmh3aXJxX21hc2sJCQk9IGFwbGljX2h3aXJxX21hc2ssCiAJLmh3aXJxX3VubWFzawkJPSBhcGxp
Y19od2lycV91bm1hc2ssCiB9OwogCkBAIC01MDMsMjEgKzY4MSw0NiBAQCBpbnQgYXBsaWNfY29s
ZF9pcnFjaGlwX2luaXQoc3RydWN0IGFwbGljX2RhdGEgKmFwbGljKQogCWludCByYzsKIAlzdHJ1
Y3QgYXBsaWNfZGVsZWdhdGVfZGF0YSAqZGVsZWc7CiAJdTMyIGZpcnN0X2RlbGVnX2lycSwgbGFz
dF9kZWxlZ19pcnEsIGk7CisJYm9vbCBtc2lfbW9kZTsKKworCW1zaV9tb2RlID0gIWFwbGljX2lz
X2RpcmVjdF9tb2RlKGFwbGljKTsKKwlpZiAoIWFwbGljLT5udW1fc291cmNlKSB7CisJCXNiaV9w
cmludGYoIiVzOiBudW1fc291cmNlIGlzIHplcm9cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNC
SV9FSU5WQUw7CisJfQogCi0JLyogU2FuaXR5IGNoZWNrcyAqLwotCWlmICghYXBsaWMgfHwKLQkg
ICAgIWFwbGljLT5udW1fc291cmNlIHx8IEFQTElDX01BWF9TT1VSQ0UgPD0gYXBsaWMtPm51bV9z
b3VyY2UgfHwKLQkgICAgQVBMSUNfTUFYX0lEQyA8PSBhcGxpYy0+bnVtX2lkYykKKwlpZiAoQVBM
SUNfTUFYX1NPVVJDRSA8PSBhcGxpYy0+bnVtX3NvdXJjZSkgeworCQlzYmlfcHJpbnRmKCIlczog
bnVtX3NvdXJjZT0lbHUgZXhjZWVkcyBtYXg9JWx1XG4iLAorCQkJX19mdW5jX18sCisJCQkodW5z
aWduZWQgbG9uZylhcGxpYy0+bnVtX3NvdXJjZSwKKwkJCSh1bnNpZ25lZCBsb25nKUFQTElDX01B
WF9TT1VSQ0UpOwogCQlyZXR1cm4gU0JJX0VJTlZBTDsKKwl9CisKKwlpZiAoIW1zaV9tb2RlICYm
IEFQTElDX01BWF9JREMgPD0gYXBsaWMtPm51bV9pZGMpIHsKKwkJc2JpX3ByaW50ZigiJXM6IG51
bV9pZGM9JWx1IGV4Y2VlZHMgbWF4PSVsdVxuIiwKKwkJCV9fZnVuY19fLAorCQkJKHVuc2lnbmVk
IGxvbmcpYXBsaWMtPm51bV9pZGMsCisJCQkodW5zaWduZWQgbG9uZylBUExJQ19NQVhfSURDKTsK
KwkJcmV0dXJuIFNCSV9FSU5WQUw7CisJfQorCiAJaWYgKGFwbGljLT50YXJnZXRzX21tb2RlICYm
IGFwbGljLT5oYXNfbXNpY2ZnX21tb2RlKSB7CiAJCXJjID0gYXBsaWNfY2hlY2tfbXNpY2ZnKCZh
cGxpYy0+bXNpY2ZnX21tb2RlKTsKLQkJaWYgKHJjKQorCQlpZiAocmMpIHsKKwkJCXNiaV9wcmlu
dGYoIiVzOiBpbnZhbGlkIE0tbW9kZSBtc2ljZmcgcmM9JWRcbiIsCisJCQkJX19mdW5jX18sIHJj
KTsKIAkJCXJldHVybiByYzsKKwkJfQogCX0KKwogCWlmIChhcGxpYy0+dGFyZ2V0c19tbW9kZSAm
JiBhcGxpYy0+aGFzX21zaWNmZ19zbW9kZSkgewogCQlyYyA9IGFwbGljX2NoZWNrX21zaWNmZygm
YXBsaWMtPm1zaWNmZ19zbW9kZSk7Ci0JCWlmIChyYykKKwkJaWYgKHJjKSB7CisJCQlzYmlfcHJp
bnRmKCIlczogaW52YWxpZCBTLW1vZGUgbXNpY2ZnIHJjPSVkXG4iLAorCQkJCV9fZnVuY19fLCBy
Yyk7CiAJCQlyZXR1cm4gcmM7CisJCX0KIAl9CiAKIAkvKiBJbml0IHRoZSBBUExJQyByZWdpc3Rl
cnMgKi8KQEAgLTU1MCwyMiArNzUzLDMxIEBAIGludCBhcGxpY19jb2xkX2lycWNoaXBfaW5pdChz
dHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMpCiAJCQlyZXR1cm4gcmM7CiAJfQogCi0JaWYgKChhcGxp
Yy0+dGFyZ2V0c19tbW9kZSkgJiYgYXBsaWNfaXNfZGlyZWN0X21vZGUoYXBsaWMpKSB7CisJaWYg
KChhcGxpYy0+dGFyZ2V0c19tbW9kZSkpIHsKIAkJYXBsaWMtPmlycWNoaXAJCSA9IGFwbGljX2ly
cWNoaXBfdGVtcGxhdGU7CiAJCWFwbGljLT5pcnFjaGlwLmlkCSA9IGFwbGljLT51bmlxdWVfaWQ7
CiAJCWFwbGljLT5pcnFjaGlwLmNhcHMgPSBTQklfSVJRQ0hJUF9DQVBTX1dJUkVEOwogCQlhcGxp
Yy0+aXJxY2hpcC5udW1faHdpcnEgPSBhcGxpYy0+bnVtX3NvdXJjZSArIDE7CiAKLQkJZm9yIChp
ID0gMDsgaSA8IGFwbGljLT5udW1faWRjOyBpKyspCi0JCQlzYmlfaGFydG1hc2tfc2V0X2hhcnRp
bmRleChhcGxpYy0+aWRjX21hcFtpXSwKLQkJCQkJCSAgICZhcGxpYy0+aXJxY2hpcC50YXJnZXRf
aGFydHMpOworCQlpZiAobXNpX21vZGUpIHsKKwkJCWFwbGljLT5pcnFjaGlwLndhcm1faW5pdCAg
ICAgID0gTlVMTDsKKwkJCWFwbGljLT5pcnFjaGlwLnByb2Nlc3NfaHdpcnFzID0gTlVMTDsKKwkJ
CWFwbGljLT5pcnFjaGlwLmh3aXJxX2VvaSAgICAgID0gTlVMTDsKKwkJfQorCisJCWlmIChtc2lf
bW9kZSkKKwkJCXNiaV9oYXJ0bWFza19zZXRfYWxsKCZhcGxpYy0+aXJxY2hpcC50YXJnZXRfaGFy
dHMpOworCQllbHNlCisJCQlmb3IgKGkgPSAwOyBpIDwgYXBsaWMtPm51bV9pZGM7IGkrKykKKwkJ
CQlzYmlfaGFydG1hc2tfc2V0X2hhcnRpbmRleChhcGxpYy0+aWRjX21hcFtpXSwKKwkJCQkJCQkg
ICAmYXBsaWMtPmlycWNoaXAudGFyZ2V0X2hhcnRzKTsKIAogCQlyYyA9IHNiaV9pcnFjaGlwX2Fk
ZF9kZXZpY2UoJmFwbGljLT5pcnFjaGlwKTsKIAkJaWYgKHJjKSB7Ci0JCQlzYmlfcHJpbnRmKCJh
cGxpY19jb2xkX2lycWNoaXBfaW5pdDogc2JpX2lycWNoaXBfYWRkX2RldmljZSBmYWlsZWQgcmM9
JWQgaWQ9JWx1IG1vZGU9JXMgdGFyZ2V0X3dlaWdodD0lbHVcbiIsCi0JCQkJcmMsCisJCQlzYmlf
cHJpbnRmKCIlczogc2JpX2lycWNoaXBfYWRkX2RldmljZSBmYWlsZWQgcmM9JWQgaWQ9JWx1IG1v
ZGU9JXMgdGFyZ2V0X3dlaWdodD0lbHVcbiIsCisJCQkJX19mdW5jX18sIHJjLAogCQkJCSh1bnNp
Z25lZCBsb25nKWFwbGljLT5pcnFjaGlwLmlkLAotCQkJCSJkaXJlY3QiLAorCQkJCW1zaV9tb2Rl
ID8gIm1zaSIgOiAiZGlyZWN0IiwKIAkJCQkodW5zaWduZWQgbG9uZylzYmlfaGFydG1hc2tfd2Vp
Z2h0KAogCQkJCQkmYXBsaWMtPmlycWNoaXAudGFyZ2V0X2hhcnRzKSk7CiAJCQlyZXR1cm4gcmM7
Ci0tIAoyLjQzLjAKCgotLSAKb3BlbnNiaSBtYWlsaW5nIGxpc3QKb3BlbnNiaUBsaXN0cy5pbmZy
YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vb3Bl
bnNiaQo=