Re: [PATCH 0/8] riscv: Support compiling the kernel with extensions

From: Charlie Jenkins
Date: Tue May 07 2024 - 16:08:37 EST


On Tue, May 07, 2024 at 08:25:09AM +0100, Conor Dooley wrote:
> Hey Charlie,
>
> On 7 May 2024 02:40:41 IST, Charlie Jenkins <charlie@xxxxxxxxxxxx> wrote:
> >The kernel currently has the restriction that it can only be compiled
> >with the extensions that are hardcoded in arch/risc/Makefile.
> >
> >Any extension that is not listed in the Makefile can still be used by
> >explicitly writing the assembly and using alternative patching.
> >
> >This series introduces Kconfig options that allow the kernel to be
> >compiled with additional extensions.
>
> One thing I don't see in the commit messages or the cover letter is what your actual motivation is
> for making these changes.
> Are you effectively looking to evaluate the alternatives at build time, or are you looking to
> let the compiler use the extension where it sees
> fit? Or perhaps both?

Both. I forgot to mention that this uses the updated wording from your
patch "RISC-V: clarify what some RISCV_ISA* config options do".

The hope is that at some point the kernel can be compiled with something
like the RVI profiles, in the interim this allows people to compile
kernels with these extensions for some "free" performance improvements.
I haven't tested performance on real hardware, but compiling the kernel
with the Zb* extensions has a 4.9% dynamic instruction count reduction
when running a boot + simple userspace program test (tested using
Spike).

I meant to remove "v" from the march since we have to call the kernel
begin/end functions when using vector, I'll need to update that in the
next version.

- Charlie

>
> Thanks,
> Conor.
>
> >
> >Signed-off-by: Charlie Jenkins <charlie@xxxxxxxxxxxx>
> >---
> >Charlie Jenkins (8):
> > riscv: Add PLATFORM_MAY_SUPPORT_RISCV_ISA_C Kconfig option
> > riscv: Add PLATFORM_MAY_SUPPORT_RISCV_ISA_V Kconfig option
> > riscv: Add PLATFORM_SUPPORTS_RISCV_ISA_SVNAPOT Kconfig option
> > riscv: Add PLATFORM_MAY_SUPPORT_RISCV_ISA_SVPBMT Kconfig option
> > riscv: Add PLATFORM_SUPPORTS_RISCV_ISA_ZBB Kconfig option
> > riscv: Add PLATFORM_SUPPORTS_RISCV_ISA_ZBA Kconfig option
> > riscv: Add PLATFORM_SUPPORTS_RISCV_ISA_ZBC Kconfig option
> > riscv: Add PLATFORM_SUPPORTS_RISCV_ISA_ZBS Kconfig option
> >
> > arch/riscv/Kconfig | 135 +-----------
> > arch/riscv/Kconfig.isa | 393 ++++++++++++++++++++++++++++++++++
> > arch/riscv/Makefile | 15 +-
> > arch/riscv/crypto/Kconfig | 14 +-
> > arch/riscv/include/asm/arch_hweight.h | 33 +--
> > arch/riscv/include/asm/checksum.h | 18 +-
> > arch/riscv/include/asm/pgtable.h | 3 +-
> > arch/riscv/include/asm/simd.h | 3 +
> > arch/riscv/include/asm/vector.h | 3 +-
> > arch/riscv/kernel/cpufeature.c | 3 +-
> > arch/riscv/kernel/head.S | 8 +-
> > arch/riscv/kernel/probes/uprobes.c | 2 +-
> > arch/riscv/kernel/process.c | 14 +-
> > arch/riscv/kernel/ptrace.c | 6 +
> > arch/riscv/lib/csum.c | 48 ++---
> > arch/riscv/lib/riscv_v_helpers.c | 1 -
> > arch/riscv/lib/strcmp.S | 4 +-
> > arch/riscv/lib/strlen.S | 4 +-
> > arch/riscv/lib/strncmp.S | 4 +-
> > arch/riscv/lib/uaccess_vector.S | 2 +
> > arch/riscv/lib/xor.S | 2 +
> > arch/riscv/net/bpf_jit.h | 8 +-
> > 22 files changed, 511 insertions(+), 212 deletions(-)
> >---
> >base-commit: 2f47357557b7aa98d9d9002688aae480864ca3f6
> >change-id: 20240429-compile_kernel_with_extensions-92dd2403d325