On Thu, 21 Mar 2024 at 13:10, Jinjie Ruan <ruanjin...@huawei.com> wrote: > > Add ALLINT MSR (immediate) to decodetree, in which the CRm is 0b000x. The > EL0 check is necessary to ALLINT, and the EL1 check is necessary when > imm == 1. So implement it inline for EL2/3, or EL1 with imm==0. Avoid the > unconditional write to pc and use raise_exception_ra to unwind.
> +void HELPER(msr_set_allint_el1)(CPUARMState *env) > +{ > + /* ALLINT update to PSTATE. */ > + if (arm_hcrx_el2_eff(env) & HCRX_TALLINT) { > + raise_exception_ra(env, EXCP_UDEF, > + syn_aa64_sysregtrap(0, 1, 0, 4, 1, 0x1f, 0), > + exception_target_el(env), GETPC()); > + } > + > + env->pstate |= PSTATE_ALLINT; > +} This is a hypervisor trap from EL1 to EL2, so the target_el argument to raise_exception_ra() should be "2", not "exception_target_el(env)". Otherwise we will trap to EL1. thanks -- PMM