On Fri, Jan 21, 2022 at 3:16 AM LIU Zhiwei <[email protected]> wrote: > > When swap regs for hypervisor, the value of vsstatus or mstatus_hs > should have the right XLEN. Otherwise, it will propagate to mstatus. > > Signed-off-by: LIU Zhiwei <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > target/riscv/cpu.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index a120d474df..1cb0436187 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -422,6 +422,16 @@ static void riscv_cpu_reset(DeviceState *dev) > */ > env->mstatus = set_field(env->mstatus, MSTATUS64_SXL, env->misa_mxl); > env->mstatus = set_field(env->mstatus, MSTATUS64_UXL, env->misa_mxl); > + if (riscv_has_ext(env, RVH)) { > + env->vsstatus = set_field(env->vsstatus, > + MSTATUS64_SXL, env->misa_mxl); > + env->vsstatus = set_field(env->vsstatus, > + MSTATUS64_UXL, env->misa_mxl); > + env->mstatus_hs = set_field(env->mstatus_hs, > + MSTATUS64_SXL, env->misa_mxl); > + env->mstatus_hs = set_field(env->mstatus_hs, > + MSTATUS64_UXL, env->misa_mxl); > + } > } > env->mcause = 0; > env->pc = env->resetvec; > -- > 2.25.1 > >
