Re: [PATCH v4 20/48] KVM: arm64: gic-v5: Add GICv5 IRS IODEV and MMIO emulation

Sascha Bischoff <[email protected]> Mon, 3 Aug 2026 10:21:00 +0000
Newsgroups dev.linux.lists.sashiko-reviews,dev.linux.lists.kvmarm,org.kernel.vger.kvm
Message-ID <[email protected]>
T24gRnJpLCAyMDI2LTA3LTI0IGF0IDExOjQ1ICswMDAwLCBzYXNoaWtvLWJvdEBrZXJuZWwub3Jn
IHdyb3RlOg0KPiBUaGFuayB5b3UgZm9yIHlvdXIgY29udHJpYnV0aW9uISBTYXNoaWtvIEFJIHJl
dmlldyBmb3VuZCA5IHBvdGVudGlhbA0KPiBpc3N1ZShzKSB0byBjb25zaWRlcjoNCj4gLSBbSGln
aF0gVW5hbGxvY2F0ZWQgYHZnaWNfdjVfaXJzX2RhdGFgIGxlYWRzIHRvIGEgTlVMTCBwb2ludGVy
DQo+IGRlcmVmZXJlbmNlIG9uIGluaXRpYWxpemF0aW9uLg0KPiAtIFtIaWdoXSBCdW1waW5nIGBu
cl9zcGlzYCBsb2NhbGx5IGluIGBrdm1fdmdpY192NV9pcnNfaW5pdCgpYA0KPiB3aXRob3V0IHVw
ZGF0aW5nIGBrdm0tPmFyY2gudmdpYy5ucl9zcGlzYCBsZWFkcyB0byBpbmFjY2Vzc2libGUgU1BJ
cy4NCj4gLSBbSGlnaF0gTWlzc2luZyBSQ1UgcmVhZCBsb2NrIGFyb3VuZCBgeGFfbG9hZGAgaW4N
Cj4gYHZnaWNfdjVfdm10ZV92cGVfaWRfYml0cygpYC4NCj4gLSBbSGlnaF0gVW5jb25kaXRpb25h
bCBJUEkgc3Rvcm0gdHJpZ2dlcmVkIGJ5IGd1ZXN0IHdyaXRlcyB0bw0KPiBHSUNWNV9JUlNfQ1Iw
Lg0KPiAtIFtIaWdoXSA2NC1iaXQgSVJTIHJlZ2lzdGVycyBjYW5ub3QgYmUgYWNjZXNzZWQgdmlh
IDMyLWJpdCBVQVBJIG9yDQo+IGd1ZXN0IE1NSU8uDQo+IC0gW01lZGl1bV0gVW5yYXRlbGltaXRl
ZCBob3N0IGtlcm5lbCBsb2cgc3BhbSB2aWEgaW52YWxpZA0KPiBJUlNfSVNUX0NGR1IgYWxsb3dz
IGEgbWFsaWNpb3VzIGd1ZXN0IHRvIGZsb29kIHRoZSBob3N0IGxvZy4NCj4gLSBbTWVkaXVtXSBE
YXRhIHJhY2VzIGFuZCB0b3JuIHJlYWRzIG9uIHNoYXJlZCBWTS13aWRlIElSUyBNTUlPDQo+IHJl
Z2lzdGVycyAoYGlzdF9iYXNlcmAsIGBpc3RfY2ZncmAsIGBjcjFgLCBgcGVfc2Vsci5pYWZmaWRg
KS4NCj4gLSBbTWVkaXVtXSBVbmRlcmZsb3cgaW4gYElBRkZJRF9CSVRTYCBjYWxjdWxhdGlvbiBl
eHBvc2VzIGJvZ3VzIElEUjENCj4gdmFsdWVzIGJlZm9yZSBmaXJzdCB2Q1BVIHJ1bi4NCj4gLSBb
TWVkaXVtXSBJU1QgdmFsaWQgc3RhdGUgZGVzeW5jaHJvbml6ZXMgZnJvbSBoYXJkd2FyZSBvbiBm
cmVlDQo+IGZhaWx1cmUuDQo+IC0tDQo+IA0KPiAtLS0gUGF0Y2ggWzIwXTogW1BBVENIIHY0IDIw
LzQ4XSBLVk06IGFybTY0OiBnaWMtdjU6IEFkZCBHSUN2NSBJUlMNCj4gSU9ERVYgYW5kIE1NSU8g
ZW11bGF0aW9uIC0tLQ0KPiBjb21taXQgODljZDAxZTM1MzQwYWNiMDQ2YjZlZDFlZjlkNmMyODg4
MzMwODk0NQ0KPiBBdXRob3I6IFNhc2NoYSBCaXNjaG9mZiA8U2FzY2hhLkJpc2Nob2ZmQGFybS5j
b20+DQo+IA0KPiBLVk06IGFybTY0OiBnaWMtdjU6IEFkZCBHSUN2NSBJUlMgSU9ERVYgYW5kIE1N
SU8gZW11bGF0aW9uDQo+IA0KPiBUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGFuIElPREVWIGZvciB0
aGUgR0lDdjUgSVJTIGFuZCBhbiBhc3NvY2lhdGVkDQo+IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9u
IHRvIHNldCB1cCBTUElzIGFuZCBpbml0aWFsIHN0YXRlLiBUaGUgTU1JTw0KPiBlbXVsYXRpb24N
Cj4gdHJhY2tzIHNlbGVjdG9yIHN0YXRlIGFuZCBjb25maWd1cmVzIExQSSBJU1RzIG9uIGJlaGFs
ZiBvZiB0aGUgZ3Vlc3QuDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS92Z2lj
L3ZnaWMtaXJzLXY1LmMNCj4gPiBiL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnMtdjUuYw0K
PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZGE4OTE0
ZGQ2ODJmYw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS92Z2lj
L3ZnaWMtaXJzLXY1LmMNCj4gPiBAQCAtNjIsNCArNjIsNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9u
Zw0KPiA+IHZnaWNfdjVfbW1pb19yZWFkX2lyc19taXNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwN
Cj4gPiArCQkvKg0KPiA+ICsJCSAqIElSU19JRFIxIGVuY29kZXMgSUFGRklEX0JJVFMgYXMgTiAt
IDEuDQo+ID4gKwkJICovDQo+ID4gKwkJdnBlX2lkX2JpdHMgPSB2Z2ljX3Y1X3ZtdGVfdnBlX2lk
X2JpdHModmNwdSk7DQo+ID4gKwkJdmFsdWUgfD0gRklFTERfUFJFUChHSUNWNV9JUlNfSURSMV9J
QUZGSURfQklUUywNCj4gPiB2cGVfaWRfYml0cyAtIDEpOw0KPiANCj4gW1NldmVyaXR5OiBNZWRp
dW1dDQo+IElmIHVzZXJzcGFjZSByZWFkcyBHSUNWNV9JUlNfSURSMSBiZWZvcmUgdGhlIFZNIHJ1
bnMsDQo+IHZnaWNfdjVfdm10ZV92cGVfaWRfYml0cygpIHJldHVybnMgMCBiZWNhdXNlIHRoZSBW
TVRFIGlzIG5vdCB5ZXQNCj4gYWxsb2NhdGVkLg0KDQpVc2Vyc3BhY2UgY2Fubm90IGFjY2VzcyB0
aGVzZSByZWdpc3RlcnMgdW50aWwgdGhlIHZnaWMgaXMgaW5pdGlhbGlzZWQuDQpUaGVyZWZvcmUs
IHRoYXQgc3RhdGUgaXMgbm90IHJlYWNoYWJsZS4NCg0KPiANCj4gRG9lcyB2cGVfaWRfYml0cyAt
IDEgdW5kZXJmbG93IGhlcmUsIGV4cG9zaW5nIGFuIGluY29ycmVjdA0KPiBJQUZGSURfQklUUw0K
PiB2YWx1ZSBiZWZvcmUgaXQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQ/DQoNCkkgdGhpbmsgdGhh
dCB0aGlzIHdhcyBhbHJlYWR5IGRpc2N1c3NlZCBlbHNld2hlcmUsIGJ1dCB0aGlzIGlzIGFsc28g
bm90DQphbiBpc3N1ZS4gVGhlIFZQRV9JRF9CSVRTIGZpZWxkIGluIHRoZSBWTVRFIGRvZXNuJ3Qg
aGF2ZSB0aGF0IC0xIG9mZnNldA0KdGhhdCBvdGhlciBzdWNoIHJlZ2lzdGVycyBoYXZlLiBHaXZl
biB0aGF0IHdlIGNhbid0IHJlcHJlc2VudCBmZXdlcg0KdGhhbiBhIHNpbmdsZSBJRCBiaXQgZm9y
IElBRkZJRCwgd2UgaGF2ZSB0aGUgc2FtZSBsaW1pdCBpbiB0aGUgVlBFVA0KY29kZSAtIHdlIGFs
d2F5cyBoYXZlIGF0IGxlYXN0IDEgZm9yIFZQRV9JRF9CSVRTLiBIZW5jZSwgdGhpcyBkb2Vzbid0
DQp1bmRlcmZsb3cuDQoNCj4gDQo+IFsgLi4uIF0NCj4gPiBAQCAtMTc0LDQgKzE3NCw1IEBAIHN0
YXRpYyB2b2lkIHZnaWNfdjVfbW1pb193cml0ZV9pcnNfbWlzYyhzdHJ1Y3QNCj4gPiBrdm1fdmNw
dSAqdmNwdSwgZ3BhX3QgYWRkciwNCj4gPiArCWNhc2UgR0lDVjVfSVJTX0NSMDoNCj4gPiArCQlt
dXRleF9sb2NrKCZ2Y3B1LT5rdm0tPmFyY2guY29uZmlnX2xvY2spOw0KPiA+ICsJCVdSSVRFX09O
Q0UodmdpYy0+ZW5hYmxlZCwgISEodmFsICYNCj4gPiBHSUNWNV9JUlNfQ1IwX0lSU0VOKSk7DQo+
ID4gKwkJa3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdCh2Y3B1LT5rdm0sDQo+ID4gS1ZNX1JFUV9S
RUxPQURfR0lDdjUpOw0KPiANCj4gW1NldmVyaXR5OiBIaWdoXQ0KPiBEb2VzIHRoaXMgdW5jb25k
aXRpb25hbCBraWNrIGFsbG93IGEgZ3Vlc3QgdG8gb3ZlcmxvYWQgcGh5c2ljYWwgQ1BVcw0KPiB3
aXRoDQo+IElQSXM/IA0KPiANCj4gU2hvdWxkIHRoaXMgdmVyaWZ5IGlmIHRoZSBJUlNFTiBiaXQg
YWN0dWFsbHkgY2hhbmdlZCBiZWZvcmUgbWFraW5nDQo+IHRoZSBhbGwtY3B1cyByZXF1ZXN0Pw0K
DQpJJ3ZlIG1hZGUgdGhpcyBjb25kaXRpb25hbCBvbiBhbiBlZGdlLCBpLmUuLCBvbmx5IHdoZW4g
dGhlIHZhbHVlIG9mDQp2Z2ljLT5lbmFibGVkIGlzIGNoYW5nZWQuDQoNCj4gDQo+ID4gKwkJbXV0
ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmFyY2guY29uZmlnX2xvY2spOw0KPiA+ICsNCj4gPiArCQly
ZXR1cm47DQo+IFsgLi4uIF0NCj4gPiArCWNhc2UgR0lDVjVfSVJTX1BFX1NFTFI6DQo+ID4gKwkJ
aXJzLT5wZV9zZWxyLmlhZmZpZCA9DQo+ID4gRklFTERfR0VUKEdJQ1Y1X0lSU19QRV9TRUxSX0lB
RkZJRCwgdmFsKTsNCj4gDQo+IFtTZXZlcml0eTogTWVkaXVtXQ0KPiBBcmUgYXRvbWljIHByaW1p
dGl2ZXMgb3IgbG9ja3MgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgdGhpcyBWTS13aWRlDQo+IHN0
YXRlPw0KPiANCj4gSWYgbXVsdGlwbGUgdkNQVXMgY29uY3VycmVudGx5IHdyaXRlIGlycy0+cGVf
c2Vsci5pYWZmaWQgbG9ja2xlc3NseSwNCj4gY2FuIGl0DQo+IGxlYWQgdG8gdG9ybiB3cml0ZXMg
YW5kIGNvcnJ1cHRlZCBoYXJkd2FyZSBlbXVsYXRpb24gc3RhdGU/DQoNCk5vLCB0aGlzIHdvdWxk
IG5vdCBsZWFkIHRvIHRvcm4gd3JpdGVzLiBJIGhhdmUsIGhvd2V2ZXIsIG1vdmVkIHRoaXMgdG8N
CnVzZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgYXMgdGVjaG5pY2FsbHkgb25jZSB2Q1BVIGNv
dWxkIHdyaXRlIGl0DQp3aGlsZSBhbm90aGVyIGlzIHVzaW5nIGl0LiBBbHRob3VnaCB0aGlzIHdv
dWxkIGJlIHBvb3JseSB3cml0dGVuIGd1ZXN0DQpzb2Z0d2FyZSwgd2Ugd2FudCB0byBiZSBzdXJl
IHRvIHNuYXBzaG90IHRoZSB2YWx1ZSB0byBhdCBsZWFzdCBiZQ0KY29uc2lzdGVudCB3aXRoIG91
ciB1c2FnZSBvZiBpdC4NCg0KPiANCj4gPiArCQlyZXR1cm47DQo+IFsgLi4uIF0NCj4gPiBAQCAt
MzY3LDUgKzM2Nyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nDQo+ID4gdmdpY192NV9tbWlvX3Jl
YWRfaXJzX2lzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsDQo+ID4gKwljYXNlIEdJQ1Y1X0lSU19J
U1RfQkFTRVI6DQo+ID4gKwkJdmFsdWUgPSBGSUVMRF9QUkVQKEdJQ1Y1X0lSU19JU1RfQkFTRVJf
QUREUl9NQVNLLA0KPiA+ICsJCQkJwqDCoCBpcnMtPmlzdF9iYXNlci5hZGRyID4+DQo+ID4gR0lD
VjVfSVJTX0lTVF9CQVNFUl9BRERSX1NISUZUKTsNCj4gPiArCQlpZiAoaXJzLT5pc3RfYmFzZXIu
dmFsaWQpDQo+ID4gKwkJCXZhbHVlIHw9IEdJQ1Y1X0lSU19JU1RfQkFTRVJfVkFMSUQ7DQo+IA0K
PiBbU2V2ZXJpdHk6IE1lZGl1bV0NCj4gU2ltaWxhcmx5IHRvIHBlX3NlbHIsIGRvZXMgcmVhZGlu
ZyB0aGUgNjQtYml0IGlzdF9iYXNlciBsb2NrbGVzc2x5DQo+IHJpc2sNCj4gdG9ybiByZWFkcyBp
ZiBhbm90aGVyIHZDUFUgaXMgY29uY3VycmVudGx5IG1vZGlmeWluZyBpdD8NCg0KSSBkb24ndCB0
aGluayB0aGF0IHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4gVGhpcyB3b3VsZCBvbmx5IGhh
cHBlbg0Kd2l0aCBicm9rZW4gZ3Vlc3Qgc29mdHdhcmUuIFNvZnR3YXJlIHNob3VsZCBub3QgYmUg
cmFjaW5nIHRvIHJlYWQvd3JpdGUNCnRoZSBzYW1lIElSUyBNTUlPIHJlZ2lvbiBmcm9tIG11bHRp
cGxlIHZDUFVzLiBKdXN0IGFzIG9uIHJlYWwgaGFyZHdhcmUsDQp3ZSBzaG91bGRuJ3QgcHJvdmlk
ZSBhbnkgZ3VhcmFudGVlcyBhcyB0byB3aGF0IHRoZSBndWVzdCB3b3VsZCBzZWUNCmhlcmUuDQoN
CldlIGRvIG5lZWQgdG8gdXNlIHRoZSBhcmNoX2NvbmZpZyBsb2NrIG9uIGd1ZXN0IFdSSVRFUyB0
byB0aGUgSVJTX0lTVF8qDQpyZWdpc3RlcnMgYXMgd2UgYWxsb2NhdGUgb3IgZnJlZSB0aGUgTFBJ
IElTVCBpbiByZXNwb25zZSB0byB0aGlzLiBGb3INCnJlYWRzLCB0aGUgZ3Vlc3QganVzdCBnZXRz
IHdoYXRldmVyIHRoZSBtb3N0IHJlY2VudCBzdGF0ZSBpcyBhdCB0aGUNCnRpbWUgdGhlIHJlYWQg
YXJyaXZlcy4gSnVzdCBhcyBpdCB3b3VsZCBvbiByZWFsIGhhcmR3YXJlLg0KDQo+IA0KPiA+ICsJ
CWJyZWFrOw0KPiBbIC4uLiBdDQo+ID4gQEAgLTQxNCwzICs0MTQsNCBAQCBzdGF0aWMgdm9pZCB2
Z2ljX3Y1X21taW9fd3JpdGVfaXJzX2lzdChzdHJ1Y3QNCj4gPiBrdm1fdmNwdSAqdmNwdSwgZ3Bh
X3QgYWRkciwNCj4gPiArCXN3aXRjaCAob2Zmc2V0KSB7DQo+ID4gKwljYXNlIEdJQ1Y1X0lSU19J
U1RfQ0ZHUjoNCj4gDQo+IFtTZXZlcml0eTogSGlnaF0NCj4gVGhlIHN3aXRjaCBzdGF0ZW1lbnQg
Y2hlY2tzIHRoZSBiYXNlIG9mZnNldCwgYnV0IGxhY2tzIGhhbmRsaW5nIGZvcg0KPiB0aGUNCj4g
dXBwZXIgMzItYml0IG9mZnNldCAob2Zmc2V0ICsgNCkgZm9yIDY0LWJpdCByZWdpc3RlcnMgbGlr
ZQ0KPiBHSUNWNV9JUlNfSVNUX0JBU0VSLiANCj4gDQo+IFdpbGwgMzItYml0IGd1ZXN0IHdyaXRl
cyB0byB0aGUgdXBwZXIgaGFsZiBoaXQgdGhlIGRlZmF1bHQgY2FzZSBhbmQNCj4gYmUNCj4gaWdu
b3JlZD8NCg0KQXQgdGhpcyBzdGFnZSwgMzItYml0IGFjY2Vzc2VzIHRvIDY0LWJpdCByZWdpc3Rl
cnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEENCjMyLWJpdCB3cml0ZSBpcyByZWplY3RlZCBlYXJsaWVy
IGFuZCBkb2Vzbid0IG1ha2UgaXQgdGhpcyBmYXIuDQoNCkknbGwgbG9vayBpbnRvIGFkZHJlc3Np
bmcgdGhpcyBpbiB0aGUgZnV0dXJlLg0KDQo+IA0KPiA+ICsJCXNjb3BlZF9ndWFyZChtdXRleCwg
JnZjcHUtPmt2bS0+YXJjaC5jb25maWdfbG9jaykNCj4gPiB7DQo+ID4gKwkJCWlmIChpcnMtPmlz
dF9iYXNlci52YWxpZCkNCj4gWyAuLi4gXQ0KPiA+ICsJCS8qIFZhbGlkIC0+IEludmFsaWQgKi8N
Cj4gPiArCQlpZiAoaXJzLT5pc3RfYmFzZXIudmFsaWQgJiYgIXZhbGlkKSB7DQo+ID4gKwkJCS8q
IE1ha2UgdGhlIExQSSBJU1QgaW52YWxpZCBhbmQgdGhlbiAuLi4NCj4gPiAqLw0KPiA+ICsJCQlp
Zg0KPiA+IChpcnFfc2V0X3ZjcHVfYWZmaW5pdHkodmdpY192NV92cGVfZGIodmNwdSksICZjbWQp
KQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCQkvKg0KPiA+ICsJCQkgKiAuLi4gZnJl
ZSB0aGUgaG9zdCBJU1QgaWYgd2UNCj4gPiBzdWNjZXNzZnVsbHkgbWFya2VkIHRoZQ0KPiA+ICsJ
CQkgKiBJU1QgYXMgaW52YWxpZC4gRnJhbmtseSwgaWYgd2UgZmFpbGVkDQo+ID4gdG8gbWFrZSB0
aGUNCj4gPiArCQkJICogZ3Vlc3QncyBJU1QgYXMgaW52YWxpZCwgd2UncmUgY29va2VkDQo+ID4g
YmVjYXVzZSBpdCBtZWFucw0KPiA+ICsJCQkgKiB0aGF0IHRoZSBJUlMgbWF5IHN0aWxsIGJlIHVz
aW5nIHRoZQ0KPiA+IG1lbW9yeSB0aGF0IHdlDQo+ID4gKwkJCSAqIHdhbnQgdG8gZnJlZS4gSGVu
Y2UsIHdlIGxlYXZlIGl0DQo+ID4gYWxsb2NhdGVkIGFuZCBza2lwDQo+ID4gKwkJCSAqIHRoZSBj
bGVhcmluZyBvZiB2YWxpZCBiaXQgaW4gdGhlIGJhc2VyLg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJ
aWYgKHZnaWNfdjVfbHBpX2lzdF9mcmVlKHZjcHUtPmt2bSkpDQo+ID4gKwkJCQlicmVhazsNCj4g
DQo+IFtTZXZlcml0eTogTWVkaXVtXQ0KPiBJZiB2Z2ljX3Y1X2xwaV9pc3RfZnJlZSgpIGZhaWxz
IGFmdGVyIHN1Y2Nlc3NmdWxseSBpc3N1aW5nDQo+IExQSV9WSVNUX01BS0VfSU5WQUxJRCwgdGhl
IGNvZGUgYnJlYWtzIG91dCBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudA0KPiBlYXJseS4NCj4gDQo+
IERvZXMgdGhpcyBsZWF2ZSB0aGUgZ3Vlc3QtdmlzaWJsZSBpcnMtPmlzdF9iYXNlci52YWxpZCBi
aXQgb3V0IG9mDQo+IHN5bmMgd2l0aA0KPiB0aGUgYWN0dWFsIGhhcmR3YXJlIHN0YXRlPw0KDQpJ
J3ZlIGNoYW5nZWQgdGhpcyB0byB1cGRhdGUgdGhlIHZhbGlkIGJpdC4gVGhpcyB3YXMgYWxyZWFk
eSBiZWluZyBkb25lDQppbiBhIGxhdGVyIHNodWZmbGUgb2YgdGhpcyBjb2RlICh3aGVuIGFkZGlu
ZyBzdXBwb3J0IGZvciB1c2Vyc3BhY2UNCmFjY2Vzc2VzKSwgYnV0IGhhZG4ndCBiZWVuIGNvcnJl
Y3RseSAiYmFja3BvcnRlZCIgdG8gdGhpcyBwYXRjaC4NCg0KPiANCj4gPiArCQl9IGVsc2UgaWYg
KCFpcnMtPmlzdF9iYXNlci52YWxpZCAmJiB2YWxpZCkgeyAvKg0KPiA+IEludmFsaWQgLT4gVmFs
aWQgKi8NCj4gPiArCQkJaWYgKCF2Z2ljX3Y1X2lzdF9jZmdyX3ZhbGlkKGlycykpIHsNCj4gPiAr
CQkJCWt2bV9lcnIoIkd1ZXN0IHByb2dyYW1tZWQgaW52YWxpZA0KPiA+IElSU19JU1RfQ0ZHUlxu
Iik7DQo+IA0KPiBbU2V2ZXJpdHk6IE1lZGl1bV0NCj4gQ2FuIGEgbWFsaWNpb3VzIGd1ZXN0IGZs
b29kIHRoZSBob3N0IGtlcm5lbCBsb2cgYnkgcmVwZWF0ZWRseSB3cml0aW5nDQo+IGFuDQo+IGlu
dmFsaWQgY29uZmlndXJhdGlvbiB0byBHSUNWNV9JUlNfSVNUX0JBU0VSPyANCj4gDQo+IFNob3Vs
ZCB0aGlzIHVzZSBhIHJhdGVsaW1pdGVkIHByaW50ayB0byBwcmV2ZW50IGEgZGVuaWFsIG9mIHNl
cnZpY2U/DQoNCkkndmUgZHJvcHBlZCB0aGlzIHByaW50IGFsdG9nZXRoZXIuIEl0IHdhcyB1c2Vm
dWwgZm9yIGVhcmx5IGRlYnVnZ2luZywNCmJ1dCBub3cgaWYgdGhlIGd1ZXN0IGNob29zZXMgdG8g
ZG8gc29tZXRoaW5nIGl0IHNob3VsZG4ndCBkbywgdGhlbg0KdGhhdCdzIG9uIHRoZSBndWVzdC4N
Cg0KPiANCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+IFsgLi4uIF0NCj4gPiBAQCAtNDkw
LDQgKzQ5MCw1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmdpY19yZWdpc3Rlcl9yZWdpb24NCj4g
PiB2Z2ljX3Y1X2lyc19yZWdpc3RlcnNbXSA9IHsNCj4gPiArCVJFR0lTVEVSX0RFU0NfV0lUSF9M
RU5HVEgoR0lDVjVfSVJTX0lTVF9CQVNFUiwNCj4gPiB2Z2ljX3Y1X21taW9fcmVhZF9pcnNfaXN0
LA0KPiA+ICsJCQkJwqAgdmdpY192NV9tbWlvX3dyaXRlX2lyc19pc3QsIDgsDQo+ID4gKwkJCQnC
oCBWR0lDX0FDQ0VTU182NGJpdCksDQo+IA0KPiBbU2V2ZXJpdHk6IEhpZ2hdDQo+IFNpbmNlIEdJ
Q1Y1X0lSU19JU1RfQkFTRVIgaXMgZGVmaW5lZCBleGNsdXNpdmVseSB3aXRoDQo+IFZHSUNfQUND
RVNTXzY0Yml0LA0KPiBob3cgZG9lcyB0aGUgMzItYml0IEtWTSBVQVBJIGFjY2VzcyBpdCBkdXJp
bmcgVk0gc2F2ZSBhbmQgcmVzdG9yZT8gDQo+IA0KPiBXaWxsIHRob3NlIGFjY2Vzc2VzIGJlIHJl
amVjdGVkPw0KDQpZZXMsIHNlZSBteSBjb21tZW50IGFib3ZlLg0KDQo+IA0KPiA+ICsJUkVHSVNU
RVJfREVTQ19XSVRIX0xFTkdUSChHSUNWNV9JUlNfSVNUX0NGR1IsDQo+ID4gdmdpY192NV9tbWlv
X3JlYWRfaXJzX2lzdCwNCj4gWyAuLi4gXQ0KPiA+IEBAIC02MDMsMyArNjAzLDQgQEAgaW50IHZn
aWNfdjVfcmVnaXN0ZXJfaXJzX2lvZGV2KHN0cnVjdCBrdm0gKmt2bSwNCj4gPiBncGFfdCBpcnNf
YmFzZV9hZGRyZXNzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmlvX2Rl
dmljZSA9ICZrdm0tDQo+ID4gPmFyY2gudmdpYy52Z2ljX3Y1X2lyc19kYXRhLT5pb2RldjsNCj4g
DQo+IFtTZXZlcml0eTogSGlnaF0NCj4gSXMgdmdpY192NV9pcnNfZGF0YSBhbGxvY2F0ZWQgYW55
d2hlcmUgYmVmb3JlIGl0IGlzIGRlcmVmZXJlbmNlZA0KPiBoZXJlPw0KDQpOb3QgaW4gdGhpcyBj
b21taXQsIGJ1dCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgcmlnaHQgbm93Lg0KDQo+IA0KPiBT
aW5jZSBpdCBkb2Vzbid0IGFwcGVhciB0byBiZSBhbGxvY2F0ZWQgdmlhIGt6YWxsb2Mgb3Iga2Nh
bGxvYyBpbg0KPiB0aGlzDQo+IHBhdGNoLCBkb2VzIHRoaXMgbGVhZCB0byBhIE5VTEwgcG9pbnRl
ciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2VkPw0KDQpUaGlzIGNvZGUgaXMgbm90IHJlYWNoYWJs
ZSBpbiB0aGlzIGNvbW1pdC4NCg0KPiANCj4gVGhlIHNhbWUgZGVyZWZlcmVuY2UgYXBwZWFycyB0
byBvY2N1ciBpbiBrdm1fdmdpY192NV9pcnNfaW5pdCgpIGFzDQo+IHdlbGw6DQo+IA0KPiBrdm1f
dmdpY192NV9pcnNfaW5pdCgpIHsNCj4gCXN0cnVjdCB2Z2ljX3Y1X2lycyAqaXJzID0gZGlzdC0+
dmdpY192NV9pcnNfZGF0YTsNCj4gwqDCoMKgIC4uLg0KPiDCoMKgwqAgaXJzLT5pZHIwLmRvbWFp
biA9IEdJQ1Y1X0lSU19JRFIwX0lOVF9ET01fTk9OX1NFQ1VSRTsNCg0KVGhlIHN1YnNlcXVlbnQg
Y29tbWl0IGluIHRoaXMgc2VyaWVzIHBsdW1icyBpbiB0aGUgYWxsb2NhdGlvbiBhbmQNCmNhbGxp
bmcgb2YgSVJTIGluaXQuDQoNCj4gDQo+ID4gKwl1bnNpZ25lZCBpbnQgbGVuOw0KPiBbIC4uLiBd
DQo+ID4gQEAgLTY0Miw0ICs2NDIsNCBAQCBpbnQga3ZtX3ZnaWNfdjVfaXJzX2luaXQoc3RydWN0
IGt2bSAqa3ZtLA0KPiA+IHVuc2lnbmVkIGludCBucl9zcGlzKQ0KPiA+ICsJaWYgKG5yX3NwaXMg
JiYgbnJfc3BpcyA8IFZHSUNfVjVfREVGQVVMVF9OUl9TUElTKQ0KPiA+ICsJCW5yX3NwaXMgPSBW
R0lDX1Y1X0RFRkFVTFRfTlJfU1BJUzsNCj4gDQo+IFtTZXZlcml0eTogSGlnaF0NCj4gSWYgdGhl
IHJlcXVlc3RlZCBucl9zcGlzIGlzIGJ1bXBlZCBsb2NhbGx5IHRvIFZHSUNfVjVfREVGQVVMVF9O
Ul9TUElTDQo+IGhlcmUsDQo+IGhvdyBkb2VzIGNvcmUgS1ZNIGtub3cgYWJvdXQgdGhlIHVwZGF0
ZWQgY291bnQ/IA0KPiANCj4gQ291bGQgdGhpcyBwcmV2ZW50IHRoZSBndWVzdCBmcm9tIGFjY2Vz
c2luZyB0aGUgbmV3bHkgcGFkZGVkIFNQSXMNCj4gc2luY2UNCj4ga3ZtLT5hcmNoLnZnaWMubnJf
c3BpcyByZW1haW5zIHVuLWJ1bXBlZD8NCg0KV2Ugc3VwcG9ydCBhIG1pbmltdW0gb2YgMzIgU1BJ
cywgd2hpY2ggaXMgc2V0IGFzIHRoZSBkZWZhdWx0IGFzIHBhcnQgb2YNCnZnaWNfdjVfaW5pdCgp
IGlmIHVzZXJzcGFjZSBoYXMgbm90IHByb3ZpZGVkIHVzIHdpdGggc29tZXRoaW5nIGVsc2UuDQpU
aGUgdXNlcnNwYWNlIHBhdGggZmlsdGVycyBvdXQgYWxsIG5vbi1tdWx0aXBsZXMgb2YgMzIuDQoN
CkkndmUgYWN0dWFsbHkgZHJvcHBlZCB0aGlzIGFzIGl0IGlzIHJlZHVuZGFudC4NCg0KPiANCj4g
PiArDQo+ID4gKwlpZiAobnJfc3Bpcykgew0KPiANCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02
NC9rdm0vdmdpYy92Z2ljLXY1LXRhYmxlcy5jDQo+ID4gYi9hcmNoL2FybTY0L2t2bS92Z2ljL3Zn
aWMtdjUtdGFibGVzLmMNCj4gPiAtLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUtdGFi
bGVzLmMNCj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUtdGFibGVzLmMNCj4g
PiBAQCAtNjU2LDMgKzY1Niw0IEBAIHU4IHZnaWNfdjVfdm10ZV92cGVfaWRfYml0cyhzdHJ1Y3Qg
a3ZtX3ZjcHUNCj4gPiAqdmNwdSkNCj4gPiArDQo+ID4gKwl2bWkgPSB4YV9sb2FkKCZ2bV9pbmZv
LCB2bV9pZCk7DQo+IA0KPiBbU2V2ZXJpdHk6IEhpZ2hdDQo+IERvZXMgdGhpcyBYQXJyYXkgbG9v
a3VwIG5lZWQgUkNVIHByb3RlY3Rpb24/IA0KDQpOby4gVGhlIHZtX2luZm8gKHZtaSkgaXMgcG9w
dWxhdGlvbiBkdXJpbmcgdmdpY192NV9pbml0KCkuIFRoZQ0KdnBlX2lkX2JpdHMgZmllbGQgaXMg
bm90IHVwZGF0ZWQgYWZ0ZXIgdGhpcyBwb2ludCAodW50aWwgd2UgdGVhciBkb3duDQp0aGUgVk0g
YWdhaW4pLg0KDQo+IA0KPiBTaW5jZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBNTUlPIHJlYWQg
aGFuZGxlciB3aGljaCBydW5zIHVuZGVyIGt2bS0NCj4gPnNyY3UNCj4gYnV0IG5vdCByY3VfcmVh
ZF9sb2NrKCksIGNvdWxkIHRoaXMgdmlvbGF0ZSB0aGUgWEFycmF5IEFQSSBjb250cmFjdHMNCj4g
YW5kDQo+IGNhdXNlIGEgdXNlLWFmdGVyLWZyZWU/DQoNCk5vLiBXZSdyZSBub3QgZG9pbmcgYW55
dGhpbmcgbGlrZSB4YV9lcmFzZSgpLg0KDQo+IA0KPiA+ICsJaWYgKCF2bWkpDQo+ID4gKwkJcmV0
dXJuIDA7DQo+IA0KVGhhbmtzLA0KU2FzY2hhDQo=