[PATCH 4/7] include: sbi: set FS dirty in vsstatus when V=1
Anup Patel
anup at brainfault.org
Thu Mar 19 21:45:57 PDT 2026
On Tue, Feb 10, 2026 at 3:12 PM Bo Gan <ganboing at gmail.com> wrote:
>
> According to Privileged ISA 19.2.11:
>
> Modifying the floating-point state when V=1 causes both fields
> (vsstatus.FS and the HS-level sstatus.FS) to be set to 3 (Dirty)
>
> Fixes: 130e65dd9d44 ("lib: sbi: Implement SET_FS_DIRTY() to make sure the mstatus FS dirty is set")
> Signed-off-by: Bo Gan <ganboing at gmail.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Regards,
Anup
> ---
> include/sbi/riscv_fp.h | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/include/sbi/riscv_fp.h b/include/sbi/riscv_fp.h
> index 03011af9..ff1dbc87 100644
> --- a/include/sbi/riscv_fp.h
> +++ b/include/sbi/riscv_fp.h
> @@ -83,7 +83,11 @@
> #define GET_FFLAGS() csr_read(CSR_FFLAGS)
> #define SET_FFLAGS(value) csr_write(CSR_FFLAGS, (value))
>
> -#define SET_FS_DIRTY(regs) (regs->mstatus |= MSTATUS_FS)
> +#define SET_FS_DIRTY(regs) do { \
> + if (sbi_regs_from_virt(regs)) \
> + csr_set(CSR_VSSTATUS, MSTATUS_FS); \
> + regs->mstatus |= MSTATUS_FS; \
> +} while(0)
>
> #define GET_F32_RS1(insn, regs) (GET_F32_REG(insn, 15, regs))
> #define GET_F32_RS2(insn, regs) (GET_F32_REG(insn, 20, regs))
> --
> 2.34.1
>
More information about the opensbi
mailing list