From: Darius Rad <darius@bluespec.com>
To: Vivian Wang <wangruikang@iscas.ac.cn>
Cc: "Drew Fustini" <fustini@kernel.org>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Samuel Holland" <samuel.holland@sifive.com>,
"Björn Töpel" <bjorn@rivosinc.com>,
"Andy Chiu" <andybnac@gmail.com>,
"Conor Dooley" <conor.dooley@microchip.com>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
"Drew Fustini" <dfustini@tenstorrent.com>
Subject: Re: [PATCH v2] riscv: Add sysctl to control discard of vstate during syscall
Date: Sat, 9 Aug 2025 09:23:00 -0400 [thread overview]
Message-ID: <aJdLtG8jcAxT8idC@localhost.localdomain> (raw)
In-Reply-To: <e4d21516-23b5-404b-a7da-cf6ebfd02dbc@iscas.ac.cn>
On Sat, Aug 09, 2025 at 11:58:24AM +0800, Vivian Wang wrote:
> My previous comment on v1 on prefering clobbering with VS = Initial
> handling aside...
>
> On 8/8/25 20:36, Darius Rad wrote:
> > On Wed, Aug 06, 2025 at 07:03:28AM -0700, Drew Fustini wrote:
> > [...]
> >> diff --git a/Documentation/arch/riscv/vector.rst b/Documentation/arch/riscv/vector.rst
> >> index 3987f5f76a9deb0824e53a72df4c3bf90ac2bee1..b702c00351617165a4d8897c7df68eadcd2d562e 100644
> >> --- a/Documentation/arch/riscv/vector.rst
> >> +++ b/Documentation/arch/riscv/vector.rst
> >> @@ -134,7 +134,25 @@ processes in form of sysctl knob:
> >> 3. Vector Register State Across System Calls
> >> ---------------------------------------------
> >>
> >> -As indicated by version 1.0 of the V extension [1], vector registers are
> >> -clobbered by system calls.
> >> +Linux adopts the syscall ABI proposed by version 1.0 of the V extension [1],
> >> +where vector registers are clobbered by system calls. Specifically:
> >> +
> >> + Executing a system call causes all caller-saved vector registers
> >> + (v0-v31, vl, vtype) and vstart to become unspecied.
> >> +
> > Perhaps:
> >
> > Clobbering the vector registers may prevent leaking information to user
>
> No... Not clobbering does not "leak" anything. If you find that it leaks
> information, please report - that's a bug.
>
That's why I wrote "may". If such a bug existed, either now or in the
future, clobbering here would limit the scope of it. But this may not be
important enough to mention.
> > space and aid in debugging, but can significantly increase system call
> > latency for some implementations. [...]
> >
> >> +However, clobbering the vector registers can significantly increase system call
> >> +latency for some implementations. To mitigate this performance impact, a sysctl
> >> +knob is provided that controls whether vector state is always discarded in the
> >> +syscall path:
> >> +
> >> +* /proc/sys/abi/riscv_v_vstate_discard
> >> +
> >> + Valid values are:
> >> +
> >> + * 0: Vector state is not always clobbered in all syscalls
> >> + * 1: Mandatory clobbering of vector state in all syscalls
> >> +
> >> + Reading this file returns the current discard behavior. The initial state is
> >> + controlled by CONFIG_RISCV_ISA_V_VSTATE_DISCARD.
> >>
> >> 1: https://github.com/riscv/riscv-v-spec/blob/master/calling-convention.adoc
> >> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> >> index 36061f4732b7496a9c68a9a10f9959849dc2a95c..7bb8a8513135cbc105bd94d273012486a886f724 100644
> >> --- a/arch/riscv/Kconfig
> >> +++ b/arch/riscv/Kconfig
> >> @@ -656,6 +656,16 @@ config RISCV_ISA_V_DEFAULT_ENABLE
> >>
> >> If you don't know what to do here, say Y.
> >>
> >> +config RISCV_ISA_V_VSTATE_DISCARD
> >> + bool "Enable Vector state discard by default"
> >> + depends on RISCV_ISA_V
> >> + default n
> >> + help
> > Perhaps add the following paragraph:
> >
> > Discarding vector state is more robust, but has negative performance
> > implications in certain implementations.
>
> "Robust" is too vague... I don't think this word is helpful for anyone
> trying to understand what this does.
>
> Vivian "dramforever" Wang
>
> >
> >> + Say Y here if you want to always discard vector state in syscalls.
> >> + Otherwise, userspace has to enable it via the sysctl interface.
> >> +
> >> + If you don't know what to do here, say N.
> >> +
> >> config RISCV_ISA_V_UCOPY_THRESHOLD
> >> int "Threshold size for vectorized user copies"
> >> depends on RISCV_ISA_V
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Darius Rad <darius@bluespec.com>
To: Vivian Wang <wangruikang@iscas.ac.cn>
Cc: "Drew Fustini" <fustini@kernel.org>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Samuel Holland" <samuel.holland@sifive.com>,
"Björn Töpel" <bjorn@rivosinc.com>,
"Andy Chiu" <andybnac@gmail.com>,
"Conor Dooley" <conor.dooley@microchip.com>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
"Drew Fustini" <dfustini@tenstorrent.com>
Subject: Re: [PATCH v2] riscv: Add sysctl to control discard of vstate during syscall
Date: Sat, 9 Aug 2025 09:23:00 -0400 [thread overview]
Message-ID: <aJdLtG8jcAxT8idC@localhost.localdomain> (raw)
In-Reply-To: <e4d21516-23b5-404b-a7da-cf6ebfd02dbc@iscas.ac.cn>
On Sat, Aug 09, 2025 at 11:58:24AM +0800, Vivian Wang wrote:
> My previous comment on v1 on prefering clobbering with VS = Initial
> handling aside...
>
> On 8/8/25 20:36, Darius Rad wrote:
> > On Wed, Aug 06, 2025 at 07:03:28AM -0700, Drew Fustini wrote:
> > [...]
> >> diff --git a/Documentation/arch/riscv/vector.rst b/Documentation/arch/riscv/vector.rst
> >> index 3987f5f76a9deb0824e53a72df4c3bf90ac2bee1..b702c00351617165a4d8897c7df68eadcd2d562e 100644
> >> --- a/Documentation/arch/riscv/vector.rst
> >> +++ b/Documentation/arch/riscv/vector.rst
> >> @@ -134,7 +134,25 @@ processes in form of sysctl knob:
> >> 3. Vector Register State Across System Calls
> >> ---------------------------------------------
> >>
> >> -As indicated by version 1.0 of the V extension [1], vector registers are
> >> -clobbered by system calls.
> >> +Linux adopts the syscall ABI proposed by version 1.0 of the V extension [1],
> >> +where vector registers are clobbered by system calls. Specifically:
> >> +
> >> + Executing a system call causes all caller-saved vector registers
> >> + (v0-v31, vl, vtype) and vstart to become unspecied.
> >> +
> > Perhaps:
> >
> > Clobbering the vector registers may prevent leaking information to user
>
> No... Not clobbering does not "leak" anything. If you find that it leaks
> information, please report - that's a bug.
>
That's why I wrote "may". If such a bug existed, either now or in the
future, clobbering here would limit the scope of it. But this may not be
important enough to mention.
> > space and aid in debugging, but can significantly increase system call
> > latency for some implementations. [...]
> >
> >> +However, clobbering the vector registers can significantly increase system call
> >> +latency for some implementations. To mitigate this performance impact, a sysctl
> >> +knob is provided that controls whether vector state is always discarded in the
> >> +syscall path:
> >> +
> >> +* /proc/sys/abi/riscv_v_vstate_discard
> >> +
> >> + Valid values are:
> >> +
> >> + * 0: Vector state is not always clobbered in all syscalls
> >> + * 1: Mandatory clobbering of vector state in all syscalls
> >> +
> >> + Reading this file returns the current discard behavior. The initial state is
> >> + controlled by CONFIG_RISCV_ISA_V_VSTATE_DISCARD.
> >>
> >> 1: https://github.com/riscv/riscv-v-spec/blob/master/calling-convention.adoc
> >> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> >> index 36061f4732b7496a9c68a9a10f9959849dc2a95c..7bb8a8513135cbc105bd94d273012486a886f724 100644
> >> --- a/arch/riscv/Kconfig
> >> +++ b/arch/riscv/Kconfig
> >> @@ -656,6 +656,16 @@ config RISCV_ISA_V_DEFAULT_ENABLE
> >>
> >> If you don't know what to do here, say Y.
> >>
> >> +config RISCV_ISA_V_VSTATE_DISCARD
> >> + bool "Enable Vector state discard by default"
> >> + depends on RISCV_ISA_V
> >> + default n
> >> + help
> > Perhaps add the following paragraph:
> >
> > Discarding vector state is more robust, but has negative performance
> > implications in certain implementations.
>
> "Robust" is too vague... I don't think this word is helpful for anyone
> trying to understand what this does.
>
> Vivian "dramforever" Wang
>
> >
> >> + Say Y here if you want to always discard vector state in syscalls.
> >> + Otherwise, userspace has to enable it via the sysctl interface.
> >> +
> >> + If you don't know what to do here, say N.
> >> +
> >> config RISCV_ISA_V_UCOPY_THRESHOLD
> >> int "Threshold size for vectorized user copies"
> >> depends on RISCV_ISA_V
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2025-08-09 13:23 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-06 14:03 [PATCH v2] riscv: Add sysctl to control discard of vstate during syscall Drew Fustini
2025-08-06 14:03 ` Drew Fustini
2025-08-08 12:36 ` Darius Rad
2025-08-08 12:36 ` Darius Rad
2025-08-09 3:58 ` Vivian Wang
2025-08-09 3:58 ` Vivian Wang
2025-08-09 7:54 ` Drew Fustini
2025-08-09 7:54 ` Drew Fustini
2025-08-10 9:52 ` Vivian Wang
2025-08-10 9:52 ` Vivian Wang
2025-08-12 5:46 ` Drew Fustini
2025-08-12 5:46 ` Drew Fustini
2025-08-09 13:23 ` Darius Rad [this message]
2025-08-09 13:23 ` Darius Rad
2025-08-09 8:40 ` Florian Weimer
2025-08-09 8:40 ` Florian Weimer
2025-08-09 21:23 ` Drew Fustini
2025-08-09 21:23 ` Drew Fustini
2025-08-10 7:45 ` Florian Weimer
2025-08-10 7:45 ` Florian Weimer
2025-08-11 20:36 ` Drew Fustini
2025-08-11 20:36 ` Drew Fustini
2025-08-12 8:03 ` Florian Weimer
2025-08-12 8:03 ` Florian Weimer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aJdLtG8jcAxT8idC@localhost.localdomain \
--to=darius@bluespec.com \
--cc=alex@ghiti.fr \
--cc=andybnac@gmail.com \
--cc=bjorn@rivosinc.com \
--cc=conor.dooley@microchip.com \
--cc=dfustini@tenstorrent.com \
--cc=fustini@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=samuel.holland@sifive.com \
--cc=wangruikang@iscas.ac.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.