Re: [PATCH v4 35/48] KVM: arm64: gic-v5: Implement save/restore mechanisms for ISTs
Sascha Bischoff <[email protected]> Fri, 31 Jul 2026 16:43:43 +0000
| Newsgroups | dev.linux.lists.sashiko-reviews,dev.linux.lists.kvmarm,org.kernel.vger.kvm |
|---|---|
| Message-ID | <[email protected]> |
T24gRnJpLCAyMDI2LTA3LTI0IGF0IDEyOjAyICswMDAwLCBzYXNoaWtvLWJvdEBrZXJuZWwub3Jn IHdyb3RlOg0KPiBUaGFuayB5b3UgZm9yIHlvdXIgY29udHJpYnV0aW9uISBTYXNoaWtvIEFJIHJl dmlldyBmb3VuZCA4IHBvdGVudGlhbA0KPiBpc3N1ZShzKSB0byBjb25zaWRlcjoNCj4gLSBbQ3Jp dGljYWxdIFJldHJpZXZpbmcgYHZjcHUwYCB3aXRob3V0IHZlcmlmeWluZyBpdCBleGlzdHMgbGVh ZHMgdG8NCj4gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuDQo+IC0gW0NyaXRpY2FsXSBJbnZl cnRlZCBsb2NrIGNoZWNrIHdpdGggYGt2bV90cnlsb2NrX2FsbF92Y3B1c2AgbGVha3MNCj4gdkNQ VSBsb2NrcyBhbmQgcnVucyBsb2NrbGVzcy4NCj4gLSBbSGlnaF0gSW5jb21wbGV0ZSBjbGVhbnVw IG9uIElTVCByZXN0b3JlIGZhaWx1cmUgbGVhdmVzIGEgZGFuZ2xpbmcNCj4gcG9pbnRlciBpbiBg dm1pLT5oX2xwaV9pc3RgLCBsZWFkaW5nIHRvIGEgZG91YmxlIGZyZWUuDQo+IC0gW0hpZ2hdIE1p c3NpbmcgdmFsaWRhdGlvbiBvZiBMUEkgSU5USURzIGR1cmluZyBJU1QgcmVzdG9yZSBhbGxvd3MN Cj4gdXNlcnNwYWNlIHRvIGluamVjdCBpbnZhbGlkIElOVElEcy4NCj4gLSBbSGlnaF0gU1BJIElT VCByZXN0b3JlIGluY29ycmVjdGx5IHVzZXMgdGhlIGFycmF5IGluZGV4IGRpcmVjdGx5IGFzDQo+ IHRoZSBhYnNvbHV0ZSBJTlRJRCwgY2F1c2luZyB3cm9uZyBpbnRlcnJ1cHRzIHRvIGJlIGluamVj dGVkLg0KPiAtIFtIaWdoXSBRdWllc2NlbmNlIGNoZWNrIG1hc2tzIGxvc3QgcXVpZXNjZW5jZSBz dGF0ZSBhbmQgY2F1c2VzDQo+IHNpbGVudCBkYXRhIGNvcnJ1cHRpb24uDQo+IC0gW01lZGl1bV0g S1ZNX0RFVl9BUk1fVkdJQ19HUlBfSVNUIHVuY29uZGl0aW9uYWxseSBmYWlscyBmb3IgVk1zDQo+ IGNvbmZpZ3VyZWQgd2l0aCAwIFNQSXMsIGJyZWFraW5nIGxpdmUgbWlncmF0aW9uLg0KPiAtIFtN ZWRpdW1dIFRoZSBmYWlsdXJlIHBhdGggaW4gYHZnaWNfdjVfaXJzX3Jlc3RvcmVfaXN0c2AgaW5j b3JyZWN0bHkNCj4gaXNzdWVzIGEgcmVkdW5kYW50IGBWTVRFX01BS0VfSU5WQUxJRGAgY29tbWFu ZCwgcmlza2luZyBhIG1lbW9yeQ0KPiBsZWFrLg0KPiAtLQ0KPiANCj4gLS0tIFBhdGNoIFszNV06 IFtQQVRDSCB2NCAzNS80OF0gS1ZNOiBhcm02NDogZ2ljLXY1OiBJbXBsZW1lbnQNCj4gc2F2ZS9y ZXN0b3JlIG1lY2hhbmlzbXMgZm9yIElTVHMgLS0tDQo+IGNvbW1pdCA1YzQ3NDUzZjE4ODRjNzRk MTQ3ODAyOTAzOTE4OWVlNGJhNjg0MjFhDQo+IEF1dGhvcjogU2FzY2hhIEJpc2Nob2ZmIDxTYXNj aGEuQmlzY2hvZmZAYXJtLmNvbT4NCj4gU3ViamVjdDogS1ZNOiBhcm02NDogZ2ljLXY1OiBJbXBs ZW1lbnQgc2F2ZS9yZXN0b3JlIG1lY2hhbmlzbXMgZm9yDQo+IElTVHMNCj4gDQo+IFRoaXMgcGF0 Y2ggaW50cm9kdWNlcyBzYXZlIGFuZCByZXN0b3JlIG1lY2hhbmlzbXMgZm9yIEdJQ3Y1IEludGVy cnVwdA0KPiBTdGF0ZQ0KPiBUYWJsZXMgKElTVHMpLiBJdCBwcm92aWRlcyB1c2Vyc3BhY2UgbWln cmF0aW9uIHN0b3JhZ2UgZm9yIFNQSSBhbmQNCj4gTFBJDQo+IGJ1ZmZlcnMgdmlhIEtWTV9ERVZf QVJNX1ZHSUNfR1JQX0lTVCBhbmQgZW5zdXJlcyB0aGUgVk0gaXMgcXVpZXNjZWQNCj4gYW5kDQo+ IHZhbGlkYXRlZCBkdXJpbmcgb3BlcmF0aW9ucy4NCj4gDQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtNjQva3ZtL3ZnaWMvdmdpYy12NS10YWJsZXMuYw0KPiA+IGIvYXJjaC9hcm02NC9rdm0vdmdp Yy92Z2ljLXY1LXRhYmxlcy5jDQo+ID4gaW5kZXggNzE4NDEwZThjOWYzYi4uZjIyMDI2NzI2NmMy OSAxMDA2NDQNCj4gPiAtLS0gYS9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUtdGFibGVzLmMN Cj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUtdGFibGVzLmMNCj4gDQo+IFsg Li4uIF0NCj4gDQo+ID4gQEAgLTE2MzAsNiArMTYzMCwyOCBAQCBzdGF0aWMgaW50IHZnaWNfdjVf cmVzdG9yZV9saW5lYXJfaXN0KHN0cnVjdA0KPiA+IGt2bSAqa3ZtLA0KPiA+IMKgCQkJCcKgwqDC oMKgwqAgY29uc3Qgc3RydWN0DQo+ID4gdmdpY192NV9pc3RfZGVzYyAqaXN0LA0KPiA+IMKgCQkJ CcKgwqDCoMKgwqAgdTMyIF9fdXNlciAqdWFkZHIsIHNpemVfdA0KPiA+IG5yX2VudHJpZXMsDQo+ ID4gwqAJCQkJwqDCoMKgwqDCoCB1MzIgaW50aWRfdHlwZSkNCj4gPiDCoHsNCj4gPiDCoAlfX2xl MzIgaF9pc3RlOw0KPiA+IMKgCXNpemVfdCBpbmRleDsNCj4gPiDCoAlpbnQgcmV0Ow0KPiA+IMKg DQo+ID4gwqAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnJfZW50cmllczsgaW5kZXgrKykgew0K PiA+IMKgCQl2b2lkICpoX2lzdGVfYWRkciA9IGlzdC0+YmFzZSArIGluZGV4ICogaXN0LQ0KPiA+ ID5pc3RlX3NpemU7DQo+ID4gwqANCj4gPiDCoAkJcmV0ID0gZ2V0X3VzZXIoaF9pc3RlLCB1YWRk cik7DQo+ID4gwqAJCWlmIChyZXQpDQo+ID4gwqAJCQlyZXR1cm4gcmV0Ow0KPiA+IMKgDQo+ID4g wqAJCXJldCA9IHZnaWNfdjVfcmVzdG9yZV9pc3RfZW50cnkoa3ZtLCBpc3QsDQo+ID4gaF9pc3Rl X2FkZHIsDQo+ID4gwqAJCQkJCWhfaXN0ZSwgaW5kZXgsDQo+ID4gaW50aWRfdHlwZSk7DQo+IA0K PiBbU2V2ZXJpdHk6IEhpZ2hdDQo+IFNob3VsZCB0aGUgU1BJIGJhc2Ugb2Zmc2V0IGJlIGFkZGVk IHRvIHRoZSBpbmRleCBoZXJlPw0KDQpOby4gRGVmaW5pdGVseSBub3QuIFRoYXQncyBhIEdJQ3Yz IHRoaW5nLCBidXQgbm90IGEgR0lDdjUgdGhpbmcuDQoNCj4gDQo+IFdoZW4gcmVzdG9yaW5nIFNQ SXMsIHBhc3NpbmcgdGhlIHJhdyBhcnJheSBpbmRleCBhcyB0aGUgaW50aWQgd2lsbA0KPiB0cmFj ayBhbmQNCj4gaW5qZWN0IGludGVycnVwdHMgc3RhcnRpbmcgYXQgMC4gU2luY2UgaGFyZHdhcmUg U1BJcyBzdGFydCBhdCBJTlRJRA0KPiAzMiwgZG9lcw0KPiB0aGlzIGluY29ycmVjdGx5IGluamVj dCBTR0lzIGFuZCBQUElzIGluc3RlYWQgb2YgdGhlIGludGVuZGVkIFNQSXM/DQoNCkV4Y2VwdCB0 aGV5IGRvbid0IHdpdGggR0lDdjUuDQoNCj4gDQo+ID4gwqAJCWlmIChyZXQpDQo+ID4gwqAJCQly ZXR1cm4gcmV0Ow0KPiA+IMKgDQo+ID4gwqAJCXVhZGRyKys7DQo+ID4gwqAJfQ0KPiA+IMKgDQo+ ID4gwqAJcmV0dXJuIDA7DQo+ID4gwqB9DQo+IA0KPiBbIC4uLiBdDQo+IA0KPiA+IEBAIC0xNjYy LDYgKzE2ODQsNDEgQEAgc3RhdGljIGludA0KPiA+IHZnaWNfdjVfcmVzdG9yZV90d29fbGV2ZWxf aXN0KHN0cnVjdCBrdm0gKmt2bSwNCj4gPiDCoAkJCQkJIGNvbnN0IHN0cnVjdA0KPiA+IHZnaWNf djVfaXN0X2Rlc2MgKmlzdCwNCj4gPiDCoAkJCQkJIHUzMiBfX3VzZXIgKnVhZGRyLCB1MzINCj4g PiBpbnRpZF90eXBlKQ0KPiA+IMKgew0KPiANCj4gWyAuLi4gXQ0KPiANCj4gPiDCoAkJZm9yICho X2wyX2luZGV4ID0gMDsgaF9sMl9pbmRleCA8DQo+ID4gc2hhcGUubDJfZW50cmllczsgaF9sMl9p bmRleCsrKSB7DQo+ID4gwqAJCQl2b2lkICpoX2lzdGVfYWRkciA9IGhfbDJfaXN0X2Jhc2UgKw0K PiA+IMKgCQkJCQnCoMKgwqAgaF9sMl9pbmRleCAqIGlzdC0NCj4gPiA+aXN0ZV9zaXplOw0KPiA+ IMKgCQkJdTMyIGludGlkID0gaF9sMV9pbmRleCAqIHNoYXBlLmwyX2VudHJpZXMNCj4gPiArIGhf bDJfaW5kZXg7DQo+ID4gwqANCj4gPiDCoAkJCXJldCA9IGdldF91c2VyKGhfaXN0ZSwgdWFkZHIp Ow0KPiA+IMKgCQkJaWYgKHJldCkNCj4gPiDCoAkJCQlyZXR1cm4gcmV0Ow0KPiA+IMKgDQo+ID4g wqAJCQlyZXQgPSB2Z2ljX3Y1X3Jlc3RvcmVfaXN0X2VudHJ5KGt2bSwgaXN0LA0KPiA+IGhfaXN0 ZV9hZGRyLA0KPiA+IMKgCQkJCQkJCWhfaXN0ZSwNCj4gPiBpbnRpZCwNCj4gPiDCoAkJCQkJCQlp bnRpZF90eXBlDQo+ID4gKTsNCj4gDQo+IFtTZXZlcml0eTogSGlnaF0NCj4gSXMgdGhlcmUgYW55 IHZhbGlkYXRpb24gbWlzc2luZyBmb3IgdGhlIGdlbmVyYXRlZCBMUEkgSU5USURzPw0KDQpObz8g V2h5IHdvdWxkIHRoZXJlIGJlPyBPbmx5IExQSXMgaW4gdGhlIHRhYmxlIGFyZSB2YWxpZC4gTFBJ cyBvdXRzaWRlDQpvZiB0aGUgdGFibGUgYXJlIG5vdCB2YWxpZC4NCg0KPiANCj4gVGhlIGl0ZXJh dGlvbiBjYWxjdWxhdGVzIGludGlkIHN0YXJ0aW5nIGZyb20gMC4gSWYgdXNlcnNwYWNlIHNldHMN Cj4gcGVuZGluZw0KPiBiaXRzIGZvciB0aGVzZSBsb3dlciBpbmRpY2VzLCBLVk0gd291bGQgdHJh Y2sgdGhlbSBhbmQgaW5qZWN0IHRoZW0NCj4gdmlhIHRoZQ0KPiBWRFBFTkQgaW5zdHJ1Y3Rpb24g YXQgRUwyLg0KDQpZZXM/IEFuZD8NCg0KPiANCj4gU2luY2UgdmFsaWQgTFBJIElOVElEcyBtdXN0 IGJlID49IDgxOTIsIGNvdWxkIGluamVjdGluZyBsb3dlciBJRHMNCj4gcmVzdWx0IGluDQo+IGFy Y2hpdGVjdHVyYWxseSB1bnByZWRpY3RhYmxlIGhhcmR3YXJlIGJlaGF2aW9yPw0KDQpObywgdGhh dCdzIEdJQ3YzIGFnYWluIQ0KDQo+IA0KPiA+IMKgCQkJaWYgKHJldCkNCj4gPiDCoAkJCQlyZXR1 cm4gcmV0Ow0KPiA+IMKgDQo+ID4gwqAJCQl1YWRkcisrOw0KPiA+IMKgCQl9DQo+ID4gwqAJfQ0K PiA+IMKgDQo+ID4gwqAJcmV0dXJuIDA7DQo+ID4gwqB9DQo+IA0KPiA+IGRpZmYgLS1naXQgYS9h cmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYw0KPiA+IGIvYXJjaC9hcm02NC9rdm0vdmdpYy92 Z2ljLXY1LmMNCj4gPiBpbmRleCA2YWYxMjY0ZWQyMzcxLi4xNTNhOGZjZDRkYjdjIDEwMDY0NA0K PiA+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NS5jDQo+ID4gKysrIGIvYXJjaC9h cm02NC9rdm0vdmdpYy92Z2ljLXY1LmMNCj4gDQo+IFsgLi4uIF0NCj4gDQo+ID4gQEAgLTEzMDEs NiArMTMwMSwyOTIgQEAgdm9pZCB2Z2ljX3Y1X3NhdmVfc3RhdGUoc3RydWN0IGt2bV92Y3B1DQo+ ID4gKnZjcHUpDQo+ID4gwqAJX192Z2ljX3Y1X3NhdmVfcHBpX3N0YXRlKGNwdV9pZik7DQo+ID4g wqAJZHNiKHN5KTsNCj4gPiDCoH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmdpY192NV9pcnNf c3RhdHVzX2lzX3F1aWVzY2VkKHUzMiBzdGF0dXNyKQ0KPiA+ICt7DQo+ID4gKwlpZiAoc3RhdHVz ciAmIEdJQ1Y1X0lSU19TQVZFX1ZNX1NUQVRVU1JfUSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gLUVCVVNZOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZn aWNfdjVfaXJzX2lzX3F1aWVzY2VkKHUxNiB2bV9pZCkNCj4gPiArew0KPiA+ICsJdTMyIHN0YXR1 c3I7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHZnaWNfdjVfaXJzX3NhdmVf dm1fb3Aodm1faWQsIGZhbHNlLCAmc3RhdHVzcik7DQo+IA0KPiBbU2V2ZXJpdHk6IEhpZ2hdDQo+ IERvZXMgdGhpcyBxdWllc2NlbmNlIGNoZWNrIHBvdGVudGlhbGx5IGxvc2UgaGFyZHdhcmUgc3Rh dGU/DQo+IA0KPiBCeSBjYWxsaW5nIHZnaWNfdjVfaXJzX3NhdmVfdm1fb3AoKSB3aXRoIHNhdmU9 ZmFsc2UsIGl0IGlzc3VlcyBhDQo+IFNBVkVfVk1SDQo+IGNvbW1hbmQgd2l0aCBRPTEgYW5kIFM9 MCAoUXVpZXNjZSBidXQgZG9uJ3Qgc2F2ZSkuDQoNClRoYXQncyBub3Qgd2hhdCB0aGlzIGlzIGRv aW5nLiBUaGUgUSBiaXQgaXMgdG8gcXVlcnkgaWYgdGhlIFZNIGJlY29tZQ0Kbm9uLXF1aWVzY2Vu dC4gSXQgaXNuJ3Qgc3RvcHBpbmcgdGhlIHNhdmUuIFdlIGFyZSB0cmFja2luZyBpZiBpdCBoYXMN CmJlY29tZSBub24tcXVpZXNjZW50IHNpbmNlIHdlIHN0YXJ0ZWQgdGhlIHNhdmUgb3AgKHRoZSBs YXN0IHRpbWUgd2UNCndyb3RlIFM9MSkuDQoNCj4gDQo+IElmIHRoZSBWTSBoYWQgdW5leHBlY3Rl ZGx5IHVucXVpZXNjZWQgKGUuZy4sIGludGVycnVwdGVkIGJ5DQo+IGhhcmR3YXJlKSwNCj4gZm9y Y2luZyBpdCB0byBxdWllc2NlIHdpdGhvdXQgc2F2aW5nIHdvdWxkIGRlc3Ryb3kgaXRzIG1vZGlm aWVkDQo+IGludGVybmFsDQo+IHN0YXRlIGJlZm9yZSBpdCBjYW4gYmUgZXhwb3J0ZWQgdG8gdXNl cnNwYWNlLg0KDQpOb3BlLg0KDQo+IA0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArCXJldHVybiB2Z2ljX3Y1X2lyc19zdGF0dXNfaXNfcXVpZXNjZWQoc3Rh dHVzcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdmdpY192NV9jb3B5X2lzdF9h dHRyKHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIsDQo+ID4gKwkJCQkgc3RydWN0IGt2bV92 Z2ljX3Y1X2lzdCAqaXN0X2F0dHIpDQo+ID4gK3sNCj4gPiArCXZvaWQgX191c2VyICp1YWRkciA9 ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWF0dHItDQo+ID4gPmFkZHI7DQo+ID4gKw0K PiA+ICsJaWYgKCF1YWRkcikNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlp ZiAoY29weV9mcm9tX3VzZXIoaXN0X2F0dHIsIHVhZGRyLCBzaXplb2YoKmlzdF9hdHRyKSkpDQo+ ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgdmdpY192NV92YWxpZGF0ZV9pc3RfdXNlcl9idWZmZXIoX191 NjQgYWRkciwgX191NjQNCj4gPiBzaXplLA0KPiA+ICsJCQkJCcKgwqDCoCBzaXplX3QgZXhwZWN0 ZWQpDQo+ID4gK3sNCj4gPiArCWlmICghYWRkciB8fCBzaXplICE9IGV4cGVjdGVkKQ0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiANCj4gW1NldmVyaXR5OiBNZWRpdW1dDQo+IElzIHRoZXJlIGFu IGlzc3VlIGhlcmUgd2hlbiByZXN0b3JpbmcgYSBWTSBjb25maWd1cmVkIHdpdGggMCBTUElzPw0K DQpUaGF0J3Mgbm90IGRvYWJsZS4gV2UgaGF2ZSBhIG1pbmltdW0gb2YgMzIuDQoNCj4gDQo+IElm IHVzZXJzcGFjZSBwYXNzZXMgYSBzaXplIG9mIDAgYW5kIGFuIGFkZHJlc3Mgb2YgMCwgdGhlIGNo ZWNrIGlmDQo+ICghYWRkcikNCj4gd2lsbCByZWplY3QgaXQgd2l0aCAtRUlOVkFMLg0KPiANCj4g SWYgdXNlcnNwYWNlIHBhc3NlcyBhIGR1bW15IG5vbi16ZXJvIGFkZHJlc3MgdG8gYnlwYXNzIHRo aXMsIGl0IGZhaWxzDQo+IGxhdGVyDQo+IGluIHZnaWNfdjVfZ2V0X3NwaV9pc3RfZGVzYygpOg0K PiANCj4gYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LXRhYmxlcy5jOnZnaWNfdjVfZ2V0X3Nw aV9pc3RfZGVzYygpIHsNCj4gwqDCoMKgIC4uLg0KPiDCoMKgwqAgaWYgKCFpc3QtPmJhc2UgJiYg dXNlcnNwYWNlX2J1ZikNCj4gwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FTlQ7DQo+IMKgwqDC oCAuLi4NCj4gfQ0KPiANCj4gRG9lcyB0aGlzIGNhdGNoLTIyIHByZXZlbnQgbGl2ZSBtaWdyYXRp b24gZm9yIFZNcyB3aXRob3V0IFNQSXM/DQoNCk5vLCBiZWNhdXNlIHRoYXQncyBub3QgYSB0aGlu ZyB3ZSBzdXBwb3J0Lg0KDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+IA0K PiBbIC4uLiBdDQo+IA0KPiA+ICtpbnQgdmdpY192NV9pcnNfc2F2ZV9pc3RzKHN0cnVjdCBrdm0g Kmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cg0KPiA+ICphdHRyKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3Qga3ZtX3ZnaWNfdjVfaXN0IGlzdF9hdHRyOw0KPiA+ICsJdTE2IHZtX2lkID0gdmdpY192 NV92bV9pZChrdm0pOw0KPiA+ICsJdTMyIHN0YXR1c3I7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4g PiArDQo+ID4gKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOw0KPiA+ICsNCj4gPiArCWlmIChrdm1f dHJ5bG9ja19hbGxfdmNwdXMoa3ZtKSkgew0KPiA+ICsJCW11dGV4X3VubG9jaygma3ZtLT5sb2Nr KTsNCj4gPiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsJfQ0KPiANCj4gW1NldmVyaXR5OiBDcml0 aWNhbF0NCj4gSXMgdGhlIHJldHVybiB2YWx1ZSBvZiBrdm1fdHJ5bG9ja19hbGxfdmNwdXMoKSBo YW5kbGVkIGNvcnJlY3RseQ0KPiBoZXJlPw0KPiANCj4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1 ZSBvbiBzdWNjZXNzZnVsIGxvY2sgYWNxdWlzaXRpb24gYW5kIGZhbHNlIG9uDQo+IGZhaWx1cmUu DQoNCldoZXJlIG9uIGVhcnRoIGRpZCB5b3UgcHVsbCB0aGF0IGZyb20/IEl0IHJldHVybnMgMCBv biBzdWNjZXNzIGFuZCAtDQpFSU5UUiBvbiBmYWlsdXJlLg0KDQo+IFJldHVybmluZyAtRUJVU1kg d2hlbiBpdCBpcyB0cnVlIG1lYW5zIHdlIGxlYWsgdGhlIHZDUFUgbG9ja3MNCj4gYW5kIGhhbmcg dGhlIFZNLg0KPiANCj4gQ29udmVyc2VseSwgZmFpbGluZyB0byBhY3F1aXJlIHRoZSBsb2NrcyBs ZXRzIHVzIHByb2NlZWQgbG9ja2xlc3MsDQo+IGFuZCB0aGVuDQo+IHVubG9ja2luZyB1bm93bmVk IG11dGV4ZXMgaW4gdGhlIG91dF91bmxvY2sgcGF0aCB3b3VsZCBjYXVzZSBpc3N1ZXMuDQoNClRo aXMgaXNuJ3QgYW4gaXNzdWUuDQoNCj4gDQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygma3ZtLT5h cmNoLmNvbmZpZ19sb2NrKTsNCj4gDQo+IFsgLi4uIF0NCj4gDQo+ID4gK3N0YXRpYyB2b2lkIHZn aWNfdjVfcmVzdG9yZV9jbGVhbnVwKHN0cnVjdCBrdm0gKmt2bSwNCj4gPiArCQkJCcKgwqDCoCBz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsDQo+ID4gKwkJCQnCoMKgwqAgYm9vbCBscGlfaXN0X2FsbG9j YXRlZCkNCj4gPiArew0KPiA+ICsJLyoNCj4gPiArCSAqIFdlIGFyZSBvbiB0aGUgcmVzdG9yZSBm YWlsdXJlIHBhdGgsIHNvIHdlIGRvIGEgYmVzdC0NCj4gPiBlZmZvcnQNCj4gPiArCSAqIGNsZWFu dXAuIFRoZXNlIGNvbW1hbmRzIG1pZ2h0IGZhaWwsIGJ1dCBhdCB0aGlzIHN0YWdlDQo+ID4gdGhp cyBpcyB0aGUNCj4gPiArCSAqIGJlc3Qgd2UgY2FuIHJlYWxpc3RpY2FsbHkgZG8uDQo+ID4gKwkg Ki8NCj4gPiArCWlmIChscGlfaXN0X2FsbG9jYXRlZCkgew0KPiA+ICsJCWlmICghdmdpY192NV9z ZW5kX2NvbW1hbmQodmNwdSwNCj4gPiBWTVRFX01BS0VfSU5WQUxJRCkpDQo+ID4gKwkJCXZnaWNf djVfbHBpX2lzdF9mcmVlKGt2bSk7DQo+ID4gKwl9DQo+IA0KPiBbU2V2ZXJpdHk6IEhpZ2hdDQo+ IENvdWxkIHRoaXMgbGVhdmUgYSBkYW5nbGluZyBwb2ludGVyIGJlaGluZD8NCj4gDQo+IFdoZW4g dmdpY192NV9scGlfaXN0X2ZyZWUoKSBpcyBjYWxsZWQgb24gYSBmYWlsdXJlIHBhdGgsIGl0IGZy ZWVzIHRoZQ0KPiBtZW1vcnkNCj4gYnV0IGRvZXMgbm90IHNldCB2bWktPmhfbHBpX2lzdCB0byBO VUxMLiBJZiBhIHN1YnNlcXVlbnQgdGVhcmRvd24NCj4gaGFwcGVucyBpbg0KPiB2Z2ljX3Y1X3Zt dGVfcmVsZWFzZSgpLCBpdCBtaWdodCBvYnNlcnZlIHRoZSBwb3B1bGF0ZWQgcG9pbnRlciBhbmQN Cj4gYXR0ZW1wdA0KPiB0byBmcmVlIGl0IGFnYWluLCBjYXVzaW5nIGEgZG91YmxlLWZyZWUuDQoN Ck5vLiB2Z2ljX3Y1X2xwaV9pc3RfZnJlZSgpIHVsdGltYXRlbHkgY2FsbHMNCnZnaWNfdjVfZnJl ZV9hbGxvY2F0ZWRfbHBpX2lzdCgpLCB3aGljaCBjbGVhcnMgdm1pLT5oX2xwaV9pc3QgYWZ0ZXIN CmZyZWVpbmcgaXQgKGFuZCBjbGVhcnMgdGhlIEwyIHBvaW50ZXIgZm9yIHR3by1sZXZlbCBJU1Rz KS4NCkNvbnNlcXVlbnRseSwgYSBzdWJzZXF1ZW50IFZNVEUgdGVhcmRvd24gd2lsbCBub3QgYXR0 ZW1wdCBhIHNlY29uZA0KZnJlZS4NCg0KPiANCj4gW1NldmVyaXR5OiBNZWRpdW1dDQo+IEFyZSB3 ZSByaXNraW5nIGEgbWVtb3J5IGxlYWsgYnkgaXNzdWluZyBhIHJlZHVuZGFudCBpbnZhbGlkYXRl DQo+IGNvbW1hbmQ/DQo+IA0KPiBJZiB3ZSByZWFjaCB0aGUgZmFpbHVyZSBwYXRoIGZyb20gYSBw b2ludCB3aGVyZSB0aGUgVk1URSBpcyBhbHJlYWR5DQo+IGludmFsaWQsDQo+IHRoaXMgZnVuY3Rp b24gd2lsbCBpc3N1ZSBWTVRFX01BS0VfSU5WQUxJRCBhZ2FpbiBiZWNhdXNlIHRoZQ0KPiB2bXRl X2ludmFsaWQNCj4gc3RhdGUgaXMgbm90IHBhc3NlZCBpbi4gSWYgdGhlIGhhcmR3YXJlIGRyaXZl ciByZXR1cm5zIGFuIGVycm9yIHdoZW4NCj4gYXNrZWQNCj4gdG8gaW52YWxpZGF0ZSBhbiBhbHJl YWR5LWludmFsaWQgVk1URSwgdmdpY192NV9zZW5kX2NvbW1hbmQoKSB3aWxsDQo+IGZhaWwuDQoN ClRoZSBoYXJkd2FyZSBoYXMgbm8gd2F5IHRvIGluZGljYXRlIHRoaXMgZXJyb3IuIEl0IHdpbGwg anVzdCBiZSBhIE5PUC4NCg0KPiANCj4gVGhpcyB3b3VsZCBza2lwIHRoZSB2Z2ljX3Y1X2xwaV9p c3RfZnJlZSgpIGNhbGwgYW5kIHBlcm1hbmVudGx5IGxlYWsNCj4gdGhlIExQSQ0KPiBJU1QgbWVt b3J5Lg0KDQpFeGNlcHQgaXQgd291bGRuJ3QuIFRoaXMgaXMgZmluZS4NCg0KPiANCj4gPiArDQo+ ID4gKwl2Z2ljX3Y1X3NlbmRfY29tbWFuZCh2Y3B1LCBWTVRFX01BS0VfVkFMSUQpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtpbnQgdmdpY192NV9pcnNfcmVzdG9yZV9pc3RzKHN0cnVjdCBrdm0gKmt2 bSwgc3RydWN0DQo+ID4ga3ZtX2RldmljZV9hdHRyICphdHRyKQ0KPiA+ICt7DQo+ID4gKwlib29s IGxwaV9pc3RfYWxsb2NhdGVkID0gZmFsc2UsIHZtdGVfaW52YWxpZCA9IGZhbHNlOw0KPiA+ICsJ c3RydWN0IGt2bV92Y3B1ICp2Y3B1MCA9IGt2bV9nZXRfdmNwdShrdm0sIDApOw0KPiANCj4gW1Nl dmVyaXR5OiBDcml0aWNhbF0NCj4gV2hhdCBoYXBwZW5zIGlmIHVzZXJzcGFjZSBpbnZva2VzIHRo aXMgaW9jdGwgYmVmb3JlIGNyZWF0aW5nIGFueQ0KPiB2Q1BVcz8NCj4gDQo+IGt2bV9nZXRfdmNw dShrdm0sIDApIHdvdWxkIHJldHVybiBOVUxMLiBMYXRlciwgdGhpcyBOVUxMIHZjcHUwIGlzDQo+ IHBhc3NlZCB0bw0KPiB2Z2ljX3Y1X3NlbmRfY29tbWFuZCgpLCB3aGljaCBkZXJlZmVyZW5jZXMg aXQgaW5zaWRlDQo+IHZnaWNfdjVfdnBlX2RiKCkuDQo+IA0KPiBTaG91bGQgd2UgdmVyaWZ5IHZj cHUwIGV4aXN0cyBiZWZvcmUgdXNpbmcgaXQgdG8gcHJldmVudCBhIHBvdGVudGlhbA0KPiBOVUxM DQo+IHBvaW50ZXIgZGVyZWZlcmVuY2U/DQoNCldlIHJlamVjdCBhbiB1bmluaXRpYWxpc2VkIHZH SUMgYmVmb3JlIHdlIHJlYWNoIHRoaXMgcG9pbnQuIFdlIHJlcXVpcmUNCnZjcHUwIGFzIHBhcnQg b2YgaW5pdGlhbGlzaW5nIHRoZSB2R0lDdjUgc28gd2UgY2FuJ3QgbWFrZSBpdCB0aGlzIGZhcg0K d2l0aG91dCBhIHZDUFUwLg0KDQo+IA0KPiA+ICsJc3RydWN0IGt2bV92Z2ljX3Y1X2lzdCBpc3Rf YXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmt2bS0+ bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKGt2bV90cnlsb2NrX2FsbF92Y3B1cyhrdm0pKSB7DQo+ ID4gKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOw0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ ID4gKwl9DQo+IA0KPiBbU2V2ZXJpdHk6IENyaXRpY2FsXQ0KPiBBcyBub3RlZCBpbiB2Z2ljX3Y1 X2lyc19zYXZlX2lzdHMoKSwgZG9lcyB0aGlzIGNvcnJlY3RseSBoYW5kbGUgdGhlDQo+IGJvb2xl YW4NCj4gcmV0dXJuIHZhbHVlIG9mIGt2bV90cnlsb2NrX2FsbF92Y3B1cygpPyBJdCBsb29rcyBs aWtlIHRoaXMgYmVoYXZlcw0KPiBpbiB0aGUNCj4gZXhhY3Qgb3Bwb3NpdGUgd2F5IGFzIGludGVu ZGVkLCBsZWFraW5nIGxvY2tzIG9uIHN1Y2Nlc3MgYW5kIHJ1bm5pbmcNCj4gbG9ja2xlc3Mgb24g ZmFpbHVyZS4NCg0KVGhpcyBhZ2Fpbj8gTm8uIE5vdCBhbiBpc3N1ZS4gU2VlIGFib3ZlLg0KDQo+ IA0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmt2bS0+YXJjaC5jb25maWdfbG9jayk7DQo+ID4g Kw0KPiA+ICsJaWYgKCF2Z2ljX2luaXRpYWxpemVkKGt2bSkpIHsNCj4gDQo+IFsgLi4uIF0NCj4g DQoNClRoYW5rcywNClNhc2NoYQ0K