[PATCH 2/3] lib/riscv: clear SDT when entering exception handling
Andrew Jones
andrew.jones at linux.dev
Tue Jun 3 01:16:46 PDT 2025
On Fri, May 23, 2025 at 09:53:09AM +0200, Clément Léger wrote:
> In order to avoid taking double trap once we have entered a trap and
> saved everything, clear SDT at the end of entry. This is not exactly
> required when double trap is disabled (probably most of the time), but
> that's not harmful.
Hmm... I wonder if this shouldn't be left to the handlers. Maybe
we should just provide a couple helpers in processor.h, such as
local_dlbtrp_enable()
local_dlbtrp_disable()
If we do need to manage this at save_context time, then I have
a couple comments below
>
> Signed-off-by: Clément Léger <cleger at rivosinc.com>
> ---
> riscv/cstart.S | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/riscv/cstart.S b/riscv/cstart.S
> index 575f929b..a86f97f0 100644
> --- a/riscv/cstart.S
> +++ b/riscv/cstart.S
> @@ -212,14 +212,15 @@ secondary_entry:
> REG_S t6, PT_T6(a0) // x31
> csrr a1, CSR_SEPC
> REG_S a1, PT_EPC(a0)
> - csrr a1, CSR_SSTATUS
> - REG_S a1, PT_STATUS(a0)
> csrr a1, CSR_STVAL
> REG_S a1, PT_BADADDR(a0)
> csrr a1, CSR_SCAUSE
> REG_S a1, PT_CAUSE(a0)
> REG_L a1, PT_ORIG_A0(a0)
> REG_S a1, PT_A0(a0)
> + li t0, SR_SDT
^ ^ should not be a tab
^ should be tabs
SR_SDT isn't defined until the next patch so this breaks compiling at this
point, which could break bisection. You can do a quick check of a series
for this with
git rebase -i -x 'make' <base>
> + csrrc a1, CSR_SSTATUS, t0
> + REG_S a1, PT_STATUS(a0)
> .endm
>
> /*
> @@ -227,6 +228,8 @@ secondary_entry:
> * Also restores a0.
> */
> .macro restore_context
> + REG_L a1, PT_STATUS(a0)
> + csrw CSR_SSTATUS, a1
> REG_L ra, PT_RA(a0) // x1
> REG_L sp, PT_SP(a0) // x2
> REG_L gp, PT_GP(a0) // x3
> @@ -260,8 +263,6 @@ secondary_entry:
> REG_L t6, PT_T6(a0) // x31
> REG_L a1, PT_EPC(a0)
> csrw CSR_SEPC, a1
> - REG_L a1, PT_STATUS(a0)
> - csrw CSR_SSTATUS, a1
> REG_L a1, PT_BADADDR(a0)
> csrw CSR_STVAL, a1
> REG_L a1, PT_CAUSE(a0)
> --
> 2.49.0
>
Thanks,
drew
More information about the kvm-riscv
mailing list