Re: [PATCH v6 4/8] RISC-V: KVM: Add ssp context save/restore

Anup Patel <[email protected]> Wed, 29 Jul 2026 18:25:03 +0530
Newsgroups org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest
Message-ID <CAAhSdy0fwA3V_CKdJJ9tr7uHyBXD9QjehTfyyz_S87sSRSpMQw@mail.gmail.com>
T24gTW9uLCBKdWwgMTMsIDIwMjYgYXQgNjozNOKAr0FNIElub2NoaSBBbWFvdG8gPGlub2NoaWFt
YUBnbWFpbC5jb20+IHdyb3RlOgo+Cj4gQWRkIHNzcCBjb250ZXh0IHNhdmUvcmVzdG9yZSBmb3Ig
Z3Vlc3QgVkNQVXMgYW5kIGFsc28gYWRkIGl0IHRvIHRoZQo+IE9ORV9SRUcgaW50ZXJmYWNlIHRv
IGFsbG93IGl0cyBhY2Nlc3MgZnJvbSB1c2VyIHNwYWNlLgo+Cj4gU2lnbmVkLW9mZi1ieTogSW5v
Y2hpIEFtYW90byA8aW5vY2hpYW1hQGdtYWlsLmNvbT4KCkxHVE0uCgpSZXZpZXdlZC1ieTogQW51
cCBQYXRlbCA8YW51cEBicmFpbmZhdWx0Lm9yZz4KClRoYW5rcywKQW51cAoKPiAtLS0KPiAgYXJj
aC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIHwgIDcgKysrKwo+ICBhcmNoL3Jpc2N2L2lu
Y2x1ZGUvdWFwaS9hc20va3ZtLmggfCAgOCArKysrCj4gIGFyY2gvcmlzY3Yva3ZtL3ZjcHUuYyAg
ICAgICAgICAgICB8ICA3ICsrKysKPiAgYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYyAgICAg
IHwgNjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICA0IGZpbGVzIGNoYW5nZWQs
IDg4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9y
aXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1f
aG9zdC5oCj4gaW5kZXggNjAwMTdjZWVjOWQyLi5lNWVkM2IwZTVhNTUgMTAwNjQ0Cj4gLS0tIGEv
YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4gKysrIGIvYXJjaC9yaXNjdi9pbmNs
dWRlL2FzbS9rdm1faG9zdC5oCj4gQEAgLTE2Myw2ICsxNjMsMTAgQEAgc3RydWN0IGt2bV92Y3B1
X3Ntc3RhdGVlbl9jc3Igewo+ICAgICAgICAgdW5zaWduZWQgbG9uZyBzc3RhdGVlbjA7Cj4gIH07
Cj4KPiArc3RydWN0IGt2bV92Y3B1X3ppY2Zpc3NfY3NyIHsKPiArICAgICAgIHVuc2lnbmVkIGxv
bmcgc3NwOwo+ICt9Owo+ICsKPiAgc3RydWN0IGt2bV92Y3B1X3Jlc2V0X3N0YXRlIHsKPiAgICAg
ICAgIHNwaW5sb2NrX3QgbG9jazsKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGM7Cj4gQEAgLTIw
Myw2ICsyMDcsOSBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7Cj4gICAgICAgICAvKiBDUFUgU21z
dGF0ZWVuIENTUiBjb250ZXh0IG9mIEd1ZXN0IFZDUFUgKi8KPiAgICAgICAgIHN0cnVjdCBrdm1f
dmNwdV9zbXN0YXRlZW5fY3NyIHNtc3RhdGVlbl9jc3I7Cj4KPiArICAgICAgIC8qIENQVSBaaWNm
aXNzIENTUiBjb250ZXh0IG9mIEd1ZXN0IFZDUFUgKi8KPiArICAgICAgIHN0cnVjdCBrdm1fdmNw
dV96aWNmaXNzX2NzciB6aWNmaXNzX2NzcjsKPiArCj4gICAgICAgICAvKiBDUFUgcmVzZXQgc3Rh
dGUgb2YgR3Vlc3QgVkNQVSAqLwo+ICAgICAgICAgc3RydWN0IGt2bV92Y3B1X3Jlc2V0X3N0YXRl
IHJlc2V0X3N0YXRlOwo+Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2Fz
bS9rdm0uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAo+IGluZGV4IGEyN2Rl
ODUwZmE0Yy4uZmQ0YzgxNjk3NjE3IDEwMDY0NAo+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS91
YXBpL2FzbS9rdm0uaAo+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAo+
IEBAIC0xMDIsNiArMTAyLDExIEBAIHN0cnVjdCBrdm1fcmlzY3Zfc21zdGF0ZWVuX2NzciB7Cj4g
ICAgICAgICB1bnNpZ25lZCBsb25nIHNzdGF0ZWVuMDsKPiAgfTsKPgo+ICsvKiBaaWNmaXNzIENT
UiBmb3IgS1ZNX0dFVF9PTkVfUkVHIGFuZCBLVk1fU0VUX09ORV9SRUcgKi8KPiArc3RydWN0IGt2
bV9yaXNjdl96aWNmaXNzX2NzciB7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIHNzcDsKPiArfTsK
PiArCj4gIC8qIFRJTUVSIHJlZ2lzdGVycyBmb3IgS1ZNX0dFVF9PTkVfUkVHIGFuZCBLVk1fU0VU
X09ORV9SRUcgKi8KPiAgc3RydWN0IGt2bV9yaXNjdl90aW1lciB7Cj4gICAgICAgICBfX3U2NCBm
cmVxdWVuY3k7Cj4gQEAgLTI2NiwxMiArMjcxLDE1IEBAIHN0cnVjdCBrdm1fcmlzY3Zfc2JpX2Z3
ZnQgewo+ICAjZGVmaW5lIEtWTV9SRUdfUklTQ1ZfQ1NSX0dFTkVSQUwgICAgICAoMHgwIDw8IEtW
TV9SRUdfUklTQ1ZfU1VCVFlQRV9TSElGVCkKPiAgI2RlZmluZSBLVk1fUkVHX1JJU0NWX0NTUl9B
SUEgICAgICAgICAgKDB4MSA8PCBLVk1fUkVHX1JJU0NWX1NVQlRZUEVfU0hJRlQpCj4gICNkZWZp
bmUgS1ZNX1JFR19SSVNDVl9DU1JfU01TVEFURUVOICAgICgweDIgPDwgS1ZNX1JFR19SSVNDVl9T
VUJUWVBFX1NISUZUKQo+ICsjZGVmaW5lIEtWTV9SRUdfUklTQ1ZfQ1NSX1pJQ0ZJU1MgICAgICAo
MHgzIDw8IEtWTV9SRUdfUklTQ1ZfU1VCVFlQRV9TSElGVCkKPiAgI2RlZmluZSBLVk1fUkVHX1JJ
U0NWX0NTUl9SRUcobmFtZSkgICAgXAo+ICAgICAgICAgICAgICAgICAob2Zmc2V0b2Yoc3RydWN0
IGt2bV9yaXNjdl9jc3IsIG5hbWUpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQo+ICAjZGVmaW5l
IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcobmFtZSkgICAgICAgIFwKPiAgICAgICAgIChvZmZz
ZXRvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IsIG5hbWUpIC8gc2l6ZW9mKHVuc2lnbmVkIGxv
bmcpKQo+ICAjZGVmaW5lIEtWTV9SRUdfUklTQ1ZfQ1NSX1NNU1RBVEVFTl9SRUcobmFtZSkgIFwK
PiAgICAgICAgIChvZmZzZXRvZihzdHJ1Y3Qga3ZtX3Jpc2N2X3Ntc3RhdGVlbl9jc3IsIG5hbWUp
IC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQo+ICsjZGVmaW5lIEtWTV9SRUdfUklTQ1ZfQ1NSX1pJ
Q0ZJU1NfUkVHKG5hbWUpICBcCj4gKyAgICAgICAob2Zmc2V0b2Yoc3RydWN0IGt2bV9yaXNjdl96
aWNmaXNzX2NzciwgbmFtZSkgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCj4KPiAgLyogVGltZXIg
cmVnaXN0ZXJzIGFyZSBtYXBwZWQgYXMgdHlwZSA0ICovCj4gICNkZWZpbmUgS1ZNX1JFR19SSVND
Vl9USU1FUiAgICAgICAgICAgICgweDA0IDw8IEtWTV9SRUdfUklTQ1ZfVFlQRV9TSElGVCkKPiBk
aWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5j
Cj4gaW5kZXggY2Y2ZTIzMWU3NmUyLi5hY2RiMTJmY2RiNjkgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9y
aXNjdi9rdm0vdmNwdS5jCj4gKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCj4gQEAgLTYzLDYg
KzYzLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qg
a3ZtX3ZjcHUgKnZjcHUsCj4gICAgICAgICBtZW1zZXQoY250eCwgMCwgc2l6ZW9mKCpjbnR4KSk7
Cj4gICAgICAgICBtZW1zZXQoY3NyLCAwLCBzaXplb2YoKmNzcikpOwo+ICAgICAgICAgbWVtc2V0
KCZ2Y3B1LT5hcmNoLnNtc3RhdGVlbl9jc3IsIDAsIHNpemVvZih2Y3B1LT5hcmNoLnNtc3RhdGVl
bl9jc3IpKTsKPiArICAgICAgIG1lbXNldCgmdmNwdS0+YXJjaC56aWNmaXNzX2NzciwgMCwgc2l6
ZW9mKHZjcHUtPmFyY2guemljZmlzc19jc3IpKTsKPgo+ICAgICAgICAgLyogUmVzdG9yZSBkYXRh
cCBhcyBpdCdzIG5vdCBhIHBhcnQgb2YgdGhlIGd1ZXN0IGNvbnRleHQuICovCj4gICAgICAgICBj
bnR4LT52ZWN0b3IuZGF0YXAgPSB2ZWN0b3JfZGF0YXA7Cj4gQEAgLTcyMCw2ICs3MjEsNyBAQCBz
dGF0aWMgdm9pZCBrdm1fcmlzY3ZfdXBkYXRlX2h2aXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+
Cj4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zd2FwX2luX2d1
ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiAgewo+ICsgICAgICAgc3RydWN0IGt2
bV92Y3B1X3ppY2Zpc3NfY3NyICp6aWNmaWNzciA9ICZ2Y3B1LT5hcmNoLnppY2Zpc3NfY3NyOwo+
ICAgICAgICAgc3RydWN0IGt2bV92Y3B1X3Ntc3RhdGVlbl9jc3IgKnNtY3NyID0gJnZjcHUtPmFy
Y2guc21zdGF0ZWVuX2NzcjsKPiAgICAgICAgIHN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9ICZ2
Y3B1LT5hcmNoLmd1ZXN0X2NzcjsKPgo+IEBAIC03MjcsMTAgKzcyOSwxMyBAQCBzdGF0aWMgX19h
bHdheXNfaW5saW5lIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3dhcF9pbl9ndWVzdF9zdGF0ZShzdHJ1
Y3Qga3ZtX3ZjcHUgKgo+ICAgICAgICAgdmNwdS0+YXJjaC5ob3N0X3NlbnZjZmcgPSBjc3Jfc3dh
cChDU1JfU0VOVkNGRywgY3NyLT5zZW52Y2ZnKTsKPiAgICAgICAgIGlmIChyaXNjdl9oYXNfZXh0
ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9FWFRfU01TVEFURUVOKSkKPiAgICAgICAgICAgICAg
ICAgdmNwdS0+YXJjaC5ob3N0X3NzdGF0ZWVuMCA9IGNzcl9zd2FwKENTUl9TU1RBVEVFTjAsIHNt
Y3NyLT5zc3RhdGVlbjApOwo+ICsgICAgICAgaWYgKHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtl
bHkoUklTQ1ZfSVNBX0VYVF9aSUNGSVNTKSkKPiArICAgICAgICAgICAgICAgY3NyX3dyaXRlKENT
Ul9TU1AsIHppY2ZpY3NyLT5zc3ApOwo+ICB9Cj4KPiAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2
b2lkIGt2bV9yaXNjdl92Y3B1X3N3YXBfaW5faG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZj
cHUpCj4gIHsKPiArICAgICAgIHN0cnVjdCBrdm1fdmNwdV96aWNmaXNzX2NzciAqemljZmljc3Ig
PSAmdmNwdS0+YXJjaC56aWNmaXNzX2NzcjsKPiAgICAgICAgIHN0cnVjdCBrdm1fdmNwdV9zbXN0
YXRlZW5fY3NyICpzbWNzciA9ICZ2Y3B1LT5hcmNoLnNtc3RhdGVlbl9jc3I7Cj4gICAgICAgICBz
dHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmdmNwdS0+YXJjaC5ndWVzdF9jc3I7Cj4KPiBAQCAt
NzM4LDYgKzc0Myw4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBrdm1fcmlzY3ZfdmNw
dV9zd2FwX2luX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Cj4gICAgICAgICBjc3ItPnNl
bnZjZmcgPSBjc3Jfc3dhcChDU1JfU0VOVkNGRywgdmNwdS0+YXJjaC5ob3N0X3NlbnZjZmcpOwo+
ICAgICAgICAgaWYgKHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9T
TVNUQVRFRU4pKQo+ICAgICAgICAgICAgICAgICBzbWNzci0+c3N0YXRlZW4wID0gY3NyX3N3YXAo
Q1NSX1NTVEFURUVOMCwgdmNwdS0+YXJjaC5ob3N0X3NzdGF0ZWVuMCk7Cj4gKyAgICAgICBpZiAo
cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pJQ0ZJU1MpKQo+ICsg
ICAgICAgICAgICAgICB6aWNmaWNzci0+c3NwID0gY3NyX3N3YXAoQ1NSX1NTUCwgMCk7Cj4gIH0K
Pgo+ICAvKgo+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jIGIvYXJj
aC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYwo+IGluZGV4IGJiOTIwZTg5MjNjOS4uZGQ5NTE5NDM4
NTQ2IDEwMDY0NAo+IC0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMKPiArKysgYi9h
cmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCj4gQEAgLTM1NSw2ICszNTUsNDQgQEAgc3RhdGlj
IGludCBrdm1fcmlzY3ZfdmNwdV9zbXN0YXRlZW5fZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZj
cHUsCj4gICAgICAgICByZXR1cm4gMDsKPiAgfQo+Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9y
aXNjdl92Y3B1X3ppY2Zpc3Nfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
cmVnX251bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyByZWdfdmFsKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHVf
emljZmlzc19jc3IgKmNzciA9ICZ2Y3B1LT5hcmNoLnppY2Zpc3NfY3NyOwo+ICsgICAgICAgdW5z
aWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHVfemljZmlzc19jc3Ip
IC8KPiArICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwo+ICsKPiArICAgICAg
IGlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS0+YXJjaC5pc2EsIFpJQ0ZJ
U1MpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKPiArICAgICAgIGlmIChyZWdf
bnVtID49IHJlZ3NfbWF4KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKPiArCj4g
KyAgICAgICByZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTsK
PiArCj4gKyAgICAgICAoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDsK
PiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1
X3ppY2Zpc3NfZ2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByZWdfbnVtLAo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dF92
YWwpCj4gK3sKPiArICAgICAgIHN0cnVjdCBrdm1fdmNwdV96aWNmaXNzX2NzciAqY3NyID0gJnZj
cHUtPmFyY2guemljZmlzc19jc3I7Cj4gKyAgICAgICB1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0g
c2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV96aWNmaXNzX2NzcikgLwo+ICsgICAgICAgICAgICAgICBz
aXplb2YodW5zaWduZWQgbG9uZyk7Cj4gKwo+ICsgICAgICAgaWYgKCFyaXNjdl9pc2FfZXh0ZW5z
aW9uX2F2YWlsYWJsZSh2Y3B1LT5hcmNoLmlzYSwgWklDRklTUykpCj4gKyAgICAgICAgICAgICAg
IHJldHVybiAtRU5PRU5UOwo+ICsgICAgICAgaWYgKHJlZ19udW0gPj0gcmVnc19tYXgpCj4gKyAg
ICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsKPiArICAgICAgIHJlZ19udW0gPSBhcnJh
eV9pbmRleF9ub3NwZWMocmVnX251bSwgcmVnc19tYXgpOwo+ICsKPiArICAgICAgICpvdXRfdmFs
ID0gKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXTsKPiArICAgICAgIHJldHVybiAwOwo+
ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dldF9yZWdfY3NyKHN0cnVjdCBr
dm1fdmNwdSAqdmNwdSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKQo+ICB7Cj4gQEAgLTM4MSw2ICs0MTksOSBAQCBz
dGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dldF9yZWdfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNw
dSwKPiAgICAgICAgIGNhc2UgS1ZNX1JFR19SSVNDVl9DU1JfU01TVEFURUVOOgo+ICAgICAgICAg
ICAgICAgICByYyA9IGt2bV9yaXNjdl92Y3B1X3Ntc3RhdGVlbl9nZXRfY3NyKHZjcHUsIHJlZ19u
dW0sICZyZWdfdmFsKTsKPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBjYXNlIEtW
TV9SRUdfUklTQ1ZfQ1NSX1pJQ0ZJU1M6Cj4gKyAgICAgICAgICAgICAgIHJjID0ga3ZtX3Jpc2N2
X3ZjcHVfemljZmlzc19nZXRfY3NyKHZjcHUsIHJlZ19udW0sICZyZWdfdmFsKTsKPiArICAgICAg
ICAgICAgICAgYnJlYWs7Cj4gICAgICAgICBkZWZhdWx0Ogo+ICAgICAgICAgICAgICAgICByYyA9
IC1FTk9FTlQ7Cj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+IEBAIC00MjMsNiArNDY0LDkgQEAg
c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZj
cHUsCj4gICAgICAgICBjYXNlIEtWTV9SRUdfUklTQ1ZfQ1NSX1NNU1RBVEVFTjoKPiAgICAgICAg
ICAgICAgICAgcmMgPSBrdm1fcmlzY3ZfdmNwdV9zbXN0YXRlZW5fc2V0X2Nzcih2Y3B1LCByZWdf
bnVtLCByZWdfdmFsKTsKPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBjYXNlIEtW
TV9SRUdfUklTQ1ZfQ1NSX1pJQ0ZJU1M6Cj4gKyAgICAgICAgICAgICAgIHJjID0ga3ZtX3Jpc2N2
X3ZjcHVfemljZmlzc19zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpOwo+ICsgICAgICAg
ICAgICAgICBicmVhazsKPiAgICAgICAgIGRlZmF1bHQ6Cj4gICAgICAgICAgICAgICAgIHJjID0g
LUVOT0VOVDsKPiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gQEAgLTY4MCw2ICs3MjQsOCBAQCBz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbnVtX2Nzcl9yZWdzKGNvbnN0IHN0cnVjdCBrdm1f
dmNwdSAqdmNwdSkKPiAgICAgICAgICAgICAgICAgbiArPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNj
dl9haWFfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKPiAgICAgICAgIGlmIChyaXNjdl9p
c2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LT5hcmNoLmlzYSwgU01TVEFURUVOKSkKPiAgICAg
ICAgICAgICAgICAgbiArPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9zbXN0YXRlZW5fY3NyKSAv
IHNpemVvZih1bnNpZ25lZCBsb25nKTsKPiArICAgICAgIGlmIChyaXNjdl9pc2FfZXh0ZW5zaW9u
X2F2YWlsYWJsZSh2Y3B1LT5hcmNoLmlzYSwgWklDRklTUykpCj4gKyAgICAgICAgICAgICAgIG4g
Kz0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfemljZmlzc19jc3IpIC8gc2l6ZW9mKHVuc2lnbmVk
IGxvbmcpOwo+Cj4gICAgICAgICByZXR1cm4gbjsKPiAgfQo+IEBAIC02ODgsNyArNzM0LDcgQEAg
c3RhdGljIGludCBjb3B5X2Nzcl9yZWdfaW5kaWNlcyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZj
cHUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgX191c2VyICp1aW5kaWNl
cykKPiAgewo+ICAgICAgICAgaW50IG4xID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfY3NyKSAv
IHNpemVvZih1bnNpZ25lZCBsb25nKTsKPiAtICAgICAgIGludCBuMiA9IDAsIG4zID0gMDsKPiAr
ICAgICAgIGludCBuMiA9IDAsIG4zID0gMCwgbjQgPSAwOwo+Cj4gICAgICAgICAvKiBjb3B5IGdl
bmVyYWwgY3NyIHJlZ3MgKi8KPiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjE7IGkrKykg
ewo+IEBAIC03NDAsNyArNzg2LDI1IEBAIHN0YXRpYyBpbnQgY29weV9jc3JfcmVnX2luZGljZXMo
Y29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAg
ICB9Cj4KPiAtICAgICAgIHJldHVybiBuMSArIG4yICsgbjM7Cj4gKyAgICAgICAvKiBjb3B5IFpp
Y2Zpc3MgY3NyIHJlZ3MgKi8KPiArICAgICAgIGlmIChyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWls
YWJsZSh2Y3B1LT5hcmNoLmlzYSwgWklDRklTUykpIHsKPiArICAgICAgICAgICAgICAgbjQgPSBz
aXplb2Yoc3RydWN0IGt2bV9yaXNjdl96aWNmaXNzX2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9u
Zyk7Cj4gKwo+ICsgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG40OyBpKyspIHsK
PiArICAgICAgICAgICAgICAgICAgICAgICB1NjQgc2l6ZSA9IElTX0VOQUJMRUQoQ09ORklHXzMy
QklUKSA/Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLVk1fUkVHX1NJWkVf
VTMyIDogS1ZNX1JFR19TSVpFX1U2NDsKPiArICAgICAgICAgICAgICAgICAgICAgICB1NjQgcmVn
ID0gS1ZNX1JFR19SSVNDViB8IHNpemUgfCBLVk1fUkVHX1JJU0NWX0NTUiB8Cj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1ZNX1JFR19SSVNDVl9DU1JfWklDRklT
UyB8IGk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICh1aW5kaWNlcykgewo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dF91c2VyKHJlZywgdWluZGljZXMp
KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVM
VDsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbmRpY2VzKys7Cj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9Cj4gKwo+
ICsgICAgICAgcmV0dXJuIG4xICsgbjIgKyBuMyArIG40Owo+ICB9Cj4KPiAgc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBsb25nIG51bV90aW1lcl9yZWdzKHZvaWQpCj4gLS0KPiAyLjU1LjAKPgoKLS0g
Cmt2bS1yaXNjdiBtYWlsaW5nIGxpc3QKa3ZtLXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0
cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rdm0tcmlzY3YK