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=