[RFC PATCH 3/3] lib: sbi_trap: Set hstatus.GVA when redirecting

Andrew Jones ajones at ventanamicro.com
Wed Aug 3 06:16:22 PDT 2022


On Wed, Aug 03, 2022 at 01:16:52PM +0800, dramforever wrote:
> ---
>  lib/sbi/sbi_trap.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/sbi/sbi_trap.c b/lib/sbi/sbi_trap.c
> index ee3e4e9..1669577 100644
> --- a/lib/sbi/sbi_trap.c
> +++ b/lib/sbi/sbi_trap.c
> @@ -118,12 +118,15 @@ int sbi_trap_redirect(struct sbi_trap_regs *regs,
>  	regs->mstatus |= (next_virt) ? MSTATUS_MPV : 0UL;
>  #endif
>  
> -	/* Update HSTATUS for VS/VU-mode to HS-mode transition */
> -	if (misa_extension('H') && prev_virt && !next_virt) {
> -		/* Update HSTATUS SPVP and SPV bits */
> +	/* Update HSTATUS if going to HS-mode */
> +	if (misa_extension('H') && !next_virt) {
>  		hstatus = csr_read(CSR_HSTATUS);
> -		hstatus &= ~HSTATUS_SPVP;
> -		hstatus |= (prev_mode == PRV_S) ? HSTATUS_SPVP : 0;
> +		if (prev_virt) {
> +			hstatus &= ~HSTATUS_SPVP;
> +			hstatus |= (prev_mode == PRV_S) ? HSTATUS_SPVP : 0;
> +		}
> +		hstatus &= ~HSTATUS_GVA;
> +		hstatus |= (trap->gva) ? HSTATUS_GVA : 0;

trap->gva may be garbage at the point of this check since
sbi_trap_redirect() is called from:

  lib/sbi/sbi_illegal_insn.c:34
  lib/sbi/sbi_misaligned_ldst.c:132
  lib/sbi/sbi_misaligned_ldst.c:247
  lib/sbi/sbi_trap.c:314

with an uninitialized, stack-allocated sbi_trap_info structure,
where all the members are explicitly initialized before the call.
We need to also initialize gva at those points.

>  		hstatus &= ~HSTATUS_SPV;
>  		hstatus |= (prev_virt) ? HSTATUS_SPV : 0;
>  		csr_write(CSR_HSTATUS, hstatus);

The patch is doing more than the summary says. We're now setting
hstatus, htval, and htinst anytime we transition to HS-mode, whereas
before we only set those registers when transitioning to HS-mode
from VS/VU-mode. If I understand the spec properly, then that's a
bug fix, but it should be in a separate patch.

Please write commit messages. Even simply adding adding new bit
masks and shifts should have a sentence expressing the motivation
for adding them.

Thanks,
drew



More information about the opensbi mailing list