Message ID | 20240820152424.1973078-1-jesse@rivosinc.com (mailing list archive) |
---|---|
Headers | show |
Series | RISC-V: Detect and report speed of unaligned vector accesses | expand |
On Tue, 20 Aug 2024 08:24:18 PDT (-0700), jesse@rivosinc.com wrote: > Adds support for detecting and reporting the speed of unaligned vector > accesses on RISC-V CPUs. Adds vec_misaligned_speed key to the hwprobe > adds Zicclsm to cpufeature and fixes the check for scalar unaligned > emulated all CPUs. The vec_misaligned_speed key keeps the same format > as the scalar unaligned access speed key. > > This set does not emulate unaligned vector accesses on CPUs that do not > support them. Only reports if userspace can run them and speed of > unaligned vector accesses if supported. > > The Zicclsm is patches are no longer related to this set. > > Changes in v6: > Added ("RISC-V: Scalar unaligned access emulated on hotplug CPUs") > > Changes in V8: > Dropped Zicclsm > s/RISCV_HWPROBE_VECTOR_MISALIGNED/RISCV_HWPROBE_MISALIGNED_VECTOR/g > to match RISCV_HWPROBE_MISALIGNED_SCALAR_* > Rebased onto palmer/fixes (32d5f7add080a936e28ab4142bfeea6b06999789) > > Changes in V9: > Missed a RISCV_HWPROBE_VECTOR_MISALIGNED... > > Jesse Taube (6): > RISC-V: Check scalar unaligned access on all CPUs > RISC-V: Scalar unaligned access emulated on hotplug CPUs > RISC-V: Replace RISCV_MISALIGNED with RISCV_SCALAR_MISALIGNED > RISC-V: Detect unaligned vector accesses supported > RISC-V: Report vector unaligned access speed hwprobe > RISC-V: hwprobe: Document unaligned vector perf key > > Documentation/arch/riscv/hwprobe.rst | 16 +++ > arch/riscv/Kconfig | 57 +++++++- > arch/riscv/include/asm/cpufeature.h | 10 +- > arch/riscv/include/asm/entry-common.h | 11 -- > arch/riscv/include/asm/hwprobe.h | 2 +- > arch/riscv/include/asm/vector.h | 2 + > arch/riscv/include/uapi/asm/hwprobe.h | 5 + > arch/riscv/kernel/Makefile | 3 +- > arch/riscv/kernel/copy-unaligned.h | 5 + > arch/riscv/kernel/fpu.S | 4 +- > arch/riscv/kernel/sys_hwprobe.c | 41 ++++++ > arch/riscv/kernel/traps_misaligned.c | 131 +++++++++++++++-- > arch/riscv/kernel/unaligned_access_speed.c | 156 +++++++++++++++++++-- > arch/riscv/kernel/vec-copy-unaligned.S | 58 ++++++++ > arch/riscv/kernel/vector.c | 2 +- > 15 files changed, 465 insertions(+), 38 deletions(-) > create mode 100644 arch/riscv/kernel/vec-copy-unaligned.S > > base-commit: 32d5f7add080a936e28ab4142bfeea6b06999789 I get a arch/riscv/kernel/traps_smisaligned.c: In function 'check_vector_unaligned_access_emulated': arch/riscv/kernel/traps_misaligned.c:591:9: error: unknown register name 'v0' in 'asm' 591 | __asm__ __volatile__ ( | ^~~~~~~ on rv32/defconfig. Looks like just a missing Kconfg guard as this depends on V support in the toolchain.
On Fri, Sep 20, 2024 at 05:57:22AM -0700, Palmer Dabbelt wrote: > On Tue, 20 Aug 2024 08:24:18 PDT (-0700), jesse@rivosinc.com wrote: > > Adds support for detecting and reporting the speed of unaligned vector > > accesses on RISC-V CPUs. Adds vec_misaligned_speed key to the hwprobe > > adds Zicclsm to cpufeature and fixes the check for scalar unaligned > > emulated all CPUs. The vec_misaligned_speed key keeps the same format > > as the scalar unaligned access speed key. > > > > This set does not emulate unaligned vector accesses on CPUs that do not > > support them. Only reports if userspace can run them and speed of > > unaligned vector accesses if supported. > > > > The Zicclsm is patches are no longer related to this set. > > > > Changes in v6: > > Added ("RISC-V: Scalar unaligned access emulated on hotplug CPUs") > > > > Changes in V8: > > Dropped Zicclsm > > s/RISCV_HWPROBE_VECTOR_MISALIGNED/RISCV_HWPROBE_MISALIGNED_VECTOR/g > > to match RISCV_HWPROBE_MISALIGNED_SCALAR_* > > Rebased onto palmer/fixes (32d5f7add080a936e28ab4142bfeea6b06999789) > > > > Changes in V9: > > Missed a RISCV_HWPROBE_VECTOR_MISALIGNED... > > > > Jesse Taube (6): > > RISC-V: Check scalar unaligned access on all CPUs > > RISC-V: Scalar unaligned access emulated on hotplug CPUs > > RISC-V: Replace RISCV_MISALIGNED with RISCV_SCALAR_MISALIGNED > > RISC-V: Detect unaligned vector accesses supported > > RISC-V: Report vector unaligned access speed hwprobe > > RISC-V: hwprobe: Document unaligned vector perf key > > > > Documentation/arch/riscv/hwprobe.rst | 16 +++ > > arch/riscv/Kconfig | 57 +++++++- > > arch/riscv/include/asm/cpufeature.h | 10 +- > > arch/riscv/include/asm/entry-common.h | 11 -- > > arch/riscv/include/asm/hwprobe.h | 2 +- > > arch/riscv/include/asm/vector.h | 2 + > > arch/riscv/include/uapi/asm/hwprobe.h | 5 + > > arch/riscv/kernel/Makefile | 3 +- > > arch/riscv/kernel/copy-unaligned.h | 5 + > > arch/riscv/kernel/fpu.S | 4 +- > > arch/riscv/kernel/sys_hwprobe.c | 41 ++++++ > > arch/riscv/kernel/traps_misaligned.c | 131 +++++++++++++++-- > > arch/riscv/kernel/unaligned_access_speed.c | 156 +++++++++++++++++++-- > > arch/riscv/kernel/vec-copy-unaligned.S | 58 ++++++++ > > arch/riscv/kernel/vector.c | 2 +- > > 15 files changed, 465 insertions(+), 38 deletions(-) > > create mode 100644 arch/riscv/kernel/vec-copy-unaligned.S > > > > base-commit: 32d5f7add080a936e28ab4142bfeea6b06999789 > > I get a > > arch/riscv/kernel/traps_smisaligned.c: In function 'check_vector_unaligned_access_emulated': > arch/riscv/kernel/traps_misaligned.c:591:9: error: unknown register name 'v0' in 'asm' > 591 | __asm__ __volatile__ ( > | ^~~~~~~ > > on rv32/defconfig. Looks like just a missing Kconfg guard as this depends > on V support in the toolchain. There was an interesting iteraction here! RISCV_PROBE_VECTOR_UNALIGNED_ACCESS was selecting RISCV_VECTOR_MISALIGNED but that bypasses the depends on check of RISCV_ISA_V. I'll send an update for Jesse with the fix for that one patch. - Charlie
On Fri, Sep 20, 2024 at 11:01:10PM +0200, Charlie Jenkins wrote: > On Fri, Sep 20, 2024 at 05:57:22AM -0700, Palmer Dabbelt wrote: > > On Tue, 20 Aug 2024 08:24:18 PDT (-0700), jesse@rivosinc.com wrote: > > > Adds support for detecting and reporting the speed of unaligned vector > > > accesses on RISC-V CPUs. Adds vec_misaligned_speed key to the hwprobe > > > adds Zicclsm to cpufeature and fixes the check for scalar unaligned > > > emulated all CPUs. The vec_misaligned_speed key keeps the same format > > > as the scalar unaligned access speed key. > > > > > > This set does not emulate unaligned vector accesses on CPUs that do not > > > support them. Only reports if userspace can run them and speed of > > > unaligned vector accesses if supported. > > > > > > The Zicclsm is patches are no longer related to this set. > > > > > > Changes in v6: > > > Added ("RISC-V: Scalar unaligned access emulated on hotplug CPUs") > > > > > > Changes in V8: > > > Dropped Zicclsm > > > s/RISCV_HWPROBE_VECTOR_MISALIGNED/RISCV_HWPROBE_MISALIGNED_VECTOR/g > > > to match RISCV_HWPROBE_MISALIGNED_SCALAR_* > > > Rebased onto palmer/fixes (32d5f7add080a936e28ab4142bfeea6b06999789) > > > > > > Changes in V9: > > > Missed a RISCV_HWPROBE_VECTOR_MISALIGNED... > > > > > > Jesse Taube (6): > > > RISC-V: Check scalar unaligned access on all CPUs > > > RISC-V: Scalar unaligned access emulated on hotplug CPUs > > > RISC-V: Replace RISCV_MISALIGNED with RISCV_SCALAR_MISALIGNED > > > RISC-V: Detect unaligned vector accesses supported > > > RISC-V: Report vector unaligned access speed hwprobe > > > RISC-V: hwprobe: Document unaligned vector perf key > > > > > > Documentation/arch/riscv/hwprobe.rst | 16 +++ > > > arch/riscv/Kconfig | 57 +++++++- > > > arch/riscv/include/asm/cpufeature.h | 10 +- > > > arch/riscv/include/asm/entry-common.h | 11 -- > > > arch/riscv/include/asm/hwprobe.h | 2 +- > > > arch/riscv/include/asm/vector.h | 2 + > > > arch/riscv/include/uapi/asm/hwprobe.h | 5 + > > > arch/riscv/kernel/Makefile | 3 +- > > > arch/riscv/kernel/copy-unaligned.h | 5 + > > > arch/riscv/kernel/fpu.S | 4 +- > > > arch/riscv/kernel/sys_hwprobe.c | 41 ++++++ > > > arch/riscv/kernel/traps_misaligned.c | 131 +++++++++++++++-- > > > arch/riscv/kernel/unaligned_access_speed.c | 156 +++++++++++++++++++-- > > > arch/riscv/kernel/vec-copy-unaligned.S | 58 ++++++++ > > > arch/riscv/kernel/vector.c | 2 +- > > > 15 files changed, 465 insertions(+), 38 deletions(-) > > > create mode 100644 arch/riscv/kernel/vec-copy-unaligned.S > > > > > > base-commit: 32d5f7add080a936e28ab4142bfeea6b06999789 > > > > I get a > > > > arch/riscv/kernel/traps_smisaligned.c: In function 'check_vector_unaligned_access_emulated': > > arch/riscv/kernel/traps_misaligned.c:591:9: error: unknown register name 'v0' in 'asm' > > 591 | __asm__ __volatile__ ( > > | ^~~~~~~ > > > > on rv32/defconfig. Looks like just a missing Kconfg guard as this depends > > on V support in the toolchain. > > There was an interesting iteraction here! > RISCV_PROBE_VECTOR_UNALIGNED_ACCESS was selecting > RISCV_VECTOR_MISALIGNED but that bypasses the depends on check of > RISCV_ISA_V. I'll send an update for Jesse with the fix for that one > patch. I take it back, I am not able to reproduce this. RISCV_PROBE_VECTOR_UNALIGNED_ACCESS is hidden behind "Vector unaligned Accesses Support" which depends on RISCV_ISA_V. This function that is erroring has the code: #ifdef CONFIG_RISCV_VECTOR_MISALIGNED void check_vector_unaligned_access_emulated(struct work_struct *work __always_unused) ... Since it is hidden behind CONFIG_RISCV_VECTOR_MISALIGNED, I am unsure how it is possible that this error is leaking through. The error you posted is also kind of odd because the first file you have is "arch/riscv/kernel/traps_smisaligned.c" but the actual file is "arch/riscv/kernel/traps_misaligned.c". > - Charlie >
Hello: This series was applied to riscv/linux.git (for-next) by Palmer Dabbelt <palmer@rivosinc.com>: On Tue, 20 Aug 2024 11:24:18 -0400 you wrote: > Adds support for detecting and reporting the speed of unaligned vector > accesses on RISC-V CPUs. Adds vec_misaligned_speed key to the hwprobe > adds Zicclsm to cpufeature and fixes the check for scalar unaligned > emulated all CPUs. The vec_misaligned_speed key keeps the same format > as the scalar unaligned access speed key. > > This set does not emulate unaligned vector accesses on CPUs that do not > support them. Only reports if userspace can run them and speed of > unaligned vector accesses if supported. > > [...] Here is the summary with links: - [v9,1/6] RISC-V: Check scalar unaligned access on all CPUs https://git.kernel.org/riscv/c/8d20a739f17a - [v9,2/6] RISC-V: Scalar unaligned access emulated on hotplug CPUs https://git.kernel.org/riscv/c/9c528b5f7927 - [v9,3/6] RISC-V: Replace RISCV_MISALIGNED with RISCV_SCALAR_MISALIGNED https://git.kernel.org/riscv/c/c05a62c92516 - [v9,4/6] RISC-V: Detect unaligned vector accesses supported (no matching commit) - [v9,5/6] RISC-V: Report vector unaligned access speed hwprobe https://git.kernel.org/riscv/c/e7c9d66e313b - [v9,6/6] RISC-V: hwprobe: Document unaligned vector perf key https://git.kernel.org/riscv/c/40e09ebd791f You are awesome, thank you!