[PATCH] riscv: misaligned: Make enabling delegation depend on BROKEN

Conor Dooley conor at kernel.org
Mon Mar 30 05:59:09 PDT 2026


On Mon, Mar 30, 2026 at 02:47:15PM +0800, Vivian Wang wrote:
> The unaligned access emulation code in Linux has various deficiencies.
> For example, it doesn't emulate vector instructions [1], and doesn't
> emulate KVM guest accesses. Therefore, requesting misaligned exception
> delegation with SBI FWFT actually regresses userspace and KVM guest
> behavior. Until Linux can handle it properly, guard these sbi_fwft_set()
> calls behind RISCV_SBI_FWFT_DELEGATE_MISALIGNED, which in turn depends
> on BROKEN.
> 
> The rest of the existing code proceeds as before, except as if
> SBI_FWFT_MISALIGNED_EXC_DELEG is not available, to handle any remaining
> address misaligned exceptions on a best-effort basis. The KVM SBI FWFT
> implementation is also not touched, but it is disabled if the firmware
> emulates unaligned accesses.
> 
> Cc: stable at vger.kernel.org
> Fixes: cf5a8abc6560 ("riscv: misaligned: request misaligned exception from SBI")
> Reported-by: Songsong Zhang <U2FsdGVkX1 at gmail.com> # KVM
> Link: https://lore.kernel.org/linux-riscv/38ce44c1-08cf-4e3f-8ade-20da224f529c@iscas.ac.cn/ [1]
> Signed-off-by: Vivian Wang <wangruikang at iscas.ac.cn>
> ---
> Clément: Sorry to call what you did broken, but it really is breaking
> on real hardware out there. I think this is the right way for now.
> ---
>  arch/riscv/Kconfig                   | 14 ++++++++++++++
>  arch/riscv/kernel/traps_misaligned.c |  2 +-
>  2 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 90c531e6abf5..8ad1f13c170e 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -941,6 +941,20 @@ config RISCV_VECTOR_MISALIGNED
>  	help
>  	  Enable detecting support for vector misaligned loads and stores.
>  
> +config RISCV_SBI_FWFT_DELEGATE_MISALIGNED
> +	bool "Request firmware delegation of unaligned access exceptions"
> +	depends on RISCV_SBI
> +	depends on BROKEN

Making it hard to enable I think makes a lot of sense, given the issues
you're reporting but I tacking on BROKEN will remove effectively all
build coverage of it* and will definitely stop almost anyone using it.
Should it be just made NONPORTABLE with the text about being incomplete
expanded a wee bit to say what is broken so that people can make a
decision?

Cheers,
Conor.

*it's like 10 lines, probably an irrelevant concern.


> +	help
> +	  Use SBI FWFT to request delegation of load address misaligned and
> +	  store address misaligned exceptions, if possible, and prefer Linux
> +	  kernel emulation of these accesses to firmware emulation.
> +
> +	  Since the Linux kernel's emulation is incomplete, enabling this may
> +	  cause unexpected userspace and KVM guest crashes.
> +
> +	  If you don't know what to do here, say N.
> +
>  choice
>  	prompt "Unaligned Accesses Support"
>  	default RISCV_PROBE_UNALIGNED_ACCESS
> diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c
> index 2a27d3ff4ac6..81b7682e6c6d 100644
> --- a/arch/riscv/kernel/traps_misaligned.c
> +++ b/arch/riscv/kernel/traps_misaligned.c
> @@ -584,7 +584,7 @@ static int cpu_online_check_unaligned_access_emulated(unsigned int cpu)
>  
>  static bool misaligned_traps_delegated;
>  
> -#ifdef CONFIG_RISCV_SBI
> +#if defined(CONFIG_RISCV_SBI_FWFT_DELEGATE_MISALIGNED)
>  
>  static int cpu_online_sbi_unaligned_setup(unsigned int cpu)
>  {
> 
> ---
> base-commit: f338e77383789c0cae23ca3d48adcc5e9e137e3c
> change-id: 20260330-riscv-misaligned-dont-delegate-3cf98c76ee08
> 
> Best regards,
> -- 
> Vivian "dramforever" Wang
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-riscv/attachments/20260330/c14af1f3/attachment.sig>


More information about the linux-riscv mailing list