From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [RFC PATCH v2 17/23] arm64/sve: In-kernel vector length availability query interface Date: Wed, 21 Nov 2018 16:46:47 +0000 Message-ID: <87h8gaidjc.fsf@linaro.org> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-18-git-send-email-Dave.Martin@arm.com> <87in0qiexh.fsf@linaro.org> <20181121163525.GD3505@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 217BB4A2EB for ; Wed, 21 Nov 2018 11:46:51 -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 5xNk6UVm3T9O for ; Wed, 21 Nov 2018 11:46:50 -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 19E7949F94 for ; Wed, 21 Nov 2018 11:46:50 -0500 (EST) Received: by mail-wm1-f68.google.com with SMTP id u13-v6so6455470wmc.4 for ; Wed, 21 Nov 2018 08:46:50 -0800 (PST) In-reply-to: <20181121163525.GD3505@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+IE9uIFdlZCwgTm92 IDIxLCAyMDE4IGF0IDA0OjE2OjQyUE0gKzAwMDAsIEFsZXggQmVubsOpZSB3cm90ZToKPj4KPj4g RGF2ZSBNYXJ0aW4gPERhdmUuTWFydGluQGFybS5jb20+IHdyaXRlczoKPj4KPj4gPiBLVk0gd2ls bCBuZWVkIHRvIGludGVycm9nYXRlIHRoZSBzZXQgb2YgU1ZFIHZlY3RvciBsZW5ndGhzCj4+ID4g YXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uCj4+ID4KPj4gPiBUaGlzIHBhdGNoIGV4cG9zZXMgdGhl IHJlbGV2YW50IGJpdHMgdG8gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBhCj4+ID4gc3ZlX3ZxX2F2 YWlsYWJsZSgpIGhlbHBlciB0byBjaGVjayB3aGV0aGVyIGEgcGFydGljdWxhciB2ZWN0b3IKPj4g PiBsZW5ndGggaXMgc3VwcG9ydGVkLgo+PiA+Cj4+ID4gdnFfdG9fYml0KCkgYW5kIGJpdF90b192 cSgpIGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZXNlCj4+ID4gZnVuY3Rpb25z LCBzbyB0aGV5IGFyZSBnaXZlbiBhIF9fIHByZWZpeCB0byB3YXJuIHBlb3BsZSBub3QgdG8gdXNl Cj4+ID4gdGhlbSB1bmxlc3MgdGhleSByZWFsbHkga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nLgo+ Pgo+PiBQZXJzb25hbGx5IEkgd291bGRuJ3QgaGF2ZSBib3RoZXJlZCB3aXRoIHRoZSBfXyBidXQg d2hhdGV2ZXI6Cj4+Cj4+IFJldmlld2VkLWJ5OiBBbGV4IEJlbm7DqWUgPGFsZXguYmVubmVlQGxp bmFyby5vcmc+Cj4KPiBPSywgdGhhbmtzCj4KPiBJJ2xsIHByb2JhYmx5IGtlZXAgdGhlIF9fIHVu bGVzcyBzb21lYm9keSBlbHNlIG9iamVjdHMsIGJ1dCBpZiB5b3UgZmVlbAo+IHN0cm9uZ2x5IEkg Y291bGQgZ2V0IHJpZCBvZiBpdC4KCm5haCAtIGl0J3MganVzdCBhIHBlcnNvbmFsIG9waW5pb24u Li4KCj4gUGVyaGFwcyBJIHNpbXBseSBzaG91bGRuJ3QgaGF2ZSBjYWxsZWQgYXR0ZW50aW9uIHRv IGl0IGluIHRoZSBjb21taXQKPiBtZXNzYWdlIDspCgpQc3ljaG9sb2dpY2FsIHByaW1pbmcgOy0p Cgo+Cj4gQ2hlZXJzCj4gLS0tRGF2ZQo+Cj4+Cj4+ID4KPj4gPiBTaWduZWQtb2ZmLWJ5OiBEYXZl IE1hcnRpbiA8RGF2ZS5NYXJ0aW5AYXJtLmNvbT4KPj4gPiAtLS0KPj4gPiAgYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9mcHNpbWQuaCB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ ID4gIGFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jICAgICAgfCAzNSArKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMo KyksIDI3IGRlbGV0aW9ucygtKQo+PiA+Cj4+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5j bHVkZS9hc20vZnBzaW1kLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Zwc2ltZC5oCj4+ID4g aW5kZXggZGY3YTE0My4uYWQ2ZDJlNCAxMDA2NDQKPj4gPiAtLS0gYS9hcmNoL2FybTY0L2luY2x1 ZGUvYXNtL2Zwc2ltZC5oCj4+ID4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9mcHNpbWQu aAo+PiA+IEBAIC0yNCwxMCArMjQsMTMgQEAKPj4gPgo+PiA+ICAjaWZuZGVmIF9fQVNTRU1CTFlf Xwo+PiA+Cj4+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KPj4gPiAgI2luY2x1ZGUgPGxp bnV4L2J1aWxkX2J1Zy5oPgo+PiA+ICsjaW5jbHVkZSA8bGludXgvYnVnLmg+Cj4+ID4gICNpbmNs dWRlIDxsaW51eC9jYWNoZS5oPgo+PiA+ICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+PiA+ICAj aW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Cj4+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ PiA+Cj4+ID4gICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX0NPTVBB VCkKPj4gPiAgLyogTWFza3MgZm9yIGV4dHJhY3RpbmcgdGhlIEZQU1IgYW5kIEZQQ1IgZnJvbSB0 aGUgRlBTQ1IgKi8KPj4gPiBAQCAtODksNiArOTIsMzIgQEAgZXh0ZXJuIHU2NCByZWFkX3pjcl9m ZWF0dXJlcyh2b2lkKTsKPj4gPgo+PiA+ICBleHRlcm4gaW50IF9fcm9fYWZ0ZXJfaW5pdCBzdmVf bWF4X3ZsOwo+PiA+ICBleHRlcm4gaW50IF9fcm9fYWZ0ZXJfaW5pdCBzdmVfbWF4X3ZpcnR1YWxp c2FibGVfdmw7Cj4+ID4gKy8qIFNldCBvZiBhdmFpbGFibGUgdmVjdG9yIGxlbmd0aHMsIGFzIHZx X3RvX2JpdCh2cSk6ICovCj4+ID4gK2V4dGVybiBfX3JvX2FmdGVyX2luaXQgREVDTEFSRV9CSVRN QVAoc3ZlX3ZxX21hcCwgU1ZFX1ZRX01BWCk7Cj4+ID4gKwo+PiA+ICsvKgo+PiA+ICsgKiBIZWxw ZXJzIHRvIHRyYW5zbGF0ZSBiaXQgaW5kaWNlcyBpbiBzdmVfdnFfbWFwIHRvIFZRIHZhbHVlcyAo YW5kCj4+ID4gKyAqIHZpY2UgdmVyc2EpLiAgVGhpcyBhbGxvd3MgZmluZF9uZXh0X2JpdCgpIHRv IGJlIHVzZWQgdG8gZmluZCB0aGUKPj4gPiArICogX21heGltdW1fIFZRIG5vdCBleGNlZWRpbmcg YSBjZXJ0YWluIHZhbHVlLgo+PiA+ICsgKi8KPj4gPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQgX192cV90b19iaXQodW5zaWduZWQgaW50IHZxKQo+PiA+ICt7Cj4+ID4gKwlyZXR1cm4gU1ZF X1ZRX01BWCAtIHZxOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBfX2JpdF90b192cSh1bnNpZ25lZCBpbnQgYml0KQo+PiA+ICt7Cj4KPiBbLi4uXQoKCi0t CkFsZXggQmVubsOpZQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0 cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Wed, 21 Nov 2018 16:46:47 +0000 Subject: [RFC PATCH v2 17/23] arm64/sve: In-kernel vector length availability query interface In-Reply-To: <20181121163525.GD3505@e103592.cambridge.arm.com> References: <1538141967-15375-1-git-send-email-Dave.Martin@arm.com> <1538141967-15375-18-git-send-email-Dave.Martin@arm.com> <87in0qiexh.fsf@linaro.org> <20181121163525.GD3505@e103592.cambridge.arm.com> Message-ID: <87h8gaidjc.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Dave Martin writes: > On Wed, Nov 21, 2018 at 04:16:42PM +0000, Alex Benn?e wrote: >> >> Dave Martin writes: >> >> > KVM will need to interrogate the set of SVE vector lengths >> > available on the system. >> > >> > This patch exposes the relevant bits to the kernel, along with a >> > sve_vq_available() helper to check whether a particular vector >> > length is supported. >> > >> > vq_to_bit() and bit_to_vq() are not intended for use outside these >> > functions, so they are given a __ prefix to warn people not to use >> > them unless they really know what they are doing. >> >> Personally I wouldn't have bothered with the __ but whatever: >> >> Reviewed-by: Alex Benn?e > > OK, thanks > > I'll probably keep the __ unless somebody else objects, but if you feel > strongly I could get rid of it. nah - it's just a personal opinion... > Perhaps I simply shouldn't have called attention to it in the commit > message ;) Psychological priming ;-) > > Cheers > ---Dave > >> >> > >> > Signed-off-by: Dave Martin >> > --- >> > arch/arm64/include/asm/fpsimd.h | 29 +++++++++++++++++++++++++++++ >> > arch/arm64/kernel/fpsimd.c | 35 ++++++++--------------------------- >> > 2 files changed, 37 insertions(+), 27 deletions(-) >> > >> > diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h >> > index df7a143..ad6d2e4 100644 >> > --- a/arch/arm64/include/asm/fpsimd.h >> > +++ b/arch/arm64/include/asm/fpsimd.h >> > @@ -24,10 +24,13 @@ >> > >> > #ifndef __ASSEMBLY__ >> > >> > +#include >> > #include >> > +#include >> > #include >> > #include >> > #include >> > +#include >> > >> > #if defined(__KERNEL__) && defined(CONFIG_COMPAT) >> > /* Masks for extracting the FPSR and FPCR from the FPSCR */ >> > @@ -89,6 +92,32 @@ extern u64 read_zcr_features(void); >> > >> > extern int __ro_after_init sve_max_vl; >> > extern int __ro_after_init sve_max_virtualisable_vl; >> > +/* Set of available vector lengths, as vq_to_bit(vq): */ >> > +extern __ro_after_init DECLARE_BITMAP(sve_vq_map, SVE_VQ_MAX); >> > + >> > +/* >> > + * Helpers to translate bit indices in sve_vq_map to VQ values (and >> > + * vice versa). This allows find_next_bit() to be used to find the >> > + * _maximum_ VQ not exceeding a certain value. >> > + */ >> > +static inline unsigned int __vq_to_bit(unsigned int vq) >> > +{ >> > + return SVE_VQ_MAX - vq; >> > +} >> > + >> > +static inline unsigned int __bit_to_vq(unsigned int bit) >> > +{ > > [...] -- Alex Benn?e