[v1, 0/6] Support Zve32[xf] and Zve64[xfd] Vector subextensions

Andy Chiu andy.chiu at sifive.com
Wed Mar 13 02:15:00 PDT 2024


On Tue, Mar 12, 2024 at 9:17 PM Stefan O'Rear <sorear at fastmail.com> wrote:
>
> On Tue, Mar 12, 2024, at 8:36 AM, Andy Chiu wrote:
> > The series composes of two parts. The first part provides a quick fix for
> > the issue on a recent thread[1]. The issue happens when a platform has
> > ununified vector register length across multiple cores. Specifically,
> > patch 1 adds a comment at a callsite of riscv_setup_vsize to clarify how
> > vlenb is observed by the system. Patch 2 fixes the issue by failing the
> > boot process of a secondary core if vlenb mismatches.
> >
> > The second part of the series provide a finer grain view of the Vector
> > extension. Patch 3 give the obsolete ISA parser the ability to expand
> > ISA extensions for sigle letter extensions. Patch 3, 4 introduces Zve32x,
> > Zve32f, Zve64x, Zve64f, Zve64d for isa parsing and hwprobe. Patch 5
> > updates all callsites such that Vector subextensions are maximumly
> > supported by the kernel.
>
> What is the end user programming interface for this intended to be? prctl
> call using inline asm ecall in the ifunc resolver, possibly automated using
> function multi-versioning? Can we do better with a different interface?

If a platform supports full V, then the user simply gets it by reading
ELF_HWCAP. ELF_HWCAP has the 'v' bit set when all following conditions
are met:
 1. The single-letter 'v' extension is presented on platform
 2. The kernel has CONFIG_RISCV_ISA_V
 3. The Vector enablement status[1] for the user process is set to
     PR_RISCV_V_VSTATE_CTRL_ON. This is true by default but can be
     changed in Kconfig or the sysctl knob.

If a platform only supports some of Zve* but not V, then ELF_HWCAP
cannot help. The user would end up having to make a prctl call to see
if current's PR_RISCV_V_VSTATE_CTRL_ON is true. I agree we need a
better way for Zve* cases. I am considering if we could duplicate the
information of current vector enablement status from prctl to hwprobe.
Not very sure if this duplication is a good idea though.

[1]: https://www.kernel.org/doc/html/next/riscv/vector.html

Thanks,
Andy





>
> -s
>
> > Two parts of the series are sent together to ease the effort of picking
> > dependency patches. The first part can be merged independent of the
> > second one if necessary.
> >
> > The series is tested on a QEMU and verified that booting, Vector
> > programs context-switch, signal, ptrace, prctl(sysctl knob) interfaces
> > works when we only report partial V from the ISA.
> >
> > This patch should be able to apply on risc-v for-next branch on top of
> > the commit 886516fae2b7 ("RISC-V: fix check for zvkb with tip-of-tree clang")
> >
> > [1]:
> > https://lore.kernel.org/all/20240228-vicinity-cornstalk-4b8eb5fe5730@spud/T/#u
> >
> > Andy Chiu (6):
> >   riscv: vector: add a comment when calling riscv_setup_vsize()
> >   riscv: smp: fail booting up smp if inconsistent vlen is detected
> >   riscv: cpufeature: call match_isa_ext() for single-letter extensions
> >   riscv: cpufeature: add zve32[xf] and zve64[xfd] isa detection
> >   riscv: hwprobe: add zve Vector subextesnions into hwprobe interface
> >   riscv: vector: adjust minimum Vector requirement to ZVE32X
> >
> >  Documentation/arch/riscv/hwprobe.rst   | 15 +++++++
> >  arch/riscv/include/asm/hwcap.h         |  5 +++
> >  arch/riscv/include/asm/switch_to.h     |  2 +-
> >  arch/riscv/include/asm/vector.h        | 21 ++++++----
> >  arch/riscv/include/asm/xor.h           |  2 +-
> >  arch/riscv/include/uapi/asm/hwprobe.h  |  5 +++
> >  arch/riscv/kernel/cpufeature.c         | 57 +++++++++++++++++++++++---
> >  arch/riscv/kernel/head.S               | 14 +++----
> >  arch/riscv/kernel/kernel_mode_vector.c |  4 +-
> >  arch/riscv/kernel/process.c            |  4 +-
> >  arch/riscv/kernel/signal.c             |  6 +--
> >  arch/riscv/kernel/smpboot.c            | 14 ++++---
> >  arch/riscv/kernel/sys_hwprobe.c        | 12 ++++--
> >  arch/riscv/kernel/vector.c             | 15 ++++---
> >  arch/riscv/lib/uaccess.S               |  2 +-
> >  15 files changed, 135 insertions(+), 43 deletions(-)
> >
> > --
> > 2.17.1
> >
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv



More information about the linux-riscv mailing list