[PATCH] lib: sbi_trap: Fix hstatus.SPVP update in sbi_trap_redirect()

Anup Patel Anup.Patel at wdc.com
Sat Aug 15 13:08:13 EDT 2020



> -----Original Message-----
> From: opensbi <opensbi-bounces at lists.infradead.org> On Behalf Of Georg
> Kotheimer
> Sent: 15 August 2020 02:31
> To: opensbi at lists.infradead.org
> Cc: Georg Kotheimer <georg.kotheimer at tu-dresden.de>
> Subject: [PATCH] lib: sbi_trap: Fix hstatus.SPVP update in sbi_trap_redirect()
> 
> When redirecting from VS/VU-mode to HS-mode, hstatus.SPVP was set to
> the value of mstatus.SPP, as according to the specification both flags should
> be set to the same value.
> However, the assignment of SPVP takes place before SPP itself is updated,
> which results in SPVP having an outdated value.
> 
> Signed-off-by: Georg Kotheimer <georg.kotheimer at tu-dresden.de>
> ---
>  lib/sbi/sbi_trap.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c index 930119d..c2bd061
> 100644
> --- a/lib/sbi/sbi_trap.c
> +++ b/lib/sbi/sbi_trap.c
> @@ -123,7 +123,7 @@ int sbi_trap_redirect(struct sbi_trap_regs *regs,
>  		/* Update HSTATUS SPVP and SPV bits */
>  		hstatus = csr_read(CSR_HSTATUS);
>  		hstatus &= ~HSTATUS_SPVP;
> -		hstatus |= (regs->mstatus & MSTATUS_SPP) ?
> HSTATUS_SPVP : 0;
> +		hstatus |= (prev_mode == PRV_S) ? HSTATUS_SPVP : 0;
>  		hstatus &= ~HSTATUS_SPV;
>  		hstatus |= (prev_virt) ? HSTATUS_SPV : 0;
>  		csr_write(CSR_HSTATUS, hstatus);
> --
> 2.25.1
> 
> 
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi

Nice catch. Looks good to me.

Reviewed-by: Anup Patel <anup.patel at wdc.com>

Regards,
Anup



More information about the opensbi mailing list