From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC PATCH 45/49] ARM: new VGIC: vgic-init: implement vgic_init Date: Mon, 19 Feb 2018 15:53:04 +0000 Message-ID: <669e370b-c8a4-92c0-02af-9fa2f00cf81c@linaro.org> References: <20180209143937.28866-1-andre.przywara@linaro.org> <20180209143937.28866-46-andre.przywara@linaro.org> <138c4502-e8df-9b8d-ab4a-e13f7469dbc1@arm.com> 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 1ennkc-0001Fm-Hq for xen-devel@lists.xenproject.org; Mon, 19 Feb 2018 15:53:10 +0000 Received: by mail-wr0-x241.google.com with SMTP id u49so5472859wrc.10 for ; Mon, 19 Feb 2018 07:53:07 -0800 (PST) In-Reply-To: <138c4502-e8df-9b8d-ab4a-e13f7469dbc1@arm.com> 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 SGksCgpPbiAxOS8wMi8xOCAxMzoyMSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpLAo+IAo+IE9u IDA5LzAyLzE4IDE0OjM5LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPj4gVGhpcyBwYXRjaCBhbGxv Y2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBtb2RlbAo+ PiB0aGUgdmdpYyBkaXN0cmlidXRvciBhbmQgdmlydHVhbCBjcHUgaW50ZXJmYWNlcy4gQXQgdGhh dCBzdGFnZSB0aGUKPj4gbnVtYmVyIG9mIElSUXMgYW5kIG51bWJlciBvZiB2aXJ0dWFsIENQVXMg aXMgZnJvemVuLgo+Pgo+PiBUaGlzIGlzIGJhc2VkIG9uIExpbnV4IGNvbW1pdCBhZDI3NWI4YmIx ZTYsIHdyaXR0ZW4gYnkgRXJpYyBBdWdlci4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6 eXdhcmEgPGFuZHJlLnByenl3YXJhQGxpbmFyby5vcmc+Cj4+IC0tLQo+PiDCoCB4ZW4vYXJjaC9h cm0vdmdpYy92Z2ljLWluaXQuYyB8IDE5Nwo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAKPiBUaGlzIGZpbGUgaXMgZXhwb3J0aW5nIGEgbG90IG9mIGZ1bmN0 aW9uLCBhbGwgdGhlIGNvcnJlc3BvbmRpbmcKPiBwcm90b3R5cGUgc2hvdWxkIGJlIGRlY2xhcmVk IHdpdGhpbiB0aGlzIHBhdGNoIGFzIHdlbGwuCgpCdXQgdGhvc2UgYXJlIGltcGxlbWVudGF0aW9u cyBvZiBmdW5jdGlvbnMgdXNlZCBieSBYZW4gY29kZSBhbHJlYWR5LCBhbmQKYXJlIGFsbCBkZWNs YXJlZCBpbiB4ZW4vaW5jbHVkZS9hc20tYXJtL3ZnaWMuaC4KT3IgZGlkIEkgbWlzcyBhbnk/CgpD aGVlcnMsCkFuZHJlLgoKPiAKPj4gwqAgMSBmaWxlIGNoYW5nZWQsIDE5NyBpbnNlcnRpb25zKCsp Cj4+Cj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLWluaXQuYwo+PiBiL3hl bi9hcmNoL2FybS92Z2ljL3ZnaWMtaW5pdC5jCj4+IGluZGV4IGI1ZjExODNhNTAuLjBjZDJkZmM2 MDAgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMtaW5pdC5jCj4+ICsrKyBi L3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMtaW5pdC5jCj4+IEBAIC0xLDUgKzEsNiBAQAo+PiDCoCAv Kgo+PiDCoMKgICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFSTSBMdGQuCj4+ICsgKiBJbXBv cnRlZCBmcm9tIExpbnV4ICgibmV3IiBLVk0gVkdJQykgYW5kIGhlYXZpbHkgYWRhcHRlZCB0byBY ZW4uCj4+IMKgwqAgKgo+PiDCoMKgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gwqDCoCAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4+ IEBAIC0xOSw2ICsyMCw3NyBAQAo+PiDCoCDCoCAjaW5jbHVkZSAidmdpYy5oIgo+PiDCoCArLyoK Pj4gKyAqIEluaXRpYWxpemF0aW9uIHJ1bGVzOiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhZ2VzIHRv IHRoZSB2Z2ljCj4+ICsgKiBpbml0aWFsaXphdGlvbiwgYm90aCBmb3IgdGhlIGRpc3RyaWJ1dG9y IGFuZCB0aGUgQ1BVIGludGVyZmFjZXMuwqAKPj4gVGhlIGJhc2ljCj4+ICsgKiBpZGVhIGlzIHRo YXQgZXZlbiB0aG91Z2ggdGhlIFZHSUMgaXMgbm90IGZ1bmN0aW9uYWwgb3Igbm90Cj4+IHJlcXVl c3RlZCBmcm9tCj4+ICsgKiB1c2VyIHNwYWNlLCB0aGUgY3JpdGljYWwgcGF0aCBvZiB0aGUgcnVu IGxvb3AgY2FuIHN0aWxsIGNhbGwgVkdJQwo+PiBmdW5jdGlvbnMKPj4gKyAqIHRoYXQganVzdCB3 b24ndCBkbyBhbnl0aGluZywgd2l0aG91dCB0aGVtIGhhdmluZyB0byBjaGVjayBhZGRpdGlvbmFs Cj4+ICsgKiBpbml0aWFsaXphdGlvbiBmbGFncyB0byBlbnN1cmUgdGhleSBkb24ndCBsb29rIGF0 IHVuaW5pdGlhbGl6ZWQgZGF0YQo+PiArICogc3RydWN0dXJlcy4KPj4gKyAqCj4+ICsgKiBEaXN0 cmlidXRvcjoKPj4gKyAqCj4+ICsgKiAtIHZnaWNfZWFybHlfaW5pdCgpOiBpbml0aWFsaXphdGlv biBvZiBzdGF0aWMgZGF0YSB0aGF0IGRvZXNuJ3QKPj4gKyAqwqDCoCBkZXBlbmQgb24gYW55IHNp emluZyBpbmZvcm1hdGlvbiBvciBlbXVsYXRpb24gdHlwZS4gTm8gYWxsb2NhdGlvbgo+PiArICrC oMKgIGlzIGFsbG93ZWQgdGhlcmUuCj4+ICsgKgo+PiArICogLSB2Z2ljX2luaXQoKTogYWxsb2Nh dGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGdlbmVyaWMgZGF0YQo+PiArICrCoMKgIHN0 cnVjdHVyZXMgdGhhdCBkZXBlbmQgb24gc2l6aW5nIGluZm9ybWF0aW9uIChudW1iZXIgb2YgQ1BV cywKPj4gKyAqwqDCoCBudW1iZXIgb2YgaW50ZXJydXB0cykuIEFsc28gaW5pdGlhbGl6ZXMgdGhl IHZjcHUgc3BlY2lmaWMgZGF0YQo+PiArICrCoMKgIHN0cnVjdHVyZXMuIENhbiBiZSBleGVjdXRl ZCBsYXppbHkgZm9yIEdJQ3YyLgo+PiArICoKPj4gKyAqIENQVSBJbnRlcmZhY2U6Cj4+ICsgKgo+ PiArICogLSBrdm1fdmdpY192Y3B1X2Vhcmx5X2luaXQoKTogaW5pdGlhbGl6YXRpb24gb2Ygc3Rh dGljIGRhdGEgdGhhdAo+PiArICrCoMKgIGRvZXNuJ3QgZGVwZW5kIG9uIGFueSBzaXppbmcgaW5m b3JtYXRpb24gb3IgZW11bGF0aW9uIHR5cGUuIE5vCj4+ICsgKsKgwqAgYWxsb2NhdGlvbiBpcyBh bGxvd2VkIHRoZXJlLgo+PiArICovCj4+ICsKPj4gKy8qKgo+PiArICogdmdpY192Y3B1X2Vhcmx5 X2luaXQoKSAtIEluaXRpYWxpemUgc3RhdGljIFZHSUMgVkNQVSBkYXRhIHN0cnVjdHVyZXMKPj4g KyAqIEB2Y3B1OiBUaGUgVkNQVSB3aG9zZSBWR0lDIGRhdGEgc3RydWN0dXJlcyB3aG91bGQgYmUg aW5pdGlhbGl6ZWQKPj4gKyAqCj4+ICsgKiBPbmx5IGRvIGluaXRpYWxpemF0aW9uLCBidXQgZG8g bm90IGFjdHVhbGx5IGVuYWJsZSB0aGUgVkdJQyBDUFUKPj4gaW50ZXJmYWNlCj4+ICsgKiB5ZXQu Cj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIHZnaWNfdmNwdV9lYXJseV9pbml0KHN0cnVjdCB2Y3B1 ICp2Y3B1KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB2Z2ljX2NwdSAqdmdpY19jcHUgPSAmdmNw dS0+YXJjaC52Z2ljX2NwdTsKPj4gK8KgwqDCoCBpbnQgaTsKPj4gKwo+PiArwqDCoMKgIElOSVRf TElTVF9IRUFEKCZ2Z2ljX2NwdS0+YXBfbGlzdF9oZWFkKTsKPj4gK8KgwqDCoCBzcGluX2xvY2tf aW5pdCgmdmdpY19jcHUtPmFwX2xpc3RfbG9jayk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDC oMKgwqAgKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhbGwgU0dJcyB0byBiZSBlZGdlLXRyaWdnZXJl ZCBhbmQKPj4gK8KgwqDCoMKgICogY29uZmlndXJlIGFsbCBQUElzIGFzIGxldmVsLXRyaWdnZXJl ZC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgZm9yICggaSA9IDA7IGkgPCBWR0lDX05SX1BS SVZBVEVfSVJRUzsgaSsrICkKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg dmdpY19pcnEgKmlycSA9ICZ2Z2ljX2NwdS0+cHJpdmF0ZV9pcnFzW2ldOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmaXJxLT5hcF9saXN0KTsKPj4gK8KgwqDCoMKgwqDC oMKgIHNwaW5fbG9ja19pbml0KCZpcnEtPmlycV9sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGly cS0+aW50aWQgPSBpOwo+PiArwqDCoMKgwqDCoMKgwqAgaXJxLT52Y3B1ID0gTlVMTDsKPj4gK8Kg wqDCoMKgwqDCoMKgIGlycS0+dGFyZ2V0X3ZjcHUgPSB2Y3B1Owo+PiArwqDCoMKgwqDCoMKgwqAg aXJxLT50YXJnZXRzID0gMVUgPDwgdmNwdS0+dmNwdV9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgIGF0 b21pY19zZXQoJmlycS0+cmVmY291bnQsIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCB2Z2lj X2lycV9pc19zZ2koaSkgKQo+PiArwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiBTR0lzICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycS0+ZW5hYmxl ZCA9IDE7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycS0+Y29uZmlnID0gVkdJQ19DT05G SUdfRURHRTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4g K8KgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogUFBJcyAqLwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnEtPmNvbmZpZyA9IFZHSUNfQ09ORklHX0xFVkVM Owo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiDCoCAvKiBD UkVBVElPTiAqLwo+PiDCoCDCoCAvKioKPj4gQEAgLTUyLDYgKzEyNCwxMzEgQEAgaW50IGRvbWFp bl92Z2ljX3JlZ2lzdGVyKHN0cnVjdCBkb21haW4gKmQsIGludAo+PiAqbW1pb19jb3VudCkKPj4g wqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiDCoCArLyogSU5JVC9ERVNUUk9ZICovCj4+ ICsKPj4gKy8qKgo+PiArICogZG9tYWluX3ZnaWNfaW5pdDogaW5pdGlhbGl6ZSB0aGUgZGlzdCBk YXRhIHN0cnVjdHVyZXMKPj4gKyAqIEBkOiBkb21haW4gcG9pbnRlcgo+PiArICogQG5yX3NwaXM6 IG51bWJlciBvZiBTUElzCj4+ICsgKi8KPj4gK2ludCBkb21haW5fdmdpY19pbml0KHN0cnVjdCBk b21haW4gKmQsIHVuc2lnbmVkIGludCBucl9zcGlzKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB2 Z2ljX2Rpc3QgKmRpc3QgPSAmZC0+YXJjaC52Z2ljOwo+PiArwqDCoMKgIGludCBpLCByZXQ7Cj4+ ICsKPj4gK8KgwqDCoCAvKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgU1BJcyBzdXBwb3J0 ZWQgdG8gKDEwMjAgLSAzMikgPQo+PiA5ODjCoCAqLwo+PiArwqDCoMKgIGlmICggbnJfc3BpcyA+ ICgxMDIwIC0gTlJfTE9DQUxfSVJRUykgKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gK8KgwqDCoCBkaXN0LT5ucl9zcGlzID0gbnJfc3BpczsKPj4gK8KgwqDCoCBk aXN0LT5zcGlzID0geHphbGxvY19hcnJheShzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMpOwo+PiAr wqDCoMKgIGlmICggIWRpc3QtPnNwaXMgKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuwqAgLUVO T01FTTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIEluIHRoZSBmb2xsb3dpbmcg Y29kZSB3ZSBkbyBub3QgdGFrZSB0aGUgaXJxIHN0cnVjdCBsb2NrIHNpbmNlCj4+ICvCoMKgwqDC oCAqIG5vIG90aGVyIGFjdGlvbiBvbiBpcnEgc3RydWN0cyBjYW4gaGFwcGVuIHdoaWxlIHRoZSBW R0lDIGlzCj4+ICvCoMKgwqDCoCAqIG5vdCBpbml0aWFsaXplZCB5ZXQ6Cj4+ICvCoMKgwqDCoCAq IElmIHNvbWVvbmUgd2FudHMgdG8gaW5qZWN0IGFuIGludGVycnVwdCBvciBkb2VzIGEgTU1JTyBh Y2Nlc3MsIHdlCj4+ICvCoMKgwqDCoCAqIHJlcXVpcmUgcHJpb3IgaW5pdGlhbGl6YXRpb24gaW4g Y2FzZSBvZiBhIHZpcnR1YWwgR0lDdjMgb3IKPj4gdHJpZ2dlcgo+PiArwqDCoMKgwqAgKiBpbml0 aWFsaXphdGlvbiB3aGVuIHVzaW5nIGEgdmlydHVhbCBHSUN2Mi4KPj4gK8KgwqDCoMKgICovCj4+ ICvCoMKgwqAgZm9yICggaSA9IDA7IGkgPCBucl9zcGlzOyBpKysgKQo+PiArwqDCoMKgIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Z2ljX2lycSAqaXJxID0gJmRpc3QtPnNwaXNbaV07Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlycS0+aW50aWQgPSBpICsgVkdJQ19OUl9QUklWQVRFX0lS UVM7Cj4+ICvCoMKgwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmaXJxLT5hcF9saXN0KTsKPj4g K8KgwqDCoMKgwqDCoMKgIHNwaW5fbG9ja19pbml0KCZpcnEtPmlycV9sb2NrKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGlycS0+dmNwdSA9IE5VTEw7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpcnEtPnRhcmdl dF92Y3B1ID0gTlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgIGF0b21pY19zZXQoJmlycS0+cmVmY291 bnQsIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCBkaXN0LT52ZXJzaW9uID09IEdJQ19WMiAp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycS0+dGFyZ2V0cyA9IDA7Cj4+ICvCoMKgwqDC oMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycS0+bXBpZHIgPSAwOwo+ PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIElOSVRfTElTVF9IRUFEKCZkaXN0LT5scGlfbGlz dF9oZWFkKTsKPj4gK8KgwqDCoCBzcGluX2xvY2tfaW5pdCgmZGlzdC0+bHBpX2xpc3RfbG9jayk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIGRpc3QtPnZlcnNpb24gPT0gR0lDX1YyICkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldCA9IHZnaWNfdjJfbWFwX3Jlc291cmNlcyhkKTsKPj4gK8KgwqDCoCBlbHNl Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5YSU87Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIHJl dCApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgLyogYWxs b2NhdGVkX2lycXMoKSBpcyB1c2VkIGJ5IFhlbiB0byBmaW5kIGF2YWlsYWJsZSB2SVJRcyAqLwo+ PiArwqDCoMKgIGQtPmFyY2gudmdpYy5hbGxvY2F0ZWRfaXJxcyA9Cj4+ICvCoMKgwqDCoMKgwqDC oCB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGxvbmcsIEJJVFNfVE9fTE9OR1ModmdpY19udW1faXJx cyhkKSkpOwo+PiArwqDCoMKgIGlmICggIWQtPmFyY2gudmdpYy5hbGxvY2F0ZWRfaXJxcyApCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIC8qIHZJUlEw LTE1IChTR0lzKSBhcmUgcmVzZXJ2ZWQgKi8KPj4gK8KgwqDCoCBmb3IgKCBpID0gMDsgaSA8IE5S X0dJQ19TR0k7IGkrKyApCj4+ICvCoMKgwqDCoMKgwqDCoCBzZXRfYml0KGksIGQtPmFyY2gudmdp Yy5hbGxvY2F0ZWRfaXJxcyk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArLyoqCj4+ICsgKiB2Y3B1X3ZnaWNfaW5pdCgpIC0gUmVnaXN0ZXIgVkNQVS1zcGVjaWZpYyBL Vk0gaW9kZXZzCj4+ICsgKiB3YXM6IGt2bV92Z2ljX3ZjcHVfaW5pdCgpCj4+ICsgKiBYZW46IGFk ZGluZyB2Z2ljX3Z4X2VuYWJsZSgpIGNhbGwKPj4gKyAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSBW Q1BVIGJlaW5nIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkCj4+ICsgKi8KPj4gK2ludCB2Y3B1X3Zn aWNfaW5pdChzdHJ1Y3QgdmNwdSAqdmNwdSkKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsK Pj4gKwo+PiArwqDCoMKgIHZnaWNfdmNwdV9lYXJseV9pbml0KHZjcHUpOwo+PiArCj4+ICvCoMKg wqAgaWYgKCBnaWNfaHdfdmVyc2lvbigpID09IEdJQ19WMiApCj4+ICvCoMKgwqDCoMKgwqDCoCB2 Z2ljX3YyX2VuYWJsZSh2Y3B1KTsKPj4gK8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSAtRU5YSU87Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICt2 b2lkIGRvbWFpbl92Z2ljX2ZyZWUoc3RydWN0IGRvbWFpbiAqZCkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgdmdpY19kaXN0ICpkaXN0ID0gJmQtPmFyY2gudmdpYzsKPj4gK8KgwqDCoMKgwqDCoMKg IGludCBpLCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKCBpID0gMDsgaSA8IGRpc3QtPm5yX3Nw aXM7IGkrKyApCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZnaWNfaXJx ICppcnEgPSB2Z2ljX2dldF9pcnEoZCwgTlVMTCwgMzIgKyBpKTsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCAhaXJxLT5odyApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVl Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSByZWxlYXNlX2d1ZXN0X2lycShkLCBpcnEt Pmh3aW50aWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCByZXQgKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkcHJpbnRrKFhFTkxPR19HX1dBUk5JTkcsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgImQldTogRmFpbGVkIHRvIHJlbGVhc2UgdmlycSAldSByZXQgPSAlZFxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkLT5kb21haW5faWQsIDMyICsg aSwgcmV0KTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBkaXN0LT5yZWFkeSA9IGZhbHNl Owo+PiArwqDCoMKgIGRpc3QtPmluaXRpYWxpemVkID0gZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoCB4 ZnJlZShkaXN0LT5zcGlzKTsKPj4gK8KgwqDCoCB4ZnJlZShkaXN0LT5hbGxvY2F0ZWRfaXJxcyk7 Cj4+ICvCoMKgwqAgZGlzdC0+bnJfc3BpcyA9IDA7Cj4+ICt9Cj4+ICsKPj4gK2ludCB2Y3B1X3Zn aWNfZnJlZShzdHJ1Y3QgdmNwdSAqdmNwdSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgdmdpY19j cHUgKnZnaWNfY3B1ID0gJnZjcHUtPmFyY2gudmdpY19jcHU7Cj4+ICsKPj4gK8KgwqDCoCBJTklU X0xJU1RfSEVBRCgmdmdpY19jcHUtPmFwX2xpc3RfaGVhZCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiDCoCAvKgo+PiDCoMKgICogTG9jYWwgdmFyaWFibGVzOgo+PiDC oMKgICogbW9kZTogQwo+Pgo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJv amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hl bi1kZXZlbA==