Re: [PATCH v4 2/5] RISC-V: KVM: Split huge pages when dirty logging is enabled

Anup Patel <[email protected]> Fri, 31 Jul 2026 11:10:03 +0530
Newsgroups org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <CAAhSdy2AKgcpEokcx2pVWUeB+kS0FAXX1Y2MkJoisqnVZmRO+A@mail.gmail.com>
T24gV2VkLCBKdWwgMSwgMjAyNiBhdCA1OjQx4oCvUE0gV2FuZyBZZWNoYW8gPHdhbmcueWVjaGFv
MjU1QHp0ZS5jb20uY24+IHdyb3RlOgo+Cj4gU3BsaXQgaHVnZSBwYWdlcyBlYWdlcmx5IHdoZW4g
ZW5hYmxpbmcgZGlydHkgbG9nZ2luZy4gVGhlIGdvYWwgaXMgdG8KPiBhdm9pZCBkb2luZyBpdCB3
aGlsZSBmYXVsdGluZyBvbiB3cml0ZS1wcm90ZWN0ZWQgcGFnZXMsIHdoaWNoCj4gbmVnYXRpdmVs
eSBpbXBhY3RzIGd1ZXN0IHBlcmZvcm1hbmNlLgo+Cj4gVGhlIGJlbmVmaXRzIG9mIGVhZ2VyIHBh
Z2Ugc3BsaXR0aW5nIGFyZSB0aGUgc2FtZSBhcyBpbiB4ODYgYW5kIGFybTY0LAo+IGFkZGVkIHdp
dGggY29tbWl0IGEzZmU1ZGJkYTBhNCAoIktWTTogeDg2L21tdTogU3BsaXQgaHVnZSBwYWdlcyBt
YXBwZWQKPiBieSB0aGUgVERQIE1NVSB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZW5hYmxlZCIpIGFu
ZCBjb21taXQgZTdiZjdhNDkwYzY4Cj4gKCJLVk06IGFybTY0OiBTcGxpdCBodWdlIHBhZ2VzIHdo
ZW4gZGlydHkgbG9nZ2luZyBpcyBlbmFibGVkIikKPgo+IFNpZ25lZC1vZmYtYnk6IFdhbmcgWWVj
aGFvIDx3YW5nLnllY2hhbzI1NUB6dGUuY29tLmNuPgo+IC0tLQo+ICBhcmNoL3Jpc2N2L2luY2x1
ZGUvYXNtL2t2bV9nc3RhZ2UuaCB8ICA2ICstLQo+ICBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyAg
ICAgICAgICAgICB8IDIzICsrKysrKy0tLQo+ICBhcmNoL3Jpc2N2L2t2bS9tbXUuYyAgICAgICAg
ICAgICAgICB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hh
bmdlZCwgOTUgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv
YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUv
YXNtL2t2bV9nc3RhZ2UuaAo+IGluZGV4IDIxZTIwMTlkZjBjZjUuLmY3MjYyNzk3ODAxNzcgMTAw
NjQ0Cj4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKPiArKysgYi9h
cmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaAo+IEBAIC02NCw5ICs2NCw5IEBAIGlu
dCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCj4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWdlX3Jkb25seSwgYm9vbCBwYWdl
X2V4ZWMsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9nc3RhZ2Vf
bWFwcGluZyAqb3V0X21hcCk7Cj4KPiAtaW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShz
dHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCj4gLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNo
KTsKPiArYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2Ug
KmdzdGFnZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX21t
dV9tZW1vcnlfY2FjaGUgKnBjYWNoZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKTsKPgo+ICBlbnVtIGt2
bV9yaXNjdl9nc3RhZ2Vfb3Agewo+ICAgICAgICAgR1NUQUdFX09QX05PUCA9IDAsICAgICAgLyog
Tm90aGluZyAqLwo+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gv
cmlzY3Yva3ZtL2dzdGFnZS5jCj4gaW5kZXggYzRjM2I3OTU2N2YxMC4uNDgxNTIzM2Y5Nzg4ZCAx
MDA2NDQKPiAtLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwo+ICsrKyBiL2FyY2gvcmlzY3Yv
a3ZtL2dzdGFnZS5jCj4gQEAgLTMwMywxOSArMzAzLDIwIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgbG9uZyBtYWtlX2NoaWxkX3B0ZSh1bnNpZ25lZCBsb25nIGh1Z2VfcHRlLCBpbnQgaW5kZXgs
Cj4gICAgICAgICByZXR1cm4gY2hpbGRfcHRlOwo+ICB9Cj4KPiAtaW50IGt2bV9yaXNjdl9nc3Rh
Z2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAo+IC0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCj4g
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xl
dmVsLCBib29sIGZsdXNoKQo+ICtib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1
Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLAo+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gp
Cj4gIHsKPiAgICAgICAgIHUzMiBjdXJyZW50X2xldmVsID0gZ3N0YWdlLT5wZ2RfbGV2ZWxzIC0g
MTsKPiAgICAgICAgIHB0ZV90ICpuZXh0X3B0ZXAgPSAocHRlX3QgKilnc3RhZ2UtPnBnZDsKPiAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGNoaWxkX3B0ZTsKPiAgICAgICAgIHVuc2ln
bmVkIGxvbmcgY2hpbGRfcGFnZV9zaXplOwo+ICsgICAgICAgYm9vbCBuZWVkX2ZsdXNoID0gZmFs
c2U7Cj4gICAgICAgICBwdGVfdCAqcHRlcDsKPiAgICAgICAgIGludCBpLCByZXQ7Cj4KPiAgICAg
ICAgIGlmICghcGNhY2hlKQo+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Cj4gICAgICAgICB3aGlsZShjdXJyZW50X2xldmVs
ID4gdGFyZ2V0X2xldmVsKSB7Cj4gICAgICAgICAgICAgICAgIHB0ZXAgPSAocHRlX3QgKikmbmV4
dF9wdGVwW2dzdGFnZV9wdGVfaW5kZXgoZ3N0YWdlLCBhZGRyLCBjdXJyZW50X2xldmVsKV07Cj4g
QEAgLTMzMywyNyArMzM0LDM1IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3Ry
dWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwKPgo+ICAgICAgICAgICAgICAgICByZXQgPSBnc3RhZ2Vf
bGV2ZWxfdG9fcGFnZV9zaXplKGdzdGFnZSwgY3VycmVudF9sZXZlbCAtIDEsICZjaGlsZF9wYWdl
X3NpemUpOwo+ICAgICAgICAgICAgICAgICBpZiAocmV0KQo+IC0gICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfZmx1
c2g7Cj4KPiAgICAgICAgICAgICAgICAgbmV4dF9wdGVwID0ga3ZtX21tdV9tZW1vcnlfY2FjaGVf
YWxsb2MocGNhY2hlKTsKPiAgICAgICAgICAgICAgICAgaWYgKCFuZXh0X3B0ZXApCj4gLSAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5lZWRfZmx1c2g7Cj4KPiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IFBUUlNfUEVSX1BURTsgaSsrKSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfcHRl
ID0gbWFrZV9jaGlsZF9wdGUoaHVnZV9wdGUsIGksIGNoaWxkX3BhZ2Vfc2l6ZSk7Cj4gICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0X3B0ZSgocHRlX3QgKikmbmV4dF9wdGVwW2ldLCBfX3B0ZShj
aGlsZF9wdGUpKTsKPiAgICAgICAgICAgICAgICAgfQo+Cj4gKyAgICAgICAgICAgICAgIC8qCj4g
KyAgICAgICAgICAgICAgICAqIEVuc3VyZSB0aGUgd3JpdGVzIHRvIHRoZSBjaGlsZCBQVEVzIGFy
ZSB2aXNpYmxlIGJlZm9yZQo+ICsgICAgICAgICAgICAgICAgKiBsaW5raW5nIHRoZSBuZXcgcGFn
ZSB0YWJsZSB0byB0aGUgcGFyZW50IFBURS4KPiArICAgICAgICAgICAgICAgICovCj4gKyAgICAg
ICAgICAgICAgIHNtcF93bWIoKTsKPiArCj4gICAgICAgICAgICAgICAgIHNldF9wdGUocHRlcCwg
cGZuX3B0ZShQRk5fRE9XTihfX3BhKG5leHRfcHRlcCkpLAo+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19wZ3Byb3QoX1BBR0VfVEFCTEUpKSk7Cj4KPiAgICAgICAgICAgICAgICAg
aWYgKGZsdXNoKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGdzdGFnZV90bGJfZmx1c2goZ3N0
YWdlLCBjdXJyZW50X2xldmVsLCBhZGRyKTsKPiArICAgICAgICAgICAgICAgZWxzZQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgIG5lZWRfZmx1c2ggPSB0cnVlOwo+Cj4gICAgICAgICAgICAgICAg
IGN1cnJlbnRfbGV2ZWwtLTsKPiAgICAgICAgIH0KPgo+IC0gICAgICAgcmV0dXJuIDA7Cj4gKyAg
ICAgICByZXR1cm4gbmVlZF9mbHVzaDsKPiAgfQo+Cj4gIGJvb2wga3ZtX3Jpc2N2X2dzdGFnZV9v
cF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgZ3BhX3QgYWRkciwKPiBkaWZmIC0tZ2l0
IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwo+IGluZGV4IDlj
ZjY5YmMyOGI5YzUuLjM2MzIzOGVmYWVkYjQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9yaXNjdi9rdm0v
bW11LmMKPiArKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwo+IEBAIC05Nyw2ICs5Nyw2MiBAQCB2
b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5z
aWduZWQgbG9uZyBzaXplKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZSA+PiBQQUdFX1NISUZUKTsKPiAgfQo+Cj4gK3N0YXRpYyBib29sIG5lZWRfdG9w
dXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY291bnQpCj4g
K3sKPiArICAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGU7Cj4gKwo+ICsg
ICAgICAgaWYgKG5lZWRfcmVzY2hlZCgpIHx8IHJ3bG9ja19uZWVkYnJlYWsoJmt2bS0+bW11X2xv
Y2spKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgICAgICBjYWNoZSA9
ICZrdm0tPmFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7Cj4gKyAgICAgICByZXR1cm4ga3ZtX21t
dV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSA8IGNvdW50Owo+ICt9Cj4gKwo+
ICtzdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0
YWdlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfYWRkcl90IHN0YXJ0
LCBwaHlzX2FkZHJfdCBlbmQpCj4gK3sKPiArICAgICAgIHN0cnVjdCBrdm0gKmt2bSA9IGdzdGFn
ZS0+a3ZtOwo+ICsgICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSAm
a3ZtLT5hcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlOwo+ICsgICAgICAgcGh5c19hZGRyX3QgYWRk
ciA9IEFMSUdOX0RPV04oc3RhcnQsIFBNRF9TSVpFKTsKPiArICAgICAgIHBoeXNfYWRkcl90IGxh
c3RfZmx1c2hfZ2ZuID0gYWRkciA+PiBQQUdFX1NISUZUOwo+ICsgICAgICAgaW50IGNvdW50ID0g
Z3N0YWdlLT5wZ2RfbGV2ZWxzOwo+ICsgICAgICAgYm9vbCBmbHVzaCA9IGZhbHNlOwo+ICsgICAg
ICAgaW50IHJldDsKPiArCj4gKyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZrdm0t
Pm1tdV9sb2NrKTsKPiArCj4gKyAgICAgICB3aGlsZSAoYWRkciA8IGVuZCkgewo+ICsgICAgICAg
ICAgICAgICBpZiAobmVlZF90b3B1cF9zcGxpdF9jYWNoZXNfb3JfcmVzY2hlZChrdm0sIGNvdW50
KSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbHVzaCkgewo+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKGt2bSwgbGFz
dF9mbHVzaF9nZm4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGFkZHIgPj4gUEFHRV9TSElGVCkgLSBsYXN0X2ZsdXNoX2dmbik7Cj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoID0gZmFsc2U7Cj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV91bmxv
Y2soJmt2bS0+bW11X2xvY2spOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbmRfcmVzY2hl
ZCgpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBrdm1fbW11X3RvcHVwX21l
bW9yeV9jYWNoZShwY2FjaGUsIGNvdW50KTsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmV0KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdm1fZXJyKCJGYWlsZWQg
dG8gdG91cCBzcGxpdCBwYWdlIGNhY2hlXG4iKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlX2xvY2soJmt2bS0+bW11X2xvY2spOwo+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZsdXNoOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPiAr
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKPiArICAg
ICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgaWYgKCFrdm0tPmFyY2gucGdkKQo+
ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVzaDsKPiArCj4gKyAgICAgICAgICAg
ICAgIGZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwg
YWRkciwgMCwgZmFsc2UpOwo+ICsKPiArICAgICAgICAgICAgICAgYWRkciArPSBQTURfU0laRTsK
PiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gZmx1c2g7Cj4gK30KPiArCj4gIHZvaWQg
a3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSwK
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3Zt
X21lbW9yeV9zbG90ICpzbG90LAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdmbl90IGdmbl9vZmZzZXQsCj4gQEAgLTE1MSw2ICsyMDcsMjUgQEAgdm9pZCBr
dm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID4+IFBBR0VfU0hJRlQpOwo+
ICB9Cj4KPiArc3RhdGljIHZvaWQgbW11X3NwbGl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAq
a3ZtLCBpbnQgc2xvdCkKPiArewo+ICsgICAgICAgc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMg
PSBrdm1fbWVtc2xvdHMoa3ZtKTsKPiArICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1l
bXNsb3QgPSBpZF90b19tZW1zbG90KHNsb3RzLCBzbG90KTsKPiArICAgICAgIHBoeXNfYWRkcl90
IHN0YXJ0ID0gbWVtc2xvdC0+YmFzZV9nZm4gPDwgUEFHRV9TSElGVDsKPiArICAgICAgIHBoeXNf
YWRkcl90IGVuZCA9IChtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlcykgPDwgUEFH
RV9TSElGVDsKPiArICAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTsKPiArICAgICAgIGJv
b2wgZmx1c2g7Cj4gKwo+ICsgICAgICAga3ZtX3Jpc2N2X2dzdGFnZV9pbml0KCZnc3RhZ2UsIGt2
bSk7Cj4gKwo+ICsgICAgICAgd3JpdGVfbG9jaygma3ZtLT5tbXVfbG9jayk7Cj4gKyAgICAgICBm
bHVzaCA9IG1tdV9zcGxpdF9odWdlX3BhZ2VzKCZnc3RhZ2UsIHN0YXJ0LCBlbmQpOwo+ICsgICAg
ICAgd3JpdGVfdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKPiArCj4gKyAgICAgICBpZiAoZmx1c2gp
Cj4gKyAgICAgICAgICAgICAgIGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVt
c2xvdCk7Cj4gK30KPiArCj4gIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3Ry
dWN0IGt2bSAqa3ZtLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2
bV9tZW1vcnlfc2xvdCAqb2xkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LAo+IEBAIC0xNjQsNiArMjM5LDcgQEAgdm9p
ZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCj4gICAgICAg
ICAgICAgICAgIGlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChr
dm0pKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKPiAgICAgICAgICAgICAgICAg
bW11X3dwX21lbW9yeV9yZWdpb24oa3ZtLCBuZXctPmlkKTsKPiArICAgICAgICAgICAgICAgbW11
X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctPmlkKTsKPiAgICAgICAgIH0KPiAgfQo+Cj4g
LS0KPiAyLjQzLjUKPgoKTWFrZSBzdXJlIHRoaXMgd29ya3Mgd2l0aCAxRyBodWdlcGFnZXMuCgpP
dGhlcndpc2UsIGl0IGxvb2tzIGdvb2QgdG8gbWUuCgpSZXZpZXdlZC1ieTogQW51cCBQYXRlbCA8
YW51cEBicmFpbmZhdWx0Lm9yZz4KClRoYW5rcywKQW51cAoKLS0gCmt2bS1yaXNjdiBtYWlsaW5n
IGxpc3QKa3ZtLXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh
ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rdm0tcmlzY3YK