From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [RFC PATCH v2 13/23] KVM: arm64/sve: Context switch the SVE registers Date: Tue, 20 Nov 2018 12:25:12 +0000 Message-ID: <87o9akhr6f.fsf@linaro.org> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-14-git-send-email-Dave.Martin@arm.com> <87sgzxhvny.fsf@linaro.org> <20181119170303.GX3505@e103592.cambridge.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 BF2CE4A2F8 for ; Tue, 20 Nov 2018 07:25:16 -0500 (EST) 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 Ei34-NLf0mEn for ; Tue, 20 Nov 2018 07:25:15 -0500 (EST) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 725AA4A2E5 for ; Tue, 20 Nov 2018 07:25:15 -0500 (EST) Received: by mail-wm1-f68.google.com with SMTP id r63-v6so1939290wma.4 for ; Tue, 20 Nov 2018 04:25:15 -0800 (PST) In-reply-to: <20181119170303.GX3505@e103592.cambridge.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 , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org List-Id: kvmarm@lists.cs.columbia.edu CkRhdmUgTWFydGluIDxEYXZlLk1hcnRpbkBhcm0uY29tPiB3cml0ZXM6Cgo+IE9uIE1vbiwgTm92 IDE5LCAyMDE4IGF0IDA0OjM2OjAxUE0gKzAwMDAsIEFsZXggQmVubsOpZSB3cm90ZToKPj4KPj4g RGF2ZSBNYXJ0aW4gPERhdmUuTWFydGluQGFybS5jb20+IHdyaXRlczoKPj4KPj4gPiBJbiBvcmRl ciB0byBnaXZlIGVhY2ggdmNwdSBpdHMgb3duIHZpZXcgb2YgdGhlIFNWRSByZWdpc3RlcnMsIHRo aXMKPj4gPiBwYXRjaCBhZGRzIGNvbnRleHQgc3RvcmFnZSB2aWEgYSBuZXcgc3ZlX3N0YXRlIHBv aW50ZXIgaW4gc3RydWN0Cj4+ID4gdmNwdV9hcmNoLiAgQW4gYWRkaXRpb25hbCBtZW1iZXIgc3Zl X21heF92bCBpcyBhbHNvIGFkZGVkIGZvciBlYWNoCj4+ID4gdmNwdSwgdG8gZGV0ZXJtaW5lIHRo ZSBtYXhpbXVtIHZlY3RvciBsZW5ndGggdmlzaWJsZSB0byB0aGUgZ3Vlc3QKPj4gPiBhbmQgdGh1 cyB0aGUgdmFsdWUgdG8gYmUgY29uZmlndXJlZCBpbiBaQ1JfRUwyLkxFTiB3aGlsZSB0aGUgaXMK Pj4gPiBhY3RpdmUuICBUaGlzIGFsc28gZGV0ZXJtaW5lcyB0aGUgbGF5b3V0IGFuZCBzaXplIG9m IHRoZSBzdG9yYWdlIGluCj4+ID4gc3ZlX3N0YXRlLCB3aGljaCBpcyByZWFkIGFuZCB3cml0dGVu IGJ5IHRoZSBzYW1lIGJhY2tlbmQgZnVuY3Rpb25zCj4+ID4gdGhhdCBhcmUgdXNlZCBmb3IgY29u dGV4dC1zd2l0Y2hpbmcgdGhlIFNWRSBzdGF0ZSBmb3IgaG9zdCB0YXNrcy4KPj4gPgo+PiA+IE9u IFNWRS1lbmFibGVkIHZjcHVzLCBTVkUgYWNjZXNzIHRyYXBzIGFyZSBub3cgaGFuZGxlZCBieSBz d2l0Y2hpbmcKPj4gPiBpbiB0aGUgdmNwdSdzIFNWRSBjb250ZXh0IGFuZCBkaXNhYmxpbmcgdGhl IHRyYXAgYmVmb3JlIHJldHVybmluZwo+PiA+IHRvIHRoZSBndWVzdC4gIE9uIG90aGVyIHZjcHVz LCB0aGUgdHJhcCBpcyBub3QgaGFuZGxlZCBhbmQgYW4gZXhpdAo+PiA+IGJhY2sgdG8gdGhlIGhv c3Qgb2NjdXJzLCB3aGVyZSB0aGUgaGFuZGxlX3N2ZSgpIGZhbGxiYWNrIHBhdGgKPj4gPiByZWZs ZWN0cyBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGJhY2sgdG8gdGhlIGd1ZXN0 LAo+PiA+IGNvbnNpc3RlbnRseSB3aXRoIHRoZSBiZWhhdmlvdXIgb2Ygbm9uLVNWRS1jYXBhYmxl IGhhcmR3YXJlIChhcyB3YXMKPj4gPiBkb25lIHVuY29uZGl0aW9uYWxseSBwcmlvciB0byB0aGlz IHBhdGNoKS4KPj4gPgo+PiA+IE5vIFNWRSBoYW5kbGluZyBpcyBhZGRlZCBvbiBub24tVkhFLW9u bHkgcGF0aHMsIHNpbmNlIFZIRSBpcyBhbgo+PiA+IGFyY2hpdGVjdHVyYWwgYW5kIEtjb25maWcg cHJlcmVxdWlzaXRlIG9mIFNWRS4KPj4gPgo+PiA+IFNpZ25lZC1vZmYtYnk6IERhdmUgTWFydGlu IDxEYXZlLk1hcnRpbkBhcm0uY29tPgo+Cj4gWy4uLl0KPgo+PiA+IGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L2t2bS9oeXAvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvc3dpdGNoLmMKPj4g PiBpbmRleCAwODVlZDA2Li45OTQxMzQ5IDEwMDY0NAo+PiA+IC0tLSBhL2FyY2gvYXJtNjQva3Zt L2h5cC9zd2l0Y2guYwo+PiA+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9zd2l0Y2guYwo+Cj4g Wy4uLl0KPgo+PiA+IEBAIC0zODAsNiArMzk4LDI2IEBAIHN0YXRpYyBib29sIF9faHlwX3RleHQg X19oeXBfc3dpdGNoX2Zwc2ltZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+ID4gIAlyZXR1cm4g dHJ1ZTsKPj4gPiAgfQo+PiA+Cj4+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBfX2h5cF90ZXh0IF9f aHlwX3RyYXBfaXNfZnBzaW1kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPj4gPiArCQkJCQkJICAg Ym9vbCBndWVzdF9oYXNfc3ZlKQo+PiA+ICt7Cj4+ID4gKwo+PiA+ICsJdTggdHJhcF9jbGFzczsK Pj4gPiArCj4+ID4gKwlpZiAoIXN5c3RlbV9zdXBwb3J0c19mcHNpbWQoKSkKPj4gPiArCQlyZXR1 cm4gZmFsc2U7Cj4+ID4gKwo+PiA+ICsJdHJhcF9jbGFzcyA9IGt2bV92Y3B1X3RyYXBfZ2V0X2Ns YXNzKHZjcHUpOwo+PiA+ICsKPj4gPiArCWlmICh0cmFwX2NsYXNzID09IEVTUl9FTHhfRUNfRlBf QVNJTUQpCj4+ID4gKwkJcmV0dXJuIHRydWU7Cj4+ID4gKwo+PiA+ICsJaWZfc3ZlIChndWVzdF9o YXNfc3ZlICYmIHRyYXBfY2xhc3MgPT0gRVNSX0VMeF9FQ19TVkUpCj4+ID4gKwkJcmV0dXJuIHRy dWU7Cj4+Cj4+IERvIHdlIHJlYWxseSBuZWVkIHRvIGNoZWNrIHRoZSBndWVzdCBoYXMgU1ZFIGJl Zm9yZSBiZWxpZXZpbmcgd2hhdCB0aGUKPj4gaGFyZHdhcmUgaXMgdGVsbGluZyB1cz8gQWNjb3Jk aW5nIHRvIHRoZSBBUk0gQVJNOgo+Pgo+PiBGb3IgRVNSX0VMeF9FQ19GUF9BU0lNRAo+Pgo+PiAg IEV4Y2x1ZGVzIGV4Y2VwdGlvbnMgcmVzdWx0aW5nIGZyb20gQ1BBQ1JfRUwxIHdoZW4gdGhlIHZh bHVlIG9mIEhDUl9FTDIuVEdFIGlzCj4+ICAgMSwgb3IgYmVjYXVzZSBTVkUgb3IgQWR2YW5jZWQg U0lNRCBhbmQgZmxvYXRpbmctcG9pbnQgYXJlIG5vdCBpbXBsZW1lbnRlZC4gVGhlc2UKPj4gICBh cmUgcmVwb3J0ZWQgd2l0aCBFQyB2YWx1ZSAwYjAwMDAwMAo+Pgo+PiBCdXQgYWxzbyBmb3IgRVNS X0VMeF9FQ19TVkUKPj4KPj4gICBBY2Nlc3MgdG8gU1ZFIGZ1bmN0aW9uYWxpdHkgdHJhcHBlZCBh cyBhIHJlc3VsdCBvZiBDUEFDUl9FTDEuWkVOLAo+PiAgIENQVFJfRUwyLlpFTiwgQ1BUUl9FTDIu VFosIG9yIENQVFJfRUwzLkVaLCB0aGF0IGlzIG5vdCByZXBvcnRlZCB1c2luZyBFQwo+PiAgIDBi MDAwMDAwLiBUaGlzIEVDIGlzIGRlZmluZWQgb25seSBpZiBTVkUgaXMgaW1wbGVtZW50ZWQKPj4K Pj4gR2l2ZW4gSSBnb3QgY29uZnVzZWQgbWF5YmUgd2UgbmVlZCBhIGNvbW1lbnQgZm9yIGNsYXJp dHk/Cj4KPiBUaGlzIGlzIG5vdCBhYm91dCBub3QgdHJ1c3RpbmcgdGhlIHZhbHVlIEVTUl9FTHhf RUNfU1ZFIG9uIG9sZGVyCj4gaGFyZHdhcmU6IGluIGVmZmVjdCBpdCBpcyByZXRyb3NwZWN0aXZl bHkgcmVzZXJ2ZWQgZm9yIHRoaXMgcHVycG9zZSBvbgo+IGFsbCBvbGRlciBhcmNoIHZlcnNpb25z LCBzbyB0aGVyZSBpcyBubyBhbWJpZ3VpdHkgYWJvdXQgd2hhdCBpdCBtZWFucy4KPiBJdCBzaG91 bGQgbmV2ZXIgYmUgb2JzZXJ2ZWQgb24gaGFyZHdhcmUgdGhhdCBkb2Vzbid0IGhhdmUgU1ZFLgo+ Cj4gUmF0aGVyLCBob3cgd2UgaGFuZGxlIHRoaXMgdHJhcCBkaWZmZXJzIGRlcGVuZGluZyBvbiB3 aGV0aGVyIHRoZSBndWVzdAo+IGlzIFNWRS1lbmFibGVkIG9yIG5vdC4gIElmIG5vdCwgdGhlbiB0 aGlzIHRyYXAgaXMgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYwo+IGZhbGxiYWNrIHBhdGggZm9yIHVu aGFuZGxlZCBndWVzdCB0cmFwcywgc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHRoaXMKPiBwYXJ0aWN1 bGFyIEVDIHZhbHVlIGV4cGxpY2l0bHkgaW4gdGhhdCBjYXNlLgo+Cj4+ICAgLyogQ2F0Y2ggZ3Vl c3RzIHdpdGhvdXQgU1ZFIGVuYWJsZWQgcnVubmluZyBvbiBTVkUgY2FwYWJsZSBoYXJkd2FyZSAq Lwo+Cj4gSSBtaWdodCB3cml0ZSBzb21ldGhpbmcgbGlrZToKPgo+IAkvKgo+IAkgKiBGb3Igc3Zl LWVubWFibGVkIGd1ZXN0cyBvbmx5LCBoYW5kbGUgU1ZFIGFjY2VzcyB2aWEgRlBTSU1ECj4gCSAq IGNvbnRleHQgaGFuZGxpbmcgY29kZS4KPiAJICovCj4KPiBEb2VzIHRoYXQgbWFrZSBzZW5zZT8g IEkgbWF5IGhhdmUgbWlzdW5kZXJzdG9vZCB5b3VyIGNvbmNlcm4gaGVyZS4KCnMvZW5tYWJsZWQv ZW5hYmxlZC8gYnV0IHllYWggdGhhdCdzIGZpbmUuCgo+Cj4gWy4uLl0KPgo+PiA+IEBAIC0zODcs NiArNDI1LDggQEAgc3RhdGljIGJvb2wgX19oeXBfdGV4dCBfX2h5cF9zd2l0Y2hfZnBzaW1kKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSkKPj4gPiAgICovCj4+ID4gIHN0YXRpYyBib29sIF9faHlwX3Rl eHQgZml4dXBfZ3Vlc3RfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2Rl KQo+PiA+ICB7Cj4+ID4gKwlib29sIGd1ZXN0X2hhc19zdmU7Cj4+ID4gKwo+PiA+ICAJaWYgKEFS TV9FWENFUFRJT05fQ09ERSgqZXhpdF9jb2RlKSAhPSBBUk1fRVhDRVBUSU9OX0lSUSkKPj4gPiAg CQl2Y3B1LT5hcmNoLmZhdWx0LmVzcl9lbDIgPSByZWFkX3N5c3JlZ19lbDIoZXNyKTsKPj4gPgo+ PiA+IEBAIC00MDQsMTAgKzQ0NCwxMSBAQCBzdGF0aWMgYm9vbCBfX2h5cF90ZXh0IGZpeHVwX2d1 ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSkKPj4gPiAgCSAq IGFuZCByZXN0b3JlIHRoZSBndWVzdCBjb250ZXh0IGxhemlseS4KPj4gPiAgCSAqIElmIEZQL1NJ TUQgaXMgbm90IGltcGxlbWVudGVkLCBoYW5kbGUgdGhlIHRyYXAgYW5kIGluamVjdCBhbgo+PiA+ ICAJICogdW5kZWZpbmVkIGluc3RydWN0aW9uIGV4Y2VwdGlvbiB0byB0aGUgZ3Vlc3QuCj4+ID4g KwkgKiBTaW1pbGFybHkgZm9yIHRyYXBwZWQgU1ZFIGFjY2Vzc2VzLgo+PiA+ICAJICovCj4+ID4g LQlpZiAoc3lzdGVtX3N1cHBvcnRzX2Zwc2ltZCgpICYmCj4+ID4gLQkgICAga3ZtX3ZjcHVfdHJh cF9nZXRfY2xhc3ModmNwdSkgPT0gRVNSX0VMeF9FQ19GUF9BU0lNRCkKPj4gPiAtCQlyZXR1cm4g X19oeXBfc3dpdGNoX2Zwc2ltZCh2Y3B1KTsKPj4gPiArCWd1ZXN0X2hhc19zdmUgPSB2Y3B1X2hh c19zdmUodmNwdSk7Cj4+Cj4+IEknbSBub3Qgc3VyZSBpZiBpdCdzIHdvcnRoIGZpc2hpbmcgdGhp cyBvdXQgaGVyZSBnaXZlbiB5b3UgYXJlIGFscmVhZHkKPj4gcGFzc2luZyB2Y3B1IGRvd24gdGhl IGNoYWluLgo+Cj4gSSB3YW50ZWQgdG8gZGlzY291cmFnZSBHQ0MgZnJvbSByZWNvbXB1dGluZyB0 aGlzLiAgSWYgeW91J3JlIGluIGEKPiBwb3NpdGlvbiB0byBkbyBzbywgY2FuIHlvdSBsb29rIGF0 IHRoZSBkaXNhc3NlbWJseSB3aXRoL3dpdGhvdXQgdGhpcwo+IGZhY3RvcmVkIG91dCBhbmQgc2Vl IHdoZXRoZXIgaXQgbWFrZXMgYSBkaWZmZXJlbmNlPwoKSG1tIGl0IGlzIGhhcmQgdG8gdGVsbC4g VGhlcmUgaXMgY29kZSBtb3Rpb24gYnV0IGZvciBzb21lIHJlYXNvbiBJJ20Kc2VlaW5nIHRoZSBz dGF0aWMganVtcCBjb2RlIHVucm9sbGVkLCBmb3IgZXhhbXBsZSAob3JpZ2luYWwgb24gbGVmdCk6 CgpfX2h5cF9zd2l0Y2hfZnBzaW1kKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19oeXBfc3dpdGNoX2Zwc2ltZCgpOgov aG9tZS9hbGV4L2xzcmMva3ZtL2xpbnV4LmdpdC9hcmNoL2FybTY0L2t2bS9oeXAvc3dpdGNoLi0t LS06MzgyICAgICAgICAgICAgICAgICAgICAgIHwgL2hvbWUvYWxleC9sc3JjL2t2bS9saW51eC5n aXQvYXJjaC9hcm02NC9rdm0vaHlwL3N3aXRjaC4tLS0tOjM4MQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID4gIC0tLS06ICB0c3QgICAgIHcwLCAjMHg0MDAwMDAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA+ICAtLS0tOiAgYi5lcSAgICAyMmMgPGZpeHVwX2d1ZXN0X2V4aXQrMHgx YTQ+ICAvLyBiLm5vbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IGFyY2hfc3RhdGlj X2JyYW5jaF9qdW1wKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAvaG9tZS9hbGV4 L2xzcmMva3ZtL2xpbnV4LmdpdC9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaDo0 NQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gIC0tLS06ICBiICAgICAgIDM4YyA8Zml4 dXBfZ3Vlc3RfZXhpdCsweDMwND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IGFyY2hf c3RhdGljX2JyYW5jaCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gL2hvbWUvYWxl eC9sc3JjL2t2bS9saW51eC5naXQvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmg6 MzEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICAtLS0tOiAgbm9wCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPiAgLS0tLTogIGIgICAgICAgMjJjIDxmaXh1cF9ndWVzdF9leGl0 KzB4MWE0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gdGVzdF9iaXQoKToKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA+IC9ob21lL2FsZXgvbHNyYy9rdm0vbGludXguZ2l0L2lu Y2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaDoxMDYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA+ICAtLS0tOiAgYWRycCAgICB4MCwgMCA8Y3B1X2h3Y2Fwcz4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA+ICAtLS0tOiAgbGRyICAgICB4MCwgW3gwXQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID4gX19oeXBfc3dpdGNoX2Zwc2ltZCgpOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID4gL2hvbWUvYWxleC9sc3JjL2t2bS9saW51eC5naXQvYXJjaC9h cm02NC9rdm0vaHlwL3N3aXRjaC4tLS0tOjM4MQogLS0tLTogIHRzdCAgICAgdzAsICMweDQwMDAw MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0tLS06ICB0c3QgICAgIHcwLCAjMHg0MDAwMDAKIC0tLS06ICBiLmVxICAgIDIzOCA8Zml4 dXBfZ3Vlc3RfZXhpdCsweDFiMD4gIC8vIGIubm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAtLS0tOiAgYi5lcSAgICAyMmMgPGZpeHVwX2d1ZXN0X2V4aXQrMHgxYTQ+ICAvLyBi Lm5vbmUKIC0tLS06ICBjYnogICAgIHcyMSwgMjM4IDxmaXh1cF9ndWVzdF9leGl0KzB4MWIwPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtLS0tOiAgdGJ6ICAgICB3Miwg IzUsIDIyYyA8Zml4dXBfZ3Vlc3RfZXhpdCsweDFhND4KL2hvbWUvYWxleC9sc3JjL2t2bS9saW51 eC5naXQvYXJjaC9hcm02NC9rdm0vaHlwL3N3aXRjaC4tLS0tOjM4MyAgICAgICAgICAgICAgICAg ICAgICB8IC9ob21lL2FsZXgvbHNyYy9rdm0vbGludXguZ2l0L2FyY2gvYXJtNjQva3ZtL2h5cC9z d2l0Y2guLS0tLTozODIKIC0tLS06ICBsZHIgICAgIHcyLCBbeDE5LCAjMjA0MF0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtLS0tOiAgbGRy ICAgICB3MiwgW3gyMCwgIzIwNDBdCiAtLS0tOiAgYWRkICAgICB4MSwgeDE5LCAjMHg0YjAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgLS0t LTogIGFkZCAgICAgeDEsIHgyMCwgIzB4NGIwCiAtLS0tOiAgbGRyICAgICB4MCwgW3gxOSwgIzIw MzJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgLS0tLTogIGxkciAgICAgeDAsIFt4MjAsICMyMDMyXQpzdmVfZmZyX29mZnNldCgpOiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3ZlX2Zmcl9vZmZzZXQoKToKClB1dCBjYWxjdWxhdGluZyBndWVzdF9oYXNfc3Zl IGF0IHRoZSB0b3Agb2YgX19oeXBfc3dpdGNoX2Zwc2ltZCBtYWtlCm1vc3Qgb2YgdGhhdCBnbyBh d2F5IGFuZCBqdXN0IG1vdmVzIHRoaW5ncyBhcm91bmQgYSBsaXR0bGUgYml0LiBTbyBJCmd1ZXNz IGl0IGNvdWxkIG1ha2VzIHNlbnNlIGZvciB0aGUgZmFzdChpc2gpIHBhdGggYWx0aG91Z2ggSSdk IGJlCmludGVyZXN0ZWQgaW4ga25vd2luZyBpZiBpdCBtYWRlIGFueSByZWFsIGRpZmZlcmVuY2Ug dG8gdGhlIG51bWJlcnMuCkFmdGVyIGFsbCB0aGUgZmlyc3QgcmVhZCBzaG91bGQgYmUgd2VsbCBj YWNoZWQgYW5kIG1vdmluZyBpdCB0aHJvdWdoIHRoZQpzdGFjayBpcyBqdXN0IGFkZGl0aW9uYWwg bWVtb3J5IGFuZCByZWdpc3RlciBwcmVzc3VyZS4KCj4+Cj4+ID4gKwlpZiAoX19oeXBfdHJhcF9p c19mcHNpbWQodmNwdSwgZ3Vlc3RfaGFzX3N2ZSkpCj4+ID4gKwkJcmV0dXJuIF9faHlwX3N3aXRj aF9mcHNpbWQodmNwdSwgZ3Vlc3RfaGFzX3N2ZSk7Cj4+ID4KPj4gPiAgCWlmICghX19wb3B1bGF0 ZV9mYXVsdF9pbmZvKHZjcHUpKQo+PiA+ICAJCXJldHVybiB0cnVlOwo+Pgo+PiBPdGhlcndpc2U6 Cj4+Cj4+IFJldmlld2VkLWJ5OiBBbGV4IEJlbm7DqWUgPGFsZXguYmVubmVlQGxpbmFyby5vcmc+ Cj4KPiBUaGFua3MKPiAtLS1EYXZlCgoKLS0KQWxleCBCZW5uw6llCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJt QGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWls bWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Tue, 20 Nov 2018 12:25:12 +0000 Subject: [RFC PATCH v2 13/23] KVM: arm64/sve: Context switch the SVE registers In-Reply-To: <20181119170303.GX3505@e103592.cambridge.arm.com> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-14-git-send-email-Dave.Martin@arm.com> <87sgzxhvny.fsf@linaro.org> <20181119170303.GX3505@e103592.cambridge.arm.com> Message-ID: <87o9akhr6f.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Dave Martin writes: > On Mon, Nov 19, 2018 at 04:36:01PM +0000, Alex Benn?e wrote: >> >> Dave Martin writes: >> >> > In order to give each vcpu its own view of the SVE registers, this >> > patch adds context storage via a new sve_state pointer in struct >> > vcpu_arch. An additional member sve_max_vl is also added for each >> > vcpu, to determine the maximum vector length visible to the guest >> > and thus the value to be configured in ZCR_EL2.LEN while the is >> > active. This also determines the layout and size of the storage in >> > sve_state, which is read and written by the same backend functions >> > that are used for context-switching the SVE state for host tasks. >> > >> > On SVE-enabled vcpus, SVE access traps are now handled by switching >> > in the vcpu's SVE context and disabling the trap before returning >> > to the guest. On other vcpus, the trap is not handled and an exit >> > back to the host occurs, where the handle_sve() fallback path >> > reflects an undefined instruction exception back to the guest, >> > consistently with the behaviour of non-SVE-capable hardware (as was >> > done unconditionally prior to this patch). >> > >> > No SVE handling is added on non-VHE-only paths, since VHE is an >> > architectural and Kconfig prerequisite of SVE. >> > >> > Signed-off-by: Dave Martin > > [...] > >> > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c >> > index 085ed06..9941349 100644 >> > --- a/arch/arm64/kvm/hyp/switch.c >> > +++ b/arch/arm64/kvm/hyp/switch.c > > [...] > >> > @@ -380,6 +398,26 @@ static bool __hyp_text __hyp_switch_fpsimd(struct kvm_vcpu *vcpu) >> > return true; >> > } >> > >> > +static inline bool __hyp_text __hyp_trap_is_fpsimd(struct kvm_vcpu *vcpu, >> > + bool guest_has_sve) >> > +{ >> > + >> > + u8 trap_class; >> > + >> > + if (!system_supports_fpsimd()) >> > + return false; >> > + >> > + trap_class = kvm_vcpu_trap_get_class(vcpu); >> > + >> > + if (trap_class == ESR_ELx_EC_FP_ASIMD) >> > + return true; >> > + >> > + if_sve (guest_has_sve && trap_class == ESR_ELx_EC_SVE) >> > + return true; >> >> Do we really need to check the guest has SVE before believing what the >> hardware is telling us? According to the ARM ARM: >> >> For ESR_ELx_EC_FP_ASIMD >> >> Excludes exceptions resulting from CPACR_EL1 when the value of HCR_EL2.TGE is >> 1, or because SVE or Advanced SIMD and floating-point are not implemented. These >> are reported with EC value 0b000000 >> >> But also for ESR_ELx_EC_SVE >> >> Access to SVE functionality trapped as a result of CPACR_EL1.ZEN, >> CPTR_EL2.ZEN, CPTR_EL2.TZ, or CPTR_EL3.EZ, that is not reported using EC >> 0b000000. This EC is defined only if SVE is implemented >> >> Given I got confused maybe we need a comment for clarity? > > This is not about not trusting the value ESR_ELx_EC_SVE on older > hardware: in effect it is retrospectively reserved for this purpose on > all older arch versions, so there is no ambiguity about what it means. > It should never be observed on hardware that doesn't have SVE. > > Rather, how we handle this trap differs depending on whether the guest > is SVE-enabled or not. If not, then this trap is handled by the generic > fallback path for unhandled guest traps, so we don't check for this > particular EC value explicitly in that case. > >> /* Catch guests without SVE enabled running on SVE capable hardware */ > > I might write something like: > > /* > * For sve-enmabled guests only, handle SVE access via FPSIMD > * context handling code. > */ > > Does that make sense? I may have misunderstood your concern here. s/enmabled/enabled/ but yeah that's fine. > > [...] > >> > @@ -387,6 +425,8 @@ static bool __hyp_text __hyp_switch_fpsimd(struct kvm_vcpu *vcpu) >> > */ >> > static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) >> > { >> > + bool guest_has_sve; >> > + >> > if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ) >> > vcpu->arch.fault.esr_el2 = read_sysreg_el2(esr); >> > >> > @@ -404,10 +444,11 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) >> > * and restore the guest context lazily. >> > * If FP/SIMD is not implemented, handle the trap and inject an >> > * undefined instruction exception to the guest. >> > + * Similarly for trapped SVE accesses. >> > */ >> > - if (system_supports_fpsimd() && >> > - kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_FP_ASIMD) >> > - return __hyp_switch_fpsimd(vcpu); >> > + guest_has_sve = vcpu_has_sve(vcpu); >> >> I'm not sure if it's worth fishing this out here given you are already >> passing vcpu down the chain. > > I wanted to discourage GCC from recomputing this. If you're in a > position to do so, can you look at the disassembly with/without this > factored out and see whether it makes a difference? Hmm it is hard to tell. There is code motion but for some reason I'm seeing the static jump code unrolled, for example (original on left): __hyp_switch_fpsimd(): __hyp_switch_fpsimd(): /home/alex/lsrc/kvm/linux.git/arch/arm64/kvm/hyp/switch.----:382 | /home/alex/lsrc/kvm/linux.git/arch/arm64/kvm/hyp/switch.----:381 > ----: tst w0, #0x400000 > ----: b.eq 22c // b.none > arch_static_branch_jump(): > /home/alex/lsrc/kvm/linux.git/arch/arm64/include/asm/jump_label.h:45 > ----: b 38c > arch_static_branch(): > /home/alex/lsrc/kvm/linux.git/arch/arm64/include/asm/jump_label.h:31 > ----: nop > ----: b 22c > test_bit(): > /home/alex/lsrc/kvm/linux.git/include/asm-generic/bitops/non-atomic.h:106 > ----: adrp x0, 0 > ----: ldr x0, [x0] > __hyp_switch_fpsimd(): > /home/alex/lsrc/kvm/linux.git/arch/arm64/kvm/hyp/switch.----:381 ----: tst w0, #0x400000 ----: tst w0, #0x400000 ----: b.eq 238 // b.none | ----: b.eq 22c // b.none ----: cbz w21, 238 | ----: tbz w2, #5, 22c /home/alex/lsrc/kvm/linux.git/arch/arm64/kvm/hyp/switch.----:383 | /home/alex/lsrc/kvm/linux.git/arch/arm64/kvm/hyp/switch.----:382 ----: ldr w2, [x19, #2040] | ----: ldr w2, [x20, #2040] ----: add x1, x19, #0x4b0 | ----: add x1, x20, #0x4b0 ----: ldr x0, [x19, #2032] | ----: ldr x0, [x20, #2032] sve_ffr_offset(): sve_ffr_offset(): Put calculating guest_has_sve at the top of __hyp_switch_fpsimd make most of that go away and just moves things around a little bit. So I guess it could makes sense for the fast(ish) path although I'd be interested in knowing if it made any real difference to the numbers. After all the first read should be well cached and moving it through the stack is just additional memory and register pressure. >> >> > + if (__hyp_trap_is_fpsimd(vcpu, guest_has_sve)) >> > + return __hyp_switch_fpsimd(vcpu, guest_has_sve); >> > >> > if (!__populate_fault_info(vcpu)) >> > return true; >> >> Otherwise: >> >> Reviewed-by: Alex Benn?e > > Thanks > ---Dave -- Alex Benn?e