[PATCH] lib: sbi: sse: clear SPV for non-virtualized events
Anup Patel
anup at brainfault.org
Tue Sep 1 00:28:24 PDT 2026
On Fri, Jul 31, 2026 at 12:48 PM Zhanpeng Zhang
<zhangzhanpeng.jasper at bytedance.com> wrote:
>
> SSE injection sets hstatus.SPV to the virtualization state of the
> interrupted context before entering the supervisor handler. This patch
> completes that existing requirement and does not change the SSE ABI.
>
> The existing code sets SPV when the interrupted context is virtualized,
> but leaves it unchanged otherwise. A stale SPV value can therefore make
> an event that interrupted host execution appear to have interrupted a
> guest. Event completion can then resume with virtualization enabled.
>
> Clear SPV when the interrupted context is not virtualized so the
> handler-visible state matches the interrupted context. This also lets
> supervisor software, such as the Linux PMU and perf code, reliably tell
> whether an SSE interrupted host or virtualized execution.
>
> Fixes: c8cdf01d8f3a ("lib: sbi: Add support for Supervisor Software Events extension")
> Signed-off-by: Zhanpeng Zhang <zhangzhanpeng.jasper at bytedance.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> lib/sbi/sbi_sse.c | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c
> index 818afb87..68e4fab4 100644
> --- a/lib/sbi/sbi_sse.c
> +++ b/lib/sbi/sbi_sse.c
> @@ -563,15 +563,10 @@ static void sse_event_inject(struct sbi_sse_event *e,
>
> if (misa_extension('H')) {
> unsigned long hstatus = csr_read(CSR_HSTATUS);
> -
> -#if __riscv_xlen == 64
> - if (regs->mstatus & MSTATUS_MPV)
> -#elif __riscv_xlen == 32
> - if (regs->mstatusH & MSTATUSH_MPV)
> -#else
> -#error "Unexpected __riscv_xlen"
> -#endif
> + if (sbi_regs_from_virt(regs))
> hstatus |= HSTATUS_SPV;
> + else
> + hstatus &= ~HSTATUS_SPV;
>
> hstatus &= ~HSTATUS_SPVP;
> if (hstatus & HSTATUS_SPV && regs->mstatus & SSTATUS_SPP)
> --
> 2.50.1 (Apple Git-155)
>
More information about the opensbi
mailing list