From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v7 12/27] KVM: arm64/sve: System register context switch and access support Date: Wed, 24 Apr 2019 16:21:22 +0100 Message-ID: <87bm0vwhsd.fsf@zen.linaroharston> References: <1553864452-15080-1-git-send-email-Dave.Martin@arm.com> <1553864452-15080-13-git-send-email-Dave.Martin@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 004BC4A494 for ; Wed, 24 Apr 2019 11:21:27 -0400 (EDT) Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A1UKNDt0BOxn for ; Wed, 24 Apr 2019 11:21:25 -0400 (EDT) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 763A04A44D for ; Wed, 24 Apr 2019 11:21:25 -0400 (EDT) Received: by mail-wr1-f68.google.com with SMTP id g3so25711510wrx.9 for ; Wed, 24 Apr 2019 08:21:25 -0700 (PDT) In-reply-to: <1553864452-15080-13-git-send-email-Dave.Martin@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: Dave Martin Cc: Okamoto Takayuki , Christoffer Dall , Ard Biesheuvel , Marc Zyngier , Catalin Marinas , Will Deacon , Zhang Lei , Julien Grall , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org List-Id: kvmarm@lists.cs.columbia.edu CkRhdmUgTWFydGluIDxEYXZlLk1hcnRpbkBhcm0uY29tPiB3cml0ZXM6Cgo+IFRoaXMgcGF0Y2gg YWRkcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgZm9yIGNvbnRleHQgc3dpdGNoaW5nIFpDUl9FTDEK PiBmb3IgZWFjaCB2Y3B1Lgo+Cj4gWkNSX0VMMSBpcyB0cmFwcGVkIGFsb25nc2lkZSB0aGUgRlBT SU1EL1NWRSByZWdpc3RlcnMsIHNvIGl0IG1ha2VzCj4gc2Vuc2UgZm9yIGl0IHRvIGJlIGhhbmRs ZWQgYXMgcGFydCBvZiB0aGUgZ3Vlc3QgRlBTSU1EL1NWRSBjb250ZXh0Cj4gZm9yIGNvbnRleHQg c3dpdGNoIHB1cnBvc2VzIGluc3RlYWQgb2YgaGFuZGxpbmcgaXQgYXMgYSBnZW5lcmFsCj4gc3lz dGVtIHJlZ2lzdGVyLiAgVGhpcyBtZWFucyB0aGF0IGl0IGNhbiBiZSBzd2l0Y2hlZCBpbiBsYXpp bHkgYXQKPiB0aGUgYXBwcm9wcmlhdGUgdGltZS4gIE5vIGVmZm9ydCBpcyBtYWRlIHRvIHRyYWNr IGhvc3QgY29udGV4dCBmb3IKPiB0aGlzIHJlZ2lzdGVyLCBzaW5jZSBTVkUgcmVxdWlyZXMgVkhF OiB0aHVzIHRoZSBob3N0cydzIHZhbHVlIGZvcgo+IHRoaXMgcmVnaXN0ZXIgbGl2ZXMgcGVybWFu ZW50bHkgaW4gWkNSX0VMMiBhbmQgZG9lcyBub3QgYWxpYXMgdGhlCj4gZ3Vlc3QncyB2YWx1ZSBh dCBhbnkgdGltZS4KPgo+IFRoZSBIeXAgc3dpdGNoIGFuZCBmcHNpbWQgY29udGV4dCBoYW5kbGlu ZyBjb2RlIGlzIGV4dGVuZGVkCj4gYXBwcm9wcmlhdGVseS4KPgo+IEFjY2Vzc29ycyBhcmUgYWRk ZWQgaW4gc3lzX3JlZ3MuYyB0byBleHBvc2UgdGhlIFNWRSBzeXN0ZW0KPiByZWdpc3RlcnMgYW5k IElEIHJlZ2lzdGVyIGZpZWxkcy4gIEJlY2F1c2UgdGhlc2UgbmVlZCB0byBiZQo+IGNvbmRpdGlv bmFsbHkgdmlzaWJsZSBiYXNlZCBvbiB0aGUgZ3Vlc3QgY29uZmlndXJhdGlvbiwgdGhleSBhcmUK PiBpbXBsZW1lbnRlZCBzZXBhcmF0ZWx5IGZvciBub3cgcmF0aGVyIHRoYW4gYnkgdXNlIG9mIHRo ZSBnZW5lcmljCj4gc3lzdGVtIHJlZ2lzdGVyIGhlbHBlcnMuICBUaGlzIG1heSBiZSBhYnN0cmFj dGVkIGJldHRlciBsYXRlciBvbgo+IHdoZW4vaWYgdGhlcmUgYXJlIG1vcmUgZmVhdHVyZXMgcmVx dWlyaW5nIHRoaXMgbW9kZWwuCj4KPiBJRF9BQTY0WkZSMF9FTDEgaXMgUk8tUkFaIGZvciBNUlMv TVNSIHdoZW4gU1ZFIGlzIGRpc2FibGVkIGZvciB0aGUKPiBndWVzdCwgYnV0IGZvciBjb21wYXRp YmlsaXR5IHdpdGggbm9uLVNWRSBhd2FyZSBLVk0gaW1wbGVtZW50YXRpb25zCj4gdGhlIHJlZ2lz dGVyIHNob3VsZCBub3QgYmUgZW51bWVyYXRlZCBhdCBhbGwgZm9yIEtWTV9HRVRfUkVHX0xJU1QK PiBpbiB0aGlzIGNhc2UuICBGb3IgY29uc2lzdGVuY3kgd2UgYWxzbyByZWplY3QgaW9jdGwgYWNj ZXNzIHRvIHRoZQo+IHJlZ2lzdGVyLiAgVGhpcyBlbnN1cmVzIHRoYXQgYSBub24tU1ZFLWVuYWJs ZWQgZ3Vlc3QgbG9va3MgdGhlIHNhbWUKPiB0byB1c2Vyc3BhY2UsIGlycmVzcGVjdGl2ZSBvZiB3 aGV0aGVyIHRoZSBrZXJuZWwgS1ZNIGltcGxlbWVudGF0aW9uCj4gc3VwcG9ydHMgU1ZFLgo+Cj4g U2lnbmVkLW9mZi1ieTogRGF2ZSBNYXJ0aW4gPERhdmUuTWFydGluQGFybS5jb20+Cj4gUmV2aWV3 ZWQtYnk6IEp1bGllbiBUaGllcnJ5IDxqdWxpZW4udGhpZXJyeUBhcm0uY29tPgo+IFRlc3RlZC1i eTogemhhbmcubGVpIDx6aGFuZy5sZWlAanAuZnVqaXRzdS5jb20+Cj4KPiAtLS0KPgo+IENoYW5n ZXMgc2luY2UgdjU6Cj4KPiAgKiBQb3J0IHRvIHRoZSByZW5hbWVkIHZpc2liaWxpdHkoKSBmcmFt ZXdvcmsuCj4KPiAgKiBTd2FwIHZpc2libGl0eSgpIGhlbHBlcnMgc28gdGhhdCB0aGV5IGFwcGVh ciBieSB0aGUgcmVsZXZhbnQgYWNjZXNzb3IKPiAgICBmdW5jdGlvbnMuCj4KPiAgKiBbSnVsaWVu IEdyYWxsXSBXaXRoIHRoZSB2aXNpYmlsaXR5KCkgY2hlY2tzLCB7Z2V0LHNldH1femNyX2VsMSgp Cj4gICAgZGVnZW5lcmF0ZSB0byBkb2luZyBleGFjdGx5IHdoYXQgdGhlIGNvbW1vbiBjb2RlIGRv ZXMsIHNvIGRyb3AgdGhlbS4KPgo+ICAgIFRoZSBJRF9BQTY0WkZSMF9FTDEgaGFuZGxlcnMgYXJl IHN0aWxsIG5lZWRlZCB0byBwcm92aWRlIGNvbnRpdGlvbmFsCj4gICAgUkFaIGJlaGF2aW91ci4g IFRoaXMgY291bGQgYmUgbW92ZWQgdG8gdGhlIGNvbW1vbiBjb2RlIHRvbywgYnV0IHNpbmNlCj4g ICAgdGhpcyBpcyBhIG9uZS1vZmYgY2FzZSBJIGRvbid0IGRvIHRoaXMgZm9yIG5vdy4gIFdlIGNh biBhZGRyZXNzIHRoaXMKPiAgICBsYXRlciBpZiBvdGhlciByZWdzIG5lZWQgdG8gZm9sbG93IHRo ZSBzYW1lIHBhdHRlcm4uCj4KPiAgKiBbSnVsaWVuIFRoaWVycnldIFJlc2V0IFpDUl9FTDEgdG8g YSBmaXhlZCB2YWx1ZSB1c2luZyByZXNldF92YWwKPiAgICBpbnN0ZWFkIG9mIHVzaW5nIHJlbHlp bmcgb24gcmVzZXRfdW5rbm93bigpIGhvbm91cmluZyBzZXQgYml0cyBpbiB2YWwKPiAgICBhcyBS RVMwLgo+Cj4gICAgTW9zdCBvZiB0aGUgYml0cyBpbiBaQ1JfRUwxIGFyZSBSRVMwIGFueXdheSwg YW5kIG1hbnkgaW1wbGVtZW50YXRpb25zCj4gICAgb2YgU1ZFIHdpbGwgc3VwcG9ydCBsYXJnZXIg dmVjdG9ycyB0aGFuIDEyOCBiaXRzLCBzbyAwIHNlZW1zIGFzIGdvb2QKPiAgICBhIHZhbHVlIGFz IGFueSB0byBleHBvc2UgZ3Vlc3RzIHRoYXQgZm9yZ2V0IHRvIGluaXRpYWxpc2UgdGhpcwo+ICAg IHJlZ2lzdGVyIHByb3Blcmx5Lgo+IC0tLQo+ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9o b3N0LmggfCAgMSArCj4gIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmggICB8ICAzICsr Cj4gIGFyY2gvYXJtNjQva3ZtL2Zwc2ltZC5jICAgICAgICAgICB8ICA5ICsrKystCj4gIGFyY2gv YXJtNjQva3ZtL2h5cC9zd2l0Y2guYyAgICAgICB8ICAzICsrCj4gIGFyY2gvYXJtNjQva3ZtL3N5 c19yZWdzLmMgICAgICAgICB8IDgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQo+ICA1IGZpbGVzIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0p Cj4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCj4gaW5kZXggYWQ0ZjdmMC4uMjJjZjQ4NCAx MDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiArKysgYi9h cmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiBAQCAtMTIxLDYgKzEyMSw3IEBAIGVu dW0gdmNwdV9zeXNyZWcgewo+ICAJU0NUTFJfRUwxLAkvKiBTeXN0ZW0gQ29udHJvbCBSZWdpc3Rl ciAqLwo+ICAJQUNUTFJfRUwxLAkvKiBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciAqLwo+ICAJ Q1BBQ1JfRUwxLAkvKiBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbCAqLwo+ICsJWkNSX0VMMSwJ LyogU1ZFIENvbnRyb2wgKi8KPiAgCVRUQlIwX0VMMSwJLyogVHJhbnNsYXRpb24gVGFibGUgQmFz ZSBSZWdpc3RlciAwICovCj4gIAlUVEJSMV9FTDEsCS8qIFRyYW5zbGF0aW9uIFRhYmxlIEJhc2Ug UmVnaXN0ZXIgMSAqLwo+ICAJVENSX0VMMSwJLyogVHJhbnNsYXRpb24gQ29udHJvbCBSZWdpc3Rl ciAqLwo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oIGIvYXJj aC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAo+IGluZGV4IDViMjY3ZGUuLjRkNjI2MmQgMTAw NjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNyZWcuaAo+ICsrKyBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20vc3lzcmVnLmgKPiBAQCAtNDU0LDYgKzQ1NCw5IEBACj4gICNkZWZp bmUgU1lTX0lDSF9MUjE0X0VMMgkJX19TWVNfX0xSOF9FTDIoNikKPiAgI2RlZmluZSBTWVNfSUNI X0xSMTVfRUwyCQlfX1NZU19fTFI4X0VMMig3KQo+Cj4gKy8qIFZIRSBlbmNvZGluZ3MgZm9yIGFy Y2hpdGVjdHVyYWwgRUwwLzEgc3lzdGVtIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIFNZU19aQ1Jf RUwxMgkJCXN5c19yZWcoMywgNSwgMSwgMiwgMCkKPiArCj4gIC8qIENvbW1vbiBTQ1RMUl9FTHgg ZmxhZ3MuICovCj4gICNkZWZpbmUgU0NUTFJfRUx4X0RTU0JTCShfQklUVUwoNDQpKQo+ICAjZGVm aW5lIFNDVExSX0VMeF9FTklBCShfQklUVUwoMzEpKQo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0 L2t2bS9mcHNpbWQuYyBiL2FyY2gvYXJtNjQva3ZtL2Zwc2ltZC5jCj4gaW5kZXggMWNmNGYwMi4u NzA1M2JmNCAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9mcHNpbWQuYwo+ICsrKyBiL2Fy Y2gvYXJtNjQva3ZtL2Zwc2ltZC5jCj4gQEAgLTEwMywxNCArMTAzLDIxIEBAIHZvaWQga3ZtX2Fy Y2hfdmNwdV9jdHhzeW5jX2ZwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiAgdm9pZCBrdm1fYXJj aF92Y3B1X3B1dF9mcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gIHsKPiAgCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gKwlib29sIGhvc3RfaGFzX3N2ZSA9IHN5c3RlbV9zdXBwb3J0c19zdmUoKTsK PiArCWJvb2wgZ3Vlc3RfaGFzX3N2ZSA9IHZjcHVfaGFzX3N2ZSh2Y3B1KTsKPgo+ICAJbG9jYWxf aXJxX3NhdmUoZmxhZ3MpOwo+Cj4gIAlpZiAodmNwdS0+YXJjaC5mbGFncyAmIEtWTV9BUk02NF9G UF9FTkFCTEVEKSB7Cj4gKwkJdTY0ICpndWVzdF96Y3IgPSAmdmNwdS0+YXJjaC5jdHh0LnN5c19y ZWdzW1pDUl9FTDFdOwo+ICsKCklzIHRoaXMganVzdCB0byBhdm9pZDoKCiAgIHZjcHUtPmFyY2gu Y3R4dC5zeXNfcmVnc1taQ1JfRUwxXSA9IHJlYWRfc3lzcmVnX3MoU1lTX1pDUl9FTDEyKTsKCmlu IGZhY3Qgd291bGRuJ3Q6CgogICBfX3ZjcHVfc3lzX3JlZyh2Y3B1LFpDUl9FTDEpID0gcmVhZF9z eXNyZWdfcyhTWVNfWkNSX0VMMTIpOwoKZG8/Cgo+ICAJCS8qIENsZWFuIGd1ZXN0IEZQIHN0YXRl IHRvIG1lbW9yeSBhbmQgaW52YWxpZGF0ZSBjcHUgdmlldyAqLwo+ICAJCWZwc2ltZF9zYXZlKCk7 Cj4gIAkJZnBzaW1kX2ZsdXNoX2NwdV9zdGF0ZSgpOwo+IC0JfSBlbHNlIGlmIChzeXN0ZW1fc3Vw cG9ydHNfc3ZlKCkpIHsKPiArCj4gKwkJaWYgKGd1ZXN0X2hhc19zdmUpCj4gKwkJCSpndWVzdF96 Y3IgPSByZWFkX3N5c3JlZ19zKFNZU19aQ1JfRUwxMik7Cj4gKwl9IGVsc2UgaWYgKGhvc3RfaGFz X3N2ZSkgewo+ICAJCS8qCj4gIAkJICogVGhlIEZQU0lNRC9TVkUgc3RhdGUgaW4gdGhlIENQVSBo YXMgbm90IGJlZW4gdG91Y2hlZCwgYW5kIHdlCj4gIAkJICogaGF2ZSBTVkUgKGFuZCBWSEUpOiBD UEFDUl9FTDEgKGFsaWFzIENQVFJfRUwyKSBoYXMgYmVlbgo+IGRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2t2bS9oeXAvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvc3dpdGNoLmMKPiBpbmRl eCAzNTYzZmU2Li45ZDQ2MDY2IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9zd2l0 Y2guYwo+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9zd2l0Y2guYwo+IEBAIC0zNTEsNiArMzUx LDkgQEAgc3RhdGljIGJvb2wgX19oeXBfdGV4dCBfX2h5cF9zd2l0Y2hfZnBzaW1kKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSkKPgo+ICAJX19mcHNpbWRfcmVzdG9yZV9zdGF0ZSgmdmNwdS0+YXJjaC5j dHh0LmdwX3JlZ3MuZnBfcmVncyk7Cj4KPiArCWlmICh2Y3B1X2hhc19zdmUodmNwdSkpCj4gKwkJ d3JpdGVfc3lzcmVnX3ModmNwdS0+YXJjaC5jdHh0LnN5c19yZWdzW1pDUl9FTDFdLCBTWVNfWkNS X0VMMTIpOwo+ICsKCl9fdmNwdV9zeXNfcmVnPwoKPiAgCS8qIFNraXAgcmVzdG9yaW5nIGZwZXhj MzIgZm9yIEFBcmNoNjQgZ3Vlc3RzICovCj4gIAlpZiAoIShyZWFkX3N5c3JlZyhoY3JfZWwyKSAm IEhDUl9SVykpCj4gIAkJd3JpdGVfc3lzcmVnKHZjcHUtPmFyY2guY3R4dC5zeXNfcmVnc1tGUEVY QzMyX0VMMl0sCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNo L2FybTY0L2t2bS9zeXNfcmVncy5jCj4gaW5kZXggYzg2YTdiMC4uMDllOWIwNiAxMDA2NDQKPiAt LS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCj4gKysrIGIvYXJjaC9hcm02NC9rdm0vc3lz X3JlZ3MuYwo+IEBAIC0xMDUxLDEwICsxMDUxLDcgQEAgc3RhdGljIHU2NCByZWFkX2lkX3JlZyhj b25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gIAkJCSAodTMyKXItPkNSbiwgKHUzMilyLT5D Um0sICh1MzIpci0+T3AyKTsKPiAgCXU2NCB2YWwgPSByYXogPyAwIDogcmVhZF9zYW5pdGlzZWRf ZnRyX3JlZyhpZCk7Cj4KPiAtCWlmIChpZCA9PSBTWVNfSURfQUE2NFBGUjBfRUwxKSB7Cj4gLQkJ aWYgKHZhbCAmICgweGZVTCA8PCBJRF9BQTY0UEZSMF9TVkVfU0hJRlQpKQo+IC0JCQlrdm1fZGVi dWcoIlNWRSB1bnN1cHBvcnRlZCBmb3IgZ3Vlc3RzLCBzdXBwcmVzc2luZ1xuIik7Cj4gLQo+ICsJ aWYgKGlkID09IFNZU19JRF9BQTY0UEZSMF9FTDEgJiYgIXZjcHVfaGFzX3N2ZSh2Y3B1KSkgewo+ ICAJCXZhbCAmPSB+KDB4ZlVMIDw8IElEX0FBNjRQRlIwX1NWRV9TSElGVCk7Cj4gIAl9IGVsc2Ug aWYgKGlkID09IFNZU19JRF9BQTY0SVNBUjFfRUwxKSB7Cj4gIAkJY29uc3QgdTY0IHB0cmF1dGhf bWFzayA9ICgweGZVTCA8PCBJRF9BQTY0SVNBUjFfQVBBX1NISUZUKSB8Cj4gQEAgLTExMDEsNiAr MTA5OCw4MSBAQCBzdGF0aWMgaW50IHJlZ19mcm9tX3VzZXIodTY0ICp2YWwsIGNvbnN0IHZvaWQg X191c2VyICp1YWRkciwgdTY0IGlkKTsKPiAgc3RhdGljIGludCByZWdfdG9fdXNlcih2b2lkIF9f dXNlciAqdWFkZHIsIGNvbnN0IHU2NCAqdmFsLCB1NjQgaWQpOwo+ICBzdGF0aWMgdTY0IHN5c19y ZWdfdG9faW5kZXgoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnKTsKPgo+ICsvKiBWaXNp YmlsaXR5IG92ZXJyaWRlcyBmb3IgU1ZFLXNwZWNpZmljIGNvbnRyb2wgcmVnaXN0ZXJzICovCj4g K3N0YXRpYyB1bnNpZ25lZCBpbnQgc3ZlX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpCj4gK3sKPiAr CWlmICh2Y3B1X2hhc19zdmUodmNwdSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIFJF R19ISURERU5fVVNFUiB8IFJFR19ISURERU5fR1VFU1Q7Cj4gK30KPiArCj4gKy8qIFZpc2liaWxp dHkgb3ZlcnJpZGVzIGZvciBTVkUtc3BlY2lmaWMgSUQgcmVnaXN0ZXJzICovCj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgc3ZlX2lkX3Zpc2liaWxpdHkoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LAo+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpCj4gK3sKPiArCWlm ICh2Y3B1X2hhc19zdmUodmNwdSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIFJFR19I SURERU5fVVNFUjsKPiArfQo+ICsKPiArLyogR2VuZXJhdGUgdGhlIGVtdWxhdGVkIElEX0FBNjRa RlIwX0VMMSB2YWx1ZSBleHBvc2VkIHRvIHRoZSBndWVzdCAqLwo+ICtzdGF0aWMgdTY0IGd1ZXN0 X2lkX2FhNjR6ZnIwX2VsMShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gK3sKPiArCWlm ICghdmNwdV9oYXNfc3ZlKHZjcHUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiByZWFk X3Nhbml0aXNlZF9mdHJfcmVnKFNZU19JRF9BQTY0WkZSMF9FTDEpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBhY2Nlc3NfaWRfYWE2NHpmcjBfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiAr CQkJCSAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBz eXNfcmVnX2Rlc2MgKnJkKQo+ICt7Cj4gKwlpZiAocC0+aXNfd3JpdGUpCj4gKwkJcmV0dXJuIHdy aXRlX3RvX3JlYWRfb25seSh2Y3B1LCBwLCByZCk7Cj4gKwo+ICsJcC0+cmVndmFsID0gZ3Vlc3Rf aWRfYWE2NHpmcjBfZWwxKHZjcHUpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZ2V0X2lkX2FhNjR6ZnIwX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gKwkJY29u c3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsCj4gKwkJY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVn ICpyZWcsIHZvaWQgX191c2VyICp1YWRkcikKPiArewo+ICsJdTY0IHZhbDsKPiArCj4gKwlpZiAo IXZjcHVfaGFzX3N2ZSh2Y3B1KSkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwl2YWwgPSBn dWVzdF9pZF9hYTY0emZyMF9lbDEodmNwdSk7Cj4gKwlyZXR1cm4gcmVnX3RvX3VzZXIodWFkZHIs ICZ2YWwsIHJlZy0+aWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNldF9pZF9hYTY0emZyMF9l bDEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ICsJCWNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mg KnJkLAo+ICsJCWNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnLCB2b2lkIF9fdXNlciAqdWFk ZHIpCj4gK3sKPiArCWNvbnN0IHU2NCBpZCA9IHN5c19yZWdfdG9faW5kZXgocmQpOwo+ICsJaW50 IGVycjsKPiArCXU2NCB2YWw7Cj4gKwo+ICsJaWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpCj4gKwkJ cmV0dXJuIC1FTk9FTlQ7Cj4gKwo+ICsJZXJyID0gcmVnX2Zyb21fdXNlcigmdmFsLCB1YWRkciwg aWQpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qIFRoaXMgaXMgd2hh dCB3ZSBtZWFuIGJ5IGludmFyaWFudDogeW91IGNhbid0IGNoYW5nZSBpdC4gKi8KPiArCWlmICh2 YWwgIT0gZ3Vlc3RfaWRfYWE2NHpmcjBfZWwxKHZjcHUpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBjcHVmZWF0dXJlIElEIHJlZ2lz dGVyIHVzZXIgYWNjZXNzb3JzCj4gICAqCj4gQEAgLTEzNDYsNyArMTQxOCw3IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHsKPiAgCUlEX1NBTklU SVNFRChJRF9BQTY0UEZSMV9FTDEpLAo+ICAJSURfVU5BTExPQ0FURUQoNCwyKSwKPiAgCUlEX1VO QUxMT0NBVEVEKDQsMyksCj4gLQlJRF9VTkFMTE9DQVRFRCg0LDQpLAo+ICsJeyBTWVNfREVTQyhT WVNfSURfQUE2NFpGUjBfRUwxKSwgYWNjZXNzX2lkX2FhNjR6ZnIwX2VsMSwgLmdldF91c2VyID0g Z2V0X2lkX2FhNjR6ZnIwX2VsMSwgLnNldF91c2VyID0gc2V0X2lkX2FhNjR6ZnIwX2VsMSwgLnZp c2liaWxpdHkgPSBzdmVfaWRfdmlzaWJpbGl0eSB9LAoKbG9uZyBsaW5lLi4uCgo+ICAJSURfVU5B TExPQ0FURUQoNCw1KSwKPiAgCUlEX1VOQUxMT0NBVEVEKDQsNiksCj4gIAlJRF9VTkFMTE9DQVRF RCg0LDcpLAo+IEBAIC0xMzgzLDYgKzE0NTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19y ZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7Cj4KPiAgCXsgU1lTX0RFU0MoU1lTX1NDVExSX0VM MSksIGFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgU0NUTFJfRUwxLCAweDAwQzUwMDc4IH0sCj4g IAl7IFNZU19ERVNDKFNZU19DUEFDUl9FTDEpLCBOVUxMLCByZXNldF92YWwsIENQQUNSX0VMMSwg MCB9LAo+ICsJeyBTWVNfREVTQyhTWVNfWkNSX0VMMSksIE5VTEwsIHJlc2V0X3ZhbCwgWkNSX0VM MSwgMCwgLnZpc2liaWxpdHkgPSBzdmVfdmlzaWJpbGl0eSB9LAo+ICAJeyBTWVNfREVTQyhTWVNf VFRCUjBfRUwxKSwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdW5rbm93biwgVFRCUjBfRUwxIH0sCj4g IAl7IFNZU19ERVNDKFNZU19UVEJSMV9FTDEpLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF91bmtub3du LCBUVEJSMV9FTDEgfSwKPiAgCXsgU1lTX0RFU0MoU1lTX1RDUl9FTDEpLCBhY2Nlc3Nfdm1fcmVn LCByZXNldF92YWwsIFRDUl9FTDEsIDAgfSwKCk1pbm9yIG5pdHMgYXNpZGU6CgpSZXZpZXdlZC1i eTogQWxleCBCZW5uw6llIDxhbGV4LmJlbm5lZUBsaW5hcm8ub3JnPgoKLS0KQWxleCBCZW5uw6ll Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBt YWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNz LmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=