From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rémi Denis-Courmont Date: Mon, 12 Jun 2023 17:32:40 +0300 Subject: [PATCH -next v21 09/27] riscv: Introduce struct/helpers to save/restore per-task Vector state In-Reply-To: <20230605110724.21391-10-andy.chiu@sifive.com> References: <20230605110724.21391-1-andy.chiu@sifive.com> <20230605110724.21391-10-andy.chiu@sifive.com> Message-ID: <5271851.rBgCu3BfMA@basile.remlab.net> List-Id: To: kvm-riscv@lists.infradead.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Le maanantaina 5. kes?kuuta 2023, 14.07.06 EEST Andy Chiu a ?crit : > @@ -32,13 +54,86 @@ static __always_inline void riscv_v_disable(void) > csr_clear(CSR_SSTATUS, SR_VS); > } > > +static __always_inline void __vstate_csr_save(struct __riscv_v_ext_state > *dest) +{ > + asm volatile ( > + "csrr %0, " __stringify(CSR_VSTART) "\n\t" > + "csrr %1, " __stringify(CSR_VTYPE) "\n\t" > + "csrr %2, " __stringify(CSR_VL) "\n\t" > + "csrr %3, " __stringify(CSR_VCSR) "\n\t" > + : "=r" (dest->vstart), "=r" (dest->vtype), "=r" (dest- >vl), > + "=r" (dest->vcsr) : :); > +} > + > +static __always_inline void __vstate_csr_restore(struct __riscv_v_ext_state > *src) +{ > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvl x0, %2, %1\n\t" > + ".option pop\n\t" > + "csrw " __stringify(CSR_VSTART) ", %0\n\t" > + "csrw " __stringify(CSR_VCSR) ", %3\n\t" > + : : "r" (src->vstart), "r" (src->vtype), "r" (src->vl), > + "r" (src->vcsr) :); > +} > + > +static inline void __riscv_v_vstate_save(struct __riscv_v_ext_state > *save_to, + void *datap) > +{ > + unsigned long vl; > + > + riscv_v_enable(); > + __vstate_csr_save(save_to); > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvli %0, x0, e8, m8, ta, ma\n\t" > + "vse8.v v0, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v8, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v16, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v24, (%1)\n\t" > + ".option pop\n\t" > + : "=&r" (vl) : "r" (datap) : "memory"); > + riscv_v_disable(); > +} Shouldn't this use `vs8r.v` rather than `vse8.v`, and do away with `vsetvli`? This seems like a textbook use case for the whole-register store instruction, no? > + > +static inline void __riscv_v_vstate_restore(struct __riscv_v_ext_state > *restore_from, + void *datap) > +{ > + unsigned long vl; > + > + riscv_v_enable(); > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvli %0, x0, e8, m8, ta, ma\n\t" > + "vle8.v v0, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v8, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v16, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v24, (%1)\n\t" > + ".option pop\n\t" > + : "=&r" (vl) : "r" (datap) : "memory"); > + __vstate_csr_restore(restore_from); > + riscv_v_disable(); > +} > + Ditto but `vl8r.v`. > #else /* ! CONFIG_RISCV_ISA_V */ > > struct pt_regs; > > static inline int riscv_v_setup_vsize(void) { return -EOPNOTSUPP; } > static __always_inline bool has_vector(void) { return false; } > +static inline bool riscv_v_vstate_query(struct pt_regs *regs) { return > false; } #define riscv_v_vsize (0) > +#define riscv_v_vstate_off(regs) do {} while (0) > +#define riscv_v_vstate_on(regs) do {} while (0) > > #endif /* CONFIG_RISCV_ISA_V */ > -- ???? ????-?????? http://www.remlab.net/ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D1618C88CB2 for ; Mon, 12 Jun 2023 14:36:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iHeW1Gt8rpeJ42uOJ8qvsI61T9rq34WmvdFQThMMCPI=; b=ZktXXGRgQSkhF0 4suWSzXfJmKPmE4BE4GYhr2V4Tb6dDCFQQ3Axf10qfIIIH5p8YcQu5Z268DtfbEbdDe4eiNtBj+Ke wAZlCfSXalGu4cCcW/zNzqEJ8EXax2YziYaUq4x5n5ta5ZZb09/acZ1g9UwzigjdB02OrvMvBNFyL QEAD+2zd7Qp6UG8/FgmI80MC29f3j7pmmqG/4MIXFPMc9S/p1EHXOot2kIcqk+/PztlQQjNw3jfZh IxPzfR1wh1MXlFYiVeyGdQkm530tTGNXtxGK/qkQPR0NW47/8U4TdBCbJeHDn9tx+Gn/phxy9QBnI S/URvxGSeTLjWniW6mYQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q8ieS-004JuJ-1k; Mon, 12 Jun 2023 14:36:12 +0000 Received: from sypressi2.dnainternet.net ([83.102.40.154]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q8ieM-004Jq5-1a; Mon, 12 Jun 2023 14:36:10 +0000 Received: from localhost (localhost [127.0.0.1]) by sypressi2.dnainternet.net (Postfix) with ESMTP id 285EF14B87; Mon, 12 Jun 2023 17:35:42 +0300 (EEST) X-Virus-Scanned: DNA Internet at dnainternet.net Received: from sypressi2.dnainternet.net ([83.102.40.154]) by localhost (sypressi2.dnainternet.net [127.0.0.1]) (DNA Internet, port 10041) with ESMTP id goenKB_nCimi; Mon, 12 Jun 2023 17:35:27 +0300 (EEST) Received: from kirsikkapuu2.dnainternet.net (kirsikkapuu2.dnainternet.net [83.102.40.52]) by sypressi2.dnainternet.net (Postfix) with ESMTP id B3EEC14C0A; Mon, 12 Jun 2023 17:33:40 +0300 (EEST) Received: from basile.localnet (87-92-194-88.rev.dnainternet.fi [87.92.194.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by kirsikkapuu2.dnainternet.net (Postfix) with ESMTPS id 723807E; Mon, 12 Jun 2023 17:32:45 +0300 (EEST) From: =?ISO-8859-1?Q?R=E9mi?= Denis-Courmont To: linux-riscv@lists.infradead.org, palmer@dabbelt.com, anup@brainfault.org, atishp@atishpatra.org, kvm-riscv@lists.infradead.org, kvm@vger.kernel.org Cc: vineetg@rivosinc.com, greentime.hu@sifive.com, guoren@linux.alibaba.com, Vincent Chen , Andy Chiu , Paul Walmsley , Albert Ou , Heiko Stuebner , Guo Ren , Conor Dooley , Andy Chiu Subject: Re: [PATCH -next v21 09/27] riscv: Introduce struct/helpers to save/restore per-task Vector state Date: Mon, 12 Jun 2023 17:32:40 +0300 Message-ID: <5271851.rBgCu3BfMA@basile.remlab.net> Organization: Remlab In-Reply-To: <20230605110724.21391-10-andy.chiu@sifive.com> References: <20230605110724.21391-1-andy.chiu@sifive.com> <20230605110724.21391-10-andy.chiu@sifive.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230612_073606_870256_446521AD X-CRM114-Status: UNSURE ( 8.49 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org TGUgbWFhbmFudGFpbmEgNS4ga2Vzw6RrdXV0YSAyMDIzLCAxNC4wNy4wNiBFRVNUIEFuZHkgQ2hp dSBhIMOpY3JpdCA6Cj4gQEAgLTMyLDEzICs1NCw4NiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5l IHZvaWQgcmlzY3Zfdl9kaXNhYmxlKHZvaWQpCj4gIAljc3JfY2xlYXIoQ1NSX1NTVEFUVVMsIFNS X1ZTKTsKPiAgfQo+IAo+ICtzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX192c3RhdGVfY3Ny X3NhdmUoc3RydWN0IF9fcmlzY3Zfdl9leHRfc3RhdGUKPiAqZGVzdCkgK3sKPiArCWFzbSB2b2xh dGlsZSAoCj4gKwkJImNzcnIJJTAsICIgX19zdHJpbmdpZnkoQ1NSX1ZTVEFSVCkgIlxuXHQiCj4g KwkJImNzcnIJJTEsICIgX19zdHJpbmdpZnkoQ1NSX1ZUWVBFKSAiXG5cdCIKPiArCQkiY3Nycgkl MiwgIiBfX3N0cmluZ2lmeShDU1JfVkwpICJcblx0Igo+ICsJCSJjc3JyCSUzLCAiIF9fc3RyaW5n aWZ5KENTUl9WQ1NSKSAiXG5cdCIKPiArCQk6ICI9ciIgKGRlc3QtPnZzdGFydCksICI9ciIgKGRl c3QtPnZ0eXBlKSwgIj1yIiAoZGVzdC0KPnZsKSwKPiArCQkgICI9ciIgKGRlc3QtPnZjc3IpIDog Oik7Cj4gK30KPiArCj4gK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3ZzdGF0ZV9jc3Jf cmVzdG9yZShzdHJ1Y3QgX19yaXNjdl92X2V4dF9zdGF0ZQo+ICpzcmMpICt7Cj4gKwlhc20gdm9s YXRpbGUgKAo+ICsJCSIub3B0aW9uIHB1c2hcblx0Igo+ICsJCSIub3B0aW9uIGFyY2gsICt2XG5c dCIKPiArCQkidnNldHZsCSB4MCwgJTIsICUxXG5cdCIKPiArCQkiLm9wdGlvbiBwb3Bcblx0Igo+ ICsJCSJjc3J3CSIgX19zdHJpbmdpZnkoQ1NSX1ZTVEFSVCkgIiwgJTBcblx0Igo+ICsJCSJjc3J3 CSIgX19zdHJpbmdpZnkoQ1NSX1ZDU1IpICIsICUzXG5cdCIKPiArCQk6IDogInIiIChzcmMtPnZz dGFydCksICJyIiAoc3JjLT52dHlwZSksICJyIiAoc3JjLT52bCksCj4gKwkJICAgICJyIiAoc3Jj LT52Y3NyKSA6KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIF9fcmlzY3Zfdl92c3Rh dGVfc2F2ZShzdHJ1Y3QgX19yaXNjdl92X2V4dF9zdGF0ZQo+ICpzYXZlX3RvLCArCQkJCQkgdm9p ZCAqZGF0YXApCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgdmw7Cj4gKwo+ICsJcmlzY3Zfdl9lbmFi bGUoKTsKPiArCV9fdnN0YXRlX2Nzcl9zYXZlKHNhdmVfdG8pOwo+ICsJYXNtIHZvbGF0aWxlICgK PiArCQkiLm9wdGlvbiBwdXNoXG5cdCIKPiArCQkiLm9wdGlvbiBhcmNoLCArdlxuXHQiCj4gKwkJ InZzZXR2bGkJJTAsIHgwLCBlOCwgbTgsIHRhLCBtYVxuXHQiCj4gKwkJInZzZTgudgkJdjAsICgl MSlcblx0Igo+ICsJCSJhZGQJCSUxLCAlMSwgJTBcblx0Igo+ICsJCSJ2c2U4LnYJCXY4LCAoJTEp XG5cdCIKPiArCQkiYWRkCQklMSwgJTEsICUwXG5cdCIKPiArCQkidnNlOC52CQl2MTYsICglMSlc blx0Igo+ICsJCSJhZGQJCSUxLCAlMSwgJTBcblx0Igo+ICsJCSJ2c2U4LnYJCXYyNCwgKCUxKVxu XHQiCj4gKwkJIi5vcHRpb24gcG9wXG5cdCIKPiArCQk6ICI9JnIiICh2bCkgOiAiciIgKGRhdGFw KSA6ICJtZW1vcnkiKTsKPiArCXJpc2N2X3ZfZGlzYWJsZSgpOwo+ICt9CgpTaG91bGRuJ3QgdGhp cyB1c2UgYHZzOHIudmAgcmF0aGVyIHRoYW4gYHZzZTgudmAsIGFuZCBkbyBhd2F5IHdpdGggYHZz ZXR2bGlgPyAKVGhpcyBzZWVtcyBsaWtlIGEgdGV4dGJvb2sgdXNlIGNhc2UgZm9yIHRoZSB3aG9s ZS1yZWdpc3RlciBzdG9yZSBpbnN0cnVjdGlvbiwgCm5vPwoKPiArCj4gK3N0YXRpYyBpbmxpbmUg dm9pZCBfX3Jpc2N2X3ZfdnN0YXRlX3Jlc3RvcmUoc3RydWN0IF9fcmlzY3Zfdl9leHRfc3RhdGUK PiAqcmVzdG9yZV9mcm9tLCArCQkJCQkgICAgdm9pZCAKKmRhdGFwKQo+ICt7Cj4gKwl1bnNpZ25l ZCBsb25nIHZsOwo+ICsKPiArCXJpc2N2X3ZfZW5hYmxlKCk7Cj4gKwlhc20gdm9sYXRpbGUgKAo+ ICsJCSIub3B0aW9uIHB1c2hcblx0Igo+ICsJCSIub3B0aW9uIGFyY2gsICt2XG5cdCIKPiArCQki dnNldHZsaQklMCwgeDAsIGU4LCBtOCwgdGEsIG1hXG5cdCIKPiArCQkidmxlOC52CQl2MCwgKCUx KVxuXHQiCj4gKwkJImFkZAkJJTEsICUxLCAlMFxuXHQiCj4gKwkJInZsZTgudgkJdjgsICglMSlc blx0Igo+ICsJCSJhZGQJCSUxLCAlMSwgJTBcblx0Igo+ICsJCSJ2bGU4LnYJCXYxNiwgKCUxKVxu XHQiCj4gKwkJImFkZAkJJTEsICUxLCAlMFxuXHQiCj4gKwkJInZsZTgudgkJdjI0LCAoJTEpXG5c dCIKPiArCQkiLm9wdGlvbiBwb3Bcblx0Igo+ICsJCTogIj0mciIgKHZsKSA6ICJyIiAoZGF0YXAp IDogIm1lbW9yeSIpOwo+ICsJX192c3RhdGVfY3NyX3Jlc3RvcmUocmVzdG9yZV9mcm9tKTsKPiAr CXJpc2N2X3ZfZGlzYWJsZSgpOwo+ICt9Cj4gKwoKRGl0dG8gYnV0IGB2bDhyLnZgLgoKPiAgI2Vs c2UgLyogISBDT05GSUdfUklTQ1ZfSVNBX1YgICovCj4gCj4gIHN0cnVjdCBwdF9yZWdzOwo+IAo+ ICBzdGF0aWMgaW5saW5lIGludCByaXNjdl92X3NldHVwX3ZzaXplKHZvaWQpIHsgcmV0dXJuIC1F T1BOT1RTVVBQOyB9Cj4gIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBoYXNfdmVjdG9yKHZv aWQpIHsgcmV0dXJuIGZhbHNlOyB9Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCByaXNjdl92X3ZzdGF0 ZV9xdWVyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4KPiBmYWxzZTsgfSAjZGVmaW5l IHJpc2N2X3ZfdnNpemUgKDApCj4gKyNkZWZpbmUgcmlzY3Zfdl92c3RhdGVfb2ZmKHJlZ3MpCQlk byB7fSB3aGlsZSAoMCkKPiArI2RlZmluZSByaXNjdl92X3ZzdGF0ZV9vbihyZWdzKQkJCWRvIHt9 IHdoaWxlICgwKQo+IAo+ICAjZW5kaWYgLyogQ09ORklHX1JJU0NWX0lTQV9WICovCj4gCgoKLS0g CtCg0LXQvNC4INCU0ZHQvdC4LdCa0YPRgNC80L7QvQpodHRwOi8vd3d3LnJlbWxhYi5uZXQvCgoK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1y aXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6977C7EE2E for ; Mon, 12 Jun 2023 14:42:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230331AbjFLOml convert rfc822-to-8bit (ORCPT ); Mon, 12 Jun 2023 10:42:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229644AbjFLOmh (ORCPT ); Mon, 12 Jun 2023 10:42:37 -0400 X-Greylist: delayed 403 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 12 Jun 2023 07:42:33 PDT Received: from sypressi2.dnainternet.net (sypressi2.dnainternet.net [83.102.40.154]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B86D9E for ; Mon, 12 Jun 2023 07:42:33 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by sypressi2.dnainternet.net (Postfix) with ESMTP id 285EF14B87; Mon, 12 Jun 2023 17:35:42 +0300 (EEST) X-Virus-Scanned: DNA Internet at dnainternet.net Received: from sypressi2.dnainternet.net ([83.102.40.154]) by localhost (sypressi2.dnainternet.net [127.0.0.1]) (DNA Internet, port 10041) with ESMTP id goenKB_nCimi; Mon, 12 Jun 2023 17:35:27 +0300 (EEST) Received: from kirsikkapuu2.dnainternet.net (kirsikkapuu2.dnainternet.net [83.102.40.52]) by sypressi2.dnainternet.net (Postfix) with ESMTP id B3EEC14C0A; Mon, 12 Jun 2023 17:33:40 +0300 (EEST) Received: from basile.localnet (87-92-194-88.rev.dnainternet.fi [87.92.194.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by kirsikkapuu2.dnainternet.net (Postfix) with ESMTPS id 723807E; Mon, 12 Jun 2023 17:32:45 +0300 (EEST) From: =?ISO-8859-1?Q?R=E9mi?= Denis-Courmont To: linux-riscv@lists.infradead.org, palmer@dabbelt.com, anup@brainfault.org, atishp@atishpatra.org, kvm-riscv@lists.infradead.org, kvm@vger.kernel.org Cc: vineetg@rivosinc.com, greentime.hu@sifive.com, guoren@linux.alibaba.com, Vincent Chen , Andy Chiu , Paul Walmsley , Albert Ou , Heiko Stuebner , Guo Ren , Conor Dooley , Andy Chiu Subject: Re: [PATCH -next v21 09/27] riscv: Introduce struct/helpers to save/restore per-task Vector state Date: Mon, 12 Jun 2023 17:32:40 +0300 Message-ID: <5271851.rBgCu3BfMA@basile.remlab.net> Organization: Remlab In-Reply-To: <20230605110724.21391-10-andy.chiu@sifive.com> References: <20230605110724.21391-1-andy.chiu@sifive.com> <20230605110724.21391-10-andy.chiu@sifive.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Le maanantaina 5. kesäkuuta 2023, 14.07.06 EEST Andy Chiu a écrit : > @@ -32,13 +54,86 @@ static __always_inline void riscv_v_disable(void) > csr_clear(CSR_SSTATUS, SR_VS); > } > > +static __always_inline void __vstate_csr_save(struct __riscv_v_ext_state > *dest) +{ > + asm volatile ( > + "csrr %0, " __stringify(CSR_VSTART) "\n\t" > + "csrr %1, " __stringify(CSR_VTYPE) "\n\t" > + "csrr %2, " __stringify(CSR_VL) "\n\t" > + "csrr %3, " __stringify(CSR_VCSR) "\n\t" > + : "=r" (dest->vstart), "=r" (dest->vtype), "=r" (dest- >vl), > + "=r" (dest->vcsr) : :); > +} > + > +static __always_inline void __vstate_csr_restore(struct __riscv_v_ext_state > *src) +{ > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvl x0, %2, %1\n\t" > + ".option pop\n\t" > + "csrw " __stringify(CSR_VSTART) ", %0\n\t" > + "csrw " __stringify(CSR_VCSR) ", %3\n\t" > + : : "r" (src->vstart), "r" (src->vtype), "r" (src->vl), > + "r" (src->vcsr) :); > +} > + > +static inline void __riscv_v_vstate_save(struct __riscv_v_ext_state > *save_to, + void *datap) > +{ > + unsigned long vl; > + > + riscv_v_enable(); > + __vstate_csr_save(save_to); > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvli %0, x0, e8, m8, ta, ma\n\t" > + "vse8.v v0, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v8, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v16, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vse8.v v24, (%1)\n\t" > + ".option pop\n\t" > + : "=&r" (vl) : "r" (datap) : "memory"); > + riscv_v_disable(); > +} Shouldn't this use `vs8r.v` rather than `vse8.v`, and do away with `vsetvli`? This seems like a textbook use case for the whole-register store instruction, no? > + > +static inline void __riscv_v_vstate_restore(struct __riscv_v_ext_state > *restore_from, + void *datap) > +{ > + unsigned long vl; > + > + riscv_v_enable(); > + asm volatile ( > + ".option push\n\t" > + ".option arch, +v\n\t" > + "vsetvli %0, x0, e8, m8, ta, ma\n\t" > + "vle8.v v0, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v8, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v16, (%1)\n\t" > + "add %1, %1, %0\n\t" > + "vle8.v v24, (%1)\n\t" > + ".option pop\n\t" > + : "=&r" (vl) : "r" (datap) : "memory"); > + __vstate_csr_restore(restore_from); > + riscv_v_disable(); > +} > + Ditto but `vl8r.v`. > #else /* ! CONFIG_RISCV_ISA_V */ > > struct pt_regs; > > static inline int riscv_v_setup_vsize(void) { return -EOPNOTSUPP; } > static __always_inline bool has_vector(void) { return false; } > +static inline bool riscv_v_vstate_query(struct pt_regs *regs) { return > false; } #define riscv_v_vsize (0) > +#define riscv_v_vstate_off(regs) do {} while (0) > +#define riscv_v_vstate_on(regs) do {} while (0) > > #endif /* CONFIG_RISCV_ISA_V */ > -- Реми Дёни-Курмон http://www.remlab.net/