[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] target/riscv: Fix update of hstatus.SPVP
From: |
Alistair Francis |
Subject: |
Re: [PATCH] target/riscv: Fix update of hstatus.SPVP |
Date: |
Wed, 14 Oct 2020 12:32:37 -0700 |
On Tue, Oct 13, 2020 at 8:11 AM Georg Kotheimer
<georg.kotheimer@kernkonzept.com> wrote:
>
> When trapping from virt into HS mode, hstatus.SPVP was set to
> the value of sstatus.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@kernkonzept.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Thanks!
Applied to riscv-to-apply.next
Alistair
> ---
> target/riscv/cpu_helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> index 904899054d..1d7d10377d 100644
> --- a/target/riscv/cpu_helper.c
> +++ b/target/riscv/cpu_helper.c
> @@ -932,7 +932,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
> /* Trap into HS mode, from virt */
> riscv_cpu_swap_hypervisor_regs(env);
> env->hstatus = set_field(env->hstatus, HSTATUS_SPVP,
> - get_field(env->mstatus,
> SSTATUS_SPP));
> + env->priv);
> env->hstatus = set_field(env->hstatus, HSTATUS_SPV,
> riscv_cpu_virt_enabled(env));
>
> --
> 2.25.1
>
>