From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC PATCH 22/49] ARM: new VGIC: Implement virtual IRQ injection Date: Tue, 27 Feb 2018 10:17:23 +0000 Message-ID: References: <20180209143937.28866-1-andre.przywara@linaro.org> <20180209143937.28866-23-andre.przywara@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eqcKE-0003Jn-6r for xen-devel@lists.xenproject.org; Tue, 27 Feb 2018 10:17:34 +0000 Received: by mail-wm0-x22a.google.com with SMTP id a20so20938442wmd.1 for ; Tue, 27 Feb 2018 02:17:30 -0800 (PST) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall , Stefano Stabellini , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAxMi8wMi8xOCAxODo1OSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpIEFuZHJlLAo+ IAo+IE9uIDA5LzAyLzE4IDE0OjM5LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPj4gUHJvdmlkZSBh IHZnaWNfcXVldWVfaXJxX3VubG9jaygpIGZ1bmN0aW9uIHdoaWNoIGRlY2lkZXMgd2hldGhlciBh Cj4+IGdpdmVuIElSUSBuZWVkcyB0byBiZSBxdWV1ZWQgdG8gYSBWQ1BVJ3MgYXBfbGlzdC4KPj4g VGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGFuIElSUSBiZWNvbWVzIHBlbmRpbmcgb3Ig ZW5hYmxlZCwKPj4gZWl0aGVyIGFzIGEgcmVzdWx0IG9mIGEgaGFyZHdhcmUgSVJRIGluamVjdGlv biwgZnJvbSBkZXZpY2VzIGVtdWxhdGVkIGJ5Cj4+IFhlbiAobGlrZSB0aGUgYXJjaGl0ZWN0ZWQg dGltZXIpIG9yIGZyb20gTU1JTyBhY2Nlc3NlcyB0byB0aGUgZGlzdHJpYnV0b3IKPj4gZW11bGF0 aW9uLgo+PiBBbHNvIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIGFsbG93IHRv IGluamVjdCBhbiBJUlEgdG8gYQo+PiBndWVzdC4KPj4gU2luY2UgdGhpcyBpcyB0aGUgZmlyc3Qg Y29kZSB0aGF0IHN0YXJ0cyB1c2luZyBvdXIgbG9ja2luZyBtZWNoYW5pc20sCj4+IHdlIGFkZCBz b21lIChob3BlZnVsbHkpIGNsZWFyIGRvY3VtZW50YXRpb24gb2Ygb3VyIGxvY2tpbmcgc3RyYXRl Z3kgYW5kCj4+IHJlcXVpcmVtZW50cyBhbG9uZyB3aXRoIHRoaXMgcGF0Y2guCj4+Cj4+IFRoaXMg aXMgYmFzZWQgb24gTGludXggY29tbWl0IDgxZWViOTVkZGJhYiwgd3JpdHRlbiBieSBDaHJpc3Rv ZmZlciBEYWxsLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6 eXdhcmFAbGluYXJvLm9yZz4KPj4gLS0tCj4+IMKgIHhlbi9hcmNoL2FybS92Z2ljL3ZnaWMuYyB8 IDIyNAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ PiDCoCB4ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmggfMKgIDEwICsrKwo+PiDCoCAyIGZpbGVzIGNo YW5nZWQsIDIzNCBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0v dmdpYy92Z2ljLmMgYi94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmMKPj4gaW5kZXggMzA3NTA5MWNh YS4uZjUxN2RmNmQwMCAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy5jCj4+ ICsrKyBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMuYwo+PiBAQCAtMjEsNiArMjEsMzIgQEAKPj4g wqAgI2luY2x1ZGUgPGFzbS9hcm1fdmdpYy5oPgo+PiDCoCAjaW5jbHVkZSAidmdpYy5oIgo+PiDC oCArLyoKPj4gKyAqIExvY2tpbmcgb3JkZXIgaXMgYWx3YXlzOgo+PiArICoga3ZtLT5sb2NrICht dXRleCkKPiAKPiBZb3UgcHJvYmFibHkgd2FudCB0byB1cGRhdGUgdGhlIGxvY2tpbmcgb3JkZXIg dG8gbWF0Y2ggWGVuIG9uZS4gSW4gdGhhdAo+IGNhc2UsIEkgYW0gbm90IHN1cmUgaWYgd2UgbmVl ZCB0byB0YWtlIHRoZSBkb21haW4gbG9jayBpbiB0aGUgY29kZT8KPiAKPiAKPj4gKyAqwqDCoCBp dHMtPmNtZF9sb2NrIChtdXRleCkKPj4gKyAqwqDCoMKgwqAgaXRzLT5pdHNfbG9jayAobXV0ZXgp Cj4gCj4+ICsgKsKgwqDCoMKgwqDCoCB2Z2ljX2NwdS0+YXBfbGlzdF9sb2NrCj4+ICsgKsKgwqDC oMKgwqDCoMKgwqAga3ZtLT5scGlfbGlzdF9sb2NrCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg IHZnaWNfaXJxLT5pcnFfbG9jawo+PiArICoKPj4gKyAqIElmIHlvdSBuZWVkIHRvIHRha2UgbXVs dGlwbGUgbG9ja3MsIGFsd2F5cyB0YWtlIHRoZSB1cHBlciBsb2NrIGZpcnN0LAo+PiArICogdGhl biB0aGUgbG93ZXIgb25lcywgZS5nLiBmaXJzdCB0YWtlIHRoZSBpdHNfbG9jaywgdGhlbiB0aGUg aXJxX2xvY2suCj4+ICsgKiBJZiB5b3UgYXJlIGFscmVhZHkgaG9sZGluZyBhIGxvY2sgYW5kIG5l ZWQgdG8gdGFrZSBhIGhpZ2hlciBvbmUsIHlvdQo+PiArICogaGF2ZSB0byBkcm9wIHRoZSBsb3dl ciByYW5raW5nIGxvY2sgZmlyc3QgYW5kIHJlLWFxdWlyZSBpdCBhZnRlcgo+PiBoYXZpbmcKPiAK PiBzL3JlLWFxdWl0ZS9hY3F1aXJlLwo+IAo+PiArICogdGFrZW4gdGhlIHVwcGVyIG9uZS4KPj4g KyAqCj4+ICsgKiBXaGVuIHRha2luZyBtb3JlIHRoYW4gb25lIGFwX2xpc3RfbG9jayBhdCB0aGUg c2FtZSB0aW1lLCBhbHdheXMKPj4gdGFrZSB0aGUKPj4gKyAqIGxvd2VzdCBudW1iZXJlZCBWQ1BV J3MgYXBfbGlzdF9sb2NrIGZpcnN0LCBzbzoKPj4gKyAqwqDCoCB2Y3B1WC0+dmNwdV9pZCA8IHZj cHVZLT52Y3B1X2lkOgo+PiArICrCoMKgwqDCoCBzcGluX2xvY2sodmNwdVgtPmFyY2gudmdpY19j cHUuYXBfbGlzdF9sb2NrKTsKPj4gKyAqwqDCoMKgwqAgc3Bpbl9sb2NrKHZjcHVZLT5hcmNoLnZn aWNfY3B1LmFwX2xpc3RfbG9jayk7Cj4+ICsgKgo+PiArICogU2luY2UgdGhlIFZHSUMgbXVzdCBz dXBwb3J0IGluamVjdGluZyB2aXJ0dWFsIGludGVycnVwdHMgZnJvbQo+PiBJU1JzLCB3ZSBoYXZl Cj4+ICsgKiB0byB1c2UgdGhlIHNwaW5fbG9ja19pcnFzYXZlL3NwaW5fdW5sb2NrX2lycXJlc3Rv cmUgdmVyc2lvbnMgb2Ygb3V0ZXIKPj4gKyAqIHNwaW5sb2NrcyBmb3IgYW55IGxvY2sgdGhhdCBt YXkgYmUgdGFrZW4gd2hpbGUgaW5qZWN0aW5nIGFuCj4+IGludGVycnVwdC4KPiAKPiBJdCBpcyBx dWl0ZSBuaWNlIHRvIHNlZSB0aGUgbG9ja2luZyBleHBsYWluZWQgaW4gdGhlIGZpbGUgYW5kIGlu IGdlbmVyYWwKPiBhIGxvdCBvZiBleHBsYW5hdGlvbiB3aXRoaW4gdGhlIGNvZGUgOikuCj4gCj4+ ICsgKi8KPj4gKwo+PiDCoCAvKgo+PiDCoMKgICogSXRlcmF0ZSBvdmVyIHRoZSBWTSdzIGxpc3Qg b2YgbWFwcGVkIExQSXMgdG8gZmluZCB0aGUgb25lIHdpdGggYQo+PiDCoMKgICogbWF0Y2hpbmcg aW50ZXJydXB0IElEIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIElSUSBzdHJ1Y3R1cmUu Cj4+IEBAIC05Nyw2ICsxMjMsMjA0IEBAIHZvaWQgdmdpY19wdXRfaXJxKHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdAo+PiB2Z2ljX2lycSAqaXJxKQo+PiDCoMKgwqDCoMKgIHhmcmVlKGlycSk7Cj4+ IMKgIH0KPj4gwqAgKy8qKgo+PiArICogdmdpY190YXJnZXRfb3JhY2xlIC0gY29tcHV0ZSB0aGUg dGFyZ2V0IHZjcHUgZm9yIGFuIGlycQo+PiArICoKPj4gKyAqIEBpcnE6wqDCoMKgIFRoZSBpcnEg dG8gcm91dGUuIE11c3QgYmUgYWxyZWFkeSBsb2NrZWQuCj4+ICsgKgo+PiArICogQmFzZWQgb24g dGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGludGVycnVwdCAoZW5hYmxlZCwgcGVuZGluZywKPj4g KyAqIGFjdGl2ZSwgdmNwdSBhbmQgdGFyZ2V0X3ZjcHUpLCBjb21wdXRlIHRoZSBuZXh0IHZjcHUg dGhpcyBzaG91bGQgYmUKPj4gKyAqIGdpdmVuIHRvLiBSZXR1cm4gTlVMTCBpZiB0aGlzIHNob3Vs ZG4ndCBiZSBpbmplY3RlZCBhdCBhbGwuCj4+ICsgKgo+PiArICogUmVxdWlyZXMgdGhlIElSUSBs b2NrIHRvIGJlIGhlbGQuCj4+ICsgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgdmNwdSAqdmdpY190YXJn ZXRfb3JhY2xlKHN0cnVjdCB2Z2ljX2lycSAqaXJxKQo+PiArewo+PiArwqDCoMKgIEFTU0VSVChz cGluX2lzX2xvY2tlZCgmaXJxLT5pcnFfbG9jaykpOwo+PiArCj4+ICvCoMKgwqAgLyogSWYgdGhl IGludGVycnVwdCBpcyBhY3RpdmUsIGl0IG11c3Qgc3RheSBvbiB0aGUgY3VycmVudCB2Y3B1ICov Cj4+ICvCoMKgwqAgaWYgKCBpcnEtPmFjdGl2ZSApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g aXJxLT52Y3B1ID8gOiBpcnEtPnRhcmdldF92Y3B1Owo+IEkgYW0gbm90IHN1cmUgdG8gdW5kZXJz dGFuZCB3aHkgeW91IGNoZWNrIHdoZXRoZXIgaXJxLT52Y3B1IGlzIE5VTEwuIElmCj4gdGhlIGlu dGVycnVwdCBpcyBhY3RpdmUsIHRoZW4gaXJxLT52Y3B1IHNob3VsZCBiZSBOVUxMLiBEaWQgSSBt aXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgICAgICAgICAg IHlvdSBtZWFuPwo+IGFueXRoaW5nPwoKTm90IGlmIGl0IGhhcyBiZWVuIGV4cGxpY2l0bHkgYWN0 aXZhdGVkIHZpYSBJU0FDVElWRVIuIFRoaXMgaXMgbm90CmltcGxlbWVudGVkIGluIFhlbiBhdCB0 aGUgbW9tZW50LCBidXQgd291bGQgYmUgaW4gdGhlIGZ1dHVyZS4gU28gSSBsaWtlCnRvIGtlZXAg dGhpcyBpbi4KCj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBJZiB0aGUgSVJRIGlz IG5vdCBhY3RpdmUgYnV0IGVuYWJsZWQgYW5kIHBlbmRpbmcsIHdlIHNob3VsZAo+PiBkaXJlY3QK Pj4gK8KgwqDCoMKgICogaXQgdG8gaXRzIGNvbmZpZ3VyZWQgdGFyZ2V0IFZDUFUuCj4+ICvCoMKg wqDCoCAqIElmIHRoZSBkaXN0cmlidXRvciBpcyBkaXNhYmxlZCwgcGVuZGluZyBpbnRlcnJ1cHRz IHNob3VsZG4ndCBiZQo+PiArwqDCoMKgwqAgKiBmb3J3YXJkZWQuCj4+ICvCoMKgwqDCoCAqLwo+ PiArwqDCoMKgIGlmICggaXJxLT5lbmFibGVkICYmIGlycV9pc19wZW5kaW5nKGlycSkgKQo+PiAr wqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICggdW5saWtlbHkoaXJxLT50YXJnZXRfdmNw dSAmJgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIWlycS0+dGFyZ2V0X3Zj cHUtPmRvbWFpbi0+YXJjaC52Z2ljLmVuYWJsZWQpICkKPiAKPiBUaGUgaW5kZW50YXRpb24gbG9v a3Mgd3JvbmcgaGVyZS4KPiAKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBpcnEtPnRhcmdldF92Y3B1Owo+PiArwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgIC8qIElmIG5laXRoZXIgYWN0aXZlIG5vciBwZW5kaW5nIGFu ZCBlbmFibGVkLCB0aGVuIHRoaXMgSVJRCj4+IHNob3VsZCBub3QKPiAKPiBDb21tZW50IHN0eWxl Ogo+IAo+IC8qCj4gwqAqIC4uLgo+IAo+PiArwqDCoMKgwqAgKiBiZSBxdWV1ZWQgdG8gYW55IFZD UFUuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIHJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ ICsvKgo+PiArICogT25seSB2YWxpZCBpbmplY3Rpb24gaWYgY2hhbmdpbmcgbGV2ZWwgZm9yIGxl dmVsLXRyaWdnZXJlZCBJUlFzIG9yCj4+IGZvciBhCj4+ICsgKiByaXNpbmcgZWRnZS4KPj4gKyAq Lwo+PiArc3RhdGljIGJvb2wgdmdpY192YWxpZGF0ZV9pbmplY3Rpb24oc3RydWN0IHZnaWNfaXJx ICppcnEsIGJvb2wgbGV2ZWwpCj4+ICt7Cj4+ICvCoMKgwqAgc3dpdGNoIChpcnEtPmNvbmZpZykK PiAKPiBzd2l0Y2ggKCAuLi4gKQo+IAo+PiArwqDCoMKgIHsKPj4gK8KgwqDCoCBjYXNlIFZHSUNf Q09ORklHX0xFVkVMOgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGlycS0+bGluZV9sZXZlbCAh PSBsZXZlbDsKPj4gK8KgwqDCoCBjYXNlIFZHSUNfQ09ORklHX0VER0U6Cj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gbGV2ZWw7Cj4+ICvCoMKgwqAgfQo+PiArCj4gCj4gSSB3b3VsZCBhZGQgYW4g QVNTRVJUX1VOUkVBQ0hBQkxFKCkuCj4gCj4+ICvCoMKgwqAgcmV0dXJuIGZhbHNlOwo+PiArfQo+ PiArCj4+ICsvKgo+PiArICogQ2hlY2sgd2hldGhlciBhbiBJUlEgbmVlZHMgdG8gKGFuZCBjYW4p IGJlIHF1ZXVlZCB0byBhIFZDUFUncyBhcAo+PiBsaXN0Lgo+PiArICogRG8gdGhlIHF1ZXVpbmcg aWYgbmVjZXNzYXJ5LCB0YWtpbmcgdGhlIHJpZ2h0IGxvY2tzIGluIHRoZSByaWdodAo+PiBvcmRl ci4KPj4gKyAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBJUlEgd2FzIHF1ZXVlZCwgZmFsc2Ugb3Ro ZXJ3aXNlLgo+PiArICoKPj4gKyAqIE5lZWRzIHRvIGJlIGVudGVyZWQgd2l0aCB0aGUgSVJRIGxv Y2sgYWxyZWFkeSBoZWxkLCBidXQgd2lsbCByZXR1cm4KPj4gKyAqIHdpdGggYWxsIGxvY2tzIGRy b3BwZWQuCj4+ICsgKi8KPj4gK2Jvb2wgdmdpY19xdWV1ZV9pcnFfdW5sb2NrKHN0cnVjdCBkb21h aW4gKmQsIHN0cnVjdCB2Z2ljX2lycSAqaXJxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+IAo+IEluZGVudGF0aW9uLiBBbHNvIHNhbWUgcmVt YXJrIGFzIGZyb20gdmdpY19pbmplY3RfaXJxLiBOby1vbmUgc2VlbXMgdG8KPiBjYXJlIGFib3V0 IHRoZSByZXR1cm4gKGV2ZW4gaW4gS1ZNIDopKS4KPiAKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg dmNwdSAqdmNwdTsKPj4gK8KgwqDCoCBib29sIHJ1bm5pbmc7Cj4+ICsKPj4gK8KgwqDCoCBBU1NF UlQoc3Bpbl9pc19sb2NrZWQoJmlycS0+aXJxX2xvY2spKTsKPj4gKwo+PiArcmV0cnk6Cj4+ICvC oMKgwqAgdmNwdSA9IHZnaWNfdGFyZ2V0X29yYWNsZShpcnEpOwo+PiArwqDCoMKgIGlmICggaXJx LT52Y3B1IHx8ICF2Y3B1ICkKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIElmIHRoaXMgSVJRIGlzIGFscmVhZHkgb24gYSBWQ1BVJ3MgYXBf bGlzdCwgdGhlbiBpdAo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGNhbm5vdCBiZSBtb3ZlZCBvciBt b2RpZmllZCBhbmQgdGhlcmUgaXMgbm8gbW9yZSB3b3JrIGZvcgo+PiArwqDCoMKgwqDCoMKgwqDC oCAqIHVzIHRvIGRvLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoMKgwqDCoMKg ICogT3RoZXJ3aXNlLCBpZiB0aGUgaXJxIGlzIG5vdCBwZW5kaW5nIGFuZCBlbmFibGVkLCBpdCBk b2VzCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogbm90IG5lZWQgdG8gYmUgaW5zZXJ0ZWQgaW50byBh biBhcF9saXN0IGFuZCB0aGVyZSBpcyBhbHNvCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogbm8gbW9y ZSB3b3JrIGZvciB1cyB0byBkby4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKg wqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycS0+aXJxX2xvY2ssIGZsYWdzKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBXZSBoYXZlIHRv IGtpY2sgdGhlIFZDUFUgaGVyZSwgYmVjYXVzZSB3ZSBjb3VsZCBiZQo+PiArwqDCoMKgwqDCoMKg wqDCoCAqIHF1ZXVlaW5nIGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBmb3Igd2hpY2ggd2UK Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBnZXQgbm8gRU9JIG1haW50ZW5hbmNlIGludGVycnVwdC4g SW4gdGhhdCBjYXNlLAo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHdoaWxlIHRoZSBJUlEgaXMgYWxy ZWFkeSBvbiB0aGUgVkNQVSdzIEFQIGxpc3QsIHRoZQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFZD UFUgY291bGQgaGF2ZSBFT0knZWQgdGhlIG9yaWdpbmFsIGludGVycnVwdCBhbmQKPj4gK8KgwqDC oMKgwqDCoMKgwqAgKiB3b24ndCBzZWUgdGhpcyBvbmUgdW50aWwgaXQgZXhpdHMgZm9yIHNvbWUg b3RoZXIKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiByZWFzb24uCj4+ICvCoMKgwqDCoMKgwqDCoMKg ICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIHZjcHUgKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB2Y3B1X3VuYmxvY2sodmNwdSk7Cj4gCj4gdmNwdV91bmJsb2NrIHdpbGwgb25seSAidW5i bG9jayIgYSB2Q1BVIHRoYXQgaXMgYmxvY2tlZC4gSXQgd29uJ3Qgbm90aWZ5Cj4gYSBydW5uaW5n IHZDUFUuIFNvIHlvdSB3YW50IHRvIGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG86Cj4gCj4gdmNw dV91bmJsb2NrKHZjcHUpOwo+IGlmICggcnVubmluZyAmJiB2Y3B1ICE9IGN1cnJlbnQgKQo+IMKg IHNtcF9zZW5kX2V2ZW50X2NoZWNrX21hc2soLi4uKTsKPiAKPiBJdCBpcyBwcm9iYWJseSB3b3J0 aCB0byBpbnRyb2R1Y2UgYW4gaGVscGVyIGZvciB0aGF0Lgo+IAo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGZhbHNlOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDC oCAqIFdlIG11c3QgdW5sb2NrIHRoZSBpcnEgbG9jayB0byB0YWtlIHRoZSBhcF9saXN0X2xvY2sg d2hlcmUKPj4gK8KgwqDCoMKgICogd2UgYXJlIGdvaW5nIHRvIGluc2VydCB0aGlzIG5ldyBwZW5k aW5nIGludGVycnVwdC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmaXJxLT5pcnFfbG9jaywgZmxhZ3MpOwo+PiArCj4+ICvCoMKgwqAgLyogc29tZW9u ZSBjYW4gZG8gc3R1ZmYgaGVyZSwgd2hpY2ggd2UgcmUtY2hlY2sgYmVsb3cgKi8KPj4gKwo+PiAr wqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZ2Y3B1LT5hcmNoLnZnaWNfY3B1LmFwX2xpc3RfbG9j aywgZmxhZ3MpOwo+PiArwqDCoMKgIHNwaW5fbG9jaygmaXJxLT5pcnFfbG9jayk7Cj4+ICsKPj4g K8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBEaWQgc29tZXRoaW5nIGNoYW5nZSBiZWhpbmQgb3Vy IGJhY2tzPwo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBUaGVyZSBhcmUgdHdvIGNhc2Vz Ogo+PiArwqDCoMKgwqAgKiAxKSBUaGUgaXJxIGxvc3QgaXRzIHBlbmRpbmcgc3RhdGUgb3Igd2Fz IGRpc2FibGVkIGJlaGluZCBvdXIKPj4gK8KgwqDCoMKgICrCoMKgwqAgYmFja3MgYW5kL29yIGl0 IHdhcyBxdWV1ZWQgdG8gYW5vdGhlciBWQ1BVJ3MgYXBfbGlzdC4KPj4gK8KgwqDCoMKgICogMikg U29tZW9uZSBjaGFuZ2VkIHRoZSBhZmZpbml0eSBvbiB0aGlzIGlycSBiZWhpbmQgb3VyCj4+ICvC oMKgwqDCoCAqwqDCoMKgIGJhY2tzIGFuZCB3ZSBhcmUgbm93IGhvbGRpbmcgdGhlIHdyb25nIGFw X2xpc3RfbG9jay4KPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogSW4gYm90aCBjYXNlcywg ZHJvcCB0aGUgbG9ja3MgYW5kIHJldHJ5Lgo+PiArwqDCoMKgwqAgKi8KPj4gKwo+PiArwqDCoMKg IGlmICggdW5saWtlbHkoaXJxLT52Y3B1IHx8IHZjcHUgIT0gdmdpY190YXJnZXRfb3JhY2xlKGly cSkpICkKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmaXJxLT5p cnFfbG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2Y3B1 LT5hcmNoLnZnaWNfY3B1LmFwX2xpc3RfbG9jaywKPj4gZmxhZ3MpOwo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmaXJxLT5pcnFfbG9jaywgZmxhZ3MpOwo+PiArwqDC oMKgwqDCoMKgwqAgZ290byByZXRyeTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKgo+ PiArwqDCoMKgwqAgKiBHcmFiIGEgcmVmZXJlbmNlIHRvIHRoZSBpcnEgdG8gcmVmbGVjdCB0aGUg ZmFjdCB0aGF0IGl0IGlzCj4+ICvCoMKgwqDCoCAqIG5vdyBpbiB0aGUgYXBfbGlzdC4KPj4gK8Kg wqDCoMKgICovCj4+ICvCoMKgwqAgdmdpY19nZXRfaXJxX2tyZWYoaXJxKTsKPj4gK8KgwqDCoCBs aXN0X2FkZF90YWlsKCZpcnEtPmFwX2xpc3QsICZ2Y3B1LT5hcmNoLnZnaWNfY3B1LmFwX2xpc3Rf aGVhZCk7Cj4gCj4gSSB3YXMgZXhwZWN0aW5nIHRoZSBsaXN0IHRvIGJlIHNvcnRlZCBoZXJlLiBC dXQgeW91IHNlZW0gdG8gZG8gaXQgb25seQo+IGluIHZnaWNfZmx1c2hfbHJfc3RhdGUoKSB3aGlj aCBpcyBxdWl0ZSBpbnRlcmVzdGluZy4KClRoZSBsaXN0IGlzIG5vdCBzb3J0ZWQgb24gaW5zZXJ0 aW9uIGJlY2F1c2UgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IG1vc3QKb2YgdGhlIHRpbWUuIEluIGZh Y3QgdGhlIGhhcmR3YXJlIFZHSUMgd2lsbCBkbyB0aGUgc29ydGluZyAoa2luZCBvZikKd2l0aGlu IHRoZSBMUnMuIFNvIGFzIGxvbmcgYXMgd2UgZG9uJ3QgaGF2ZSBtb3JlIHRoYW4gPG51bWJlciBv ZiBMUlM+CklSUXMgaW4gdGhlIGxpc3QsIHNvcnRpbmcgaXMgYSB3YXN0ZSBvZiB0aW1lLiBFeHBl cmltZW50cyBpbiB0aGUgcGFzdApzaG93ZWQgdGhhdCB0aGUgbnVtYmVyIG9mIHVzZWQgTFJzIGlz IGxlc3MgdGhhbiA0IGFsbW9zdCBldmVyeSB0aW1lLiBBbmQKc2luY2UgNCBpcyB0aGUgbW9zdGx5 IHVzZWQgbnVtYmVyIG9mIGltcGxlbWVudGVkIExScywgd2UgdmlydHVhbGx5IG5ldmVyCm5lZWQg dGhlIHNvcnRpbmcuIFNvIHdlIGF2b2lkIGRvaW5nIHRoYXQgb24gZXZlcnkgaW5zZXJ0aW9uLCBp bnN0ZWFkCmRvaW5nIHRoYXQgb25seSBpZiBpdCdzIG5lY2Vzc2FyeS4KCj4gSSBjYW4gZm9yZXNl ZSBxdWl0ZSBhIGZldyBpc3N1ZXMgd2l0aCB0aGlzIGNob2ljZSBvbiBYZW46Cj4gwqDCoMKgwqAx KSBZb3UgY29tcHV0ZSB0aGUgc2l6ZSBvZiBhcCBsaXN0IGluIHZnaWNfZmx1c2hfbHJfc3RhdGUo KSBhbmQgdGFrZQo+IGxvY2sgb24gZXZlcnkgSVJRIG9uZSBieSBvbmUuIEEgZ3Vlc3QgY291bGQg YmUgbmFzdHkgYW5kIG1ha2UgdGhhdCBsaXN0Cj4gcXVpdGUgYmlnIGJ5IG1ha2UgSVJRcyBwZW5k aW5nIGJ1dCBuZXZlciAiYWN0aXZlIiB0aGVtIChpLmUgcmVhZCBJQVIpLgoKWWVhaCwgd2UgY291 bGQgdHJ5IHRvIHNob3J0Y3V0IGEgYml0IGhlcmUuCgo+IMKgwqDCoMKgMikgVGhpcyBtaWdodCBi ZSBhbiBpc3N1ZSB3aGlsZSBjaGVja2luZyB3aGV0aGVyIHlvdSBuZWVkIHRvIGRlbGl2ZXIKPiBh biBpbnRlcnJ1cHQgKHZnaWNfdmNwdV9wZW5kaW5nX2lycSkgYmVjYXVzZSB0aGUgbGlzdCBpcyBu b3Qgc29ydGVkLgoKTW9zdCBvZiB0aGUgdGltZSB0aGUgbGlzdCBpcyB2ZXJ5IHNob3J0LCBzdG9y aW5nIG9uZSwgdHdvIG9yIGFjdHVhbGx5IG5vCklSUXMuIEluIHRoZSBmdW5jdGlvbiB3aGVyZSB3 ZSBjaGVjayBmb3IgcGVuZGluZyBJUlFzIHdlIGJhaWwgb3V0IGFzCnNvb24gYXMgd2UgZm91bmQg dGhlIGZpcnN0IGVsaWdpYmxlIGludGVycnVwdC4gU28gc29ydGluZyBkb2VzIG5vdCBoZWxwCmlu IHRoZSBtYWpvcml0eSBvZiBjYXNlcy4KCklmIHlvdSBhcmUgcmVhbGx5IGNvbmNlcm5lZCBhYm91 dCB0aGF0IGxpc3QgZ3Jvd2luZyB0b28gbG9uZywgd2UgY291bGQKdGhpbmsgYWJvdXQgbWl0aWdh dGlvbnM6CjEpIFRyeSB0byBhdm9pZCBpdGVyYXRpbmcgdGhlIHdob2xlIGxpc3Qgd2hpbGUgY2hl Y2tpbmcgd2hldGhlciBpdCBuZWVkcwp0byBiZSBzb3J0ZWQuCjIpIFN0b3JlIGEgZmxhZyB0aGF0 IG5vdGVzIGlmIHRoZSBsaXN0IGhhcyBhbHJlYWR5IGJlZW4gc29ydGVkLiBBcyBsb25nCmFzIHdl IGRvbid0IGNoYW5nZSBhbnl0aGluZywgd2UgZG9uJ3QgbmVlZCB0byBzb3J0IGFnYWluLiBXb3Vs ZCBiZSBnb29kCnRvIHRlc3Qgd2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IGhlbHBmdWwuIEJ1dCB3 ZSB3b3VsZCBuZWVkIHRvIGtlZXAgdGhpcwpmbGFnIHVwLXRvLWRhdGUsIHdoaWNoIHNvdW5kcyBh IGJpdCBmcmFnaWxlIHRvIGdldCByaWdodC4KMykgU3dpdGNoIHRvIHNvcnQtb24taW5zZXJ0aW9u IG9uY2Ugd2UgcmVhY2hlZCBhIGNlcnRhaW4gbnVtYmVyIG9mIElSUXMKb24gdGhlIGxpc3QsIHRv IG1pdGlnYXRlIERPUyBhdHRhY2tzIGZyb20gdGhlIGd1ZXN0LiBUaGlzIHNob3VsZCBhdm9pZAps aXN0IGl0ZXJhdGlvbnMgaW4gaG90IHBhdGhzLCB3aXRoIElSUXMgZGlzYWJsZWQuCgpCdXQgYWxs IG9mIHRoZXNlIHNvdW5kIGEgYml0IGhhY2tpc2ggdG8gbWUgYW5kIGp1c3Qgd291bGQgc3BvaWwg dGhlIHZlcnkKY2xlYW4gYW5kIHJvYnVzdCBjb2RlIHdlIGhhdmUgdG9kYXkuIEFsc28gSSBhbSBu b3Qgc3VyZSB3ZSBjYW4gYXZvaWQKbGlzdCBpdGVyYXRpb25zIGV2ZXJ5IHRpbWUgKGZvciBpbnN0 YW5jZSBpbiBwcnVuZV9hcF9saXN0KCkpLiBUaGVyZSBpcwphbiB1cHBlciBsaW1pdCB0b2RheSAo bnVtYmVyIG9mIFNQSXMpLCBzbyB3ZSBtaWdodCBiZSBoYXBweSB3aXRoIHRoYXQKZm9yIG5vdy4K VG8gYmUgaG9uZXN0IEkgd291bGQgdmVyeSBtdWNoIGRpc2xpa2UgY2hhbmdpbmcgdGhlIGNvZGUg YXQgdGhpcyBwb2ludC4KSSBiZWxpZXZlIGEgcGF0Y2ggc2VyaWVzIGFmdGVyd2FyZHMgd291bGQg YmUgYmV0dGVyLCBhbHNvIHRvIGFjdHVhbGx5CmhhdmUgc29tZSBudW1iZXJzIG9uIHRoZSBpbXBh Y3Qgb2YgdGhpcy4KCkNoZWVycywKQW5kcmUuCgo+PiArwqDCoMKgIGlycS0+dmNwdSA9IHZjcHU7 Cj4+ICsKPj4gK8KgwqDCoCBzcGluX3VubG9jaygmaXJxLT5pcnFfbG9jayk7Cj4+ICvCoMKgwqAg c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmNwdS0+YXJjaC52Z2ljX2NwdS5hcF9saXN0X2xvY2ss IGZsYWdzKTsKPj4gKwo+PiArwqDCoMKgIHJ1bm5pbmcgPSB2Y3B1LT5pc19ydW5uaW5nOwo+PiAr wqDCoMKgIHZjcHVfdW5ibG9jayh2Y3B1KTsKPj4gK8KgwqDCoCBpZiAoIHJ1bm5pbmcgJiYgdmNw dSAhPSBjdXJyZW50ICkKPj4gK8KgwqDCoMKgwqDCoMKgIHNtcF9zZW5kX2V2ZW50X2NoZWNrX21h c2soY3B1bWFza19vZih2Y3B1LT5wcm9jZXNzb3IpKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiB0 cnVlOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIHZnaWNfaW5qZWN0X2lycSAtIEluamVjdCBh biBJUlEgZnJvbSBhIGRldmljZSB0byB0aGUgdmdpYwo+PiArICogQGQ6wqDCoMKgwqDCoMKgIFRo ZSBkb21haW4gcG9pbnRlcgo+PiArICogQHZjcHU6wqDCoMKgIFRoZSB2Q1BVIGZvciBQUElzCj4+ ICsgKiBAaW50aWQ6wqDCoCBUaGUgSU5USUQgdG8gaW5qZWN0IGEgbmV3IHN0YXRlIHRvLgo+PiAr ICogQGxldmVsOsKgwqAgRWRnZS10cmlnZ2VyZWQ6wqAgdHJ1ZTrCoCB0byB0cmlnZ2VyIHRoZSBp bnRlcnJ1cHQKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZhbHNlOiB0byBp Z25vcmUgdGhlIGNhbGwKPj4gKyAqwqDCoMKgwqDCoMKgIExldmVsLXNlbnNpdGl2ZcKgIHRydWU6 wqAgcmFpc2UgdGhlIGlucHV0IHNpZ25hbAo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZmFsc2U6IGxvd2VyIHRoZSBpbnB1dCBzaWduYWwKPj4gKyAqCj4+ICsgKiBUaGUgVkdJ QyBpcyBub3QgY29uY2VybmVkIHdpdGggZGV2aWNlcyBiZWluZyBhY3RpdmUtTE9XIG9yCj4+IGFj dGl2ZS1ISUdIIGZvcgo+PiArICogbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdHMuwqAgWW91IGNh biB0aGluayBvZiB0aGUgbGV2ZWwgcGFyYW1ldGVyCj4+IGFzIDEKPj4gKyAqIGJlaW5nIEhJR0gg YW5kIDAgYmVpbmcgTE9XIGFuZCBhbGwgZGV2aWNlcyBiZWluZyBhY3RpdmUtSElHSC4KPj4gKyAq Lwo+PiAraW50IHZnaWNfaW5qZWN0X2lycShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmNwdSAq dmNwdSwgdW5zaWduZWQgaW50Cj4+IGludGlkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi b29sIGxldmVsKQo+IAo+IEluZGVudGF0aW9uLgo+IAo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB2 Z2ljX2lycSAqaXJxOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsKPj4gK8Kg wqDCoCBpcnEgPSB2Z2ljX2dldF9pcnEoZCwgdmNwdSwgaW50aWQpOwo+PiArwqDCoMKgIGlmICgg IWlycSApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKg IHNwaW5fbG9ja19pcnFzYXZlKCZpcnEtPmlycV9sb2NrLCBmbGFncyk7Cj4+ICsKPj4gK8KgwqDC oCBpZiAoICF2Z2ljX3ZhbGlkYXRlX2luamVjdGlvbihpcnEsIGxldmVsKSApCj4+ICvCoMKgwqAg ewo+PiArwqDCoMKgwqDCoMKgwqAgLyogTm90aGluZyB0byBzZWUgaGVyZSwgbW92ZSBhbG9uZy4u LiAqLwo+PiArwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxLT5pcnFf bG9jaywgZmxhZ3MpOwo+PiArwqDCoMKgwqDCoMKgwqAgdmdpY19wdXRfaXJxKGQsIGlycSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoIGlycS0+Y29uZmlnID09IFZHSUNfQ09ORklHX0xFVkVMICkKPj4gK8KgwqDCoMKgwqDCoMKg IGlycS0+bGluZV9sZXZlbCA9IGxldmVsOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDC oMKgIGlycS0+cGVuZGluZ19sYXRjaCA9IHRydWU7Cj4+ICsKPj4gK8KgwqDCoCB2Z2ljX3F1ZXVl X2lycV91bmxvY2soZCwgaXJxLCBmbGFncyk7Cj4+ICvCoMKgwqAgdmdpY19wdXRfaXJxKGQsIGly cSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiDCoCAvKgo+PiDCoMKg ICogTG9jYWwgdmFyaWFibGVzOgo+PiDCoMKgICogbW9kZTogQwo+PiBkaWZmIC0tZ2l0IGEveGVu L2FyY2gvYXJtL3ZnaWMvdmdpYy5oIGIveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy5oCj4+IGluZGV4 IDdhMTVjZmRkNzkuLjUxMjc3MzlmMGYgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9hcmNoL2FybS92Z2lj L3ZnaWMuaAo+PiArKysgYi94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLmgKPj4gQEAgLTE3LDkgKzE3 LDE5IEBACj4+IMKgICNpZm5kZWYgX19YRU5fQVJNX1ZHSUNfTkVXX0hfXwo+PiDCoCAjZGVmaW5l IF9fWEVOX0FSTV9WR0lDX05FV19IX18KPj4gwqAgK3N0YXRpYyBpbmxpbmUgYm9vbCBpcnFfaXNf cGVuZGluZyhzdHJ1Y3QgdmdpY19pcnEgKmlycSkKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIGlycS0+ Y29uZmlnID09IFZHSUNfQ09ORklHX0VER0UgKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGly cS0+cGVuZGluZ19sYXRjaDsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gaXJxLT5wZW5kaW5nX2xhdGNoIHx8IGlycS0+bGluZV9sZXZlbDsKPj4gK30KPj4gKwo+PiDC oCBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfZ2V0X2lycShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg dmNwdSAqdmNwdSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGludGlkKTsKPj4gwqAgdm9pZCB2Z2ljX3B1dF9pcnEo c3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHZnaWNfaXJxICppcnEpOwo+PiArYm9vbCB2Z2ljX3F1 ZXVlX2lycV91bmxvY2soc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHZnaWNfaXJxICppcnEsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwo+PiDC oCDCoCBzdGF0aWMgaW5saW5lIHZvaWQgdmdpY19nZXRfaXJxX2tyZWYoc3RydWN0IHZnaWNfaXJx ICppcnEpCj4+IMKgIHsKPj4KPiAKPiBDaGVlcnMsCj4gCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs