[PATCH v3 24/28] KVM: arm64: Engage NV3 ERET trap elision
Yao Yuan
yaoyuan at linux.alibaba.com
Fri Jul 24 01:40:38 PDT 2026
On Wed, Jul 22, 2026 at 08:42:30AM +0800, Marc Zyngier wrote:
> When running on NV3 HW, always engage ERET trap elision when running
> the L1 context, as there is no benefit in not doing so.
>
> An L1 can itself engage trap elision by setting its own view of
> HCRX_EL2.NVTGE==1, which will subsequently be honored.
>
> Reviewed-by: Joey Gouly <joey.gouly at arm.com>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/include/asm/kvm_emulate.h | 10 ++++++++++
> arch/arm64/kvm/hyp/vhe/switch.c | 4 ++++
> 2 files changed, 14 insertions(+)
>
> diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
> index c562d8171d5e1..b32870a5e1236 100644
> --- a/arch/arm64/include/asm/kvm_emulate.h
> +++ b/arch/arm64/include/asm/kvm_emulate.h
> @@ -706,6 +706,16 @@ static inline void vcpu_set_hcrx(struct kvm_vcpu *vcpu)
>
> if (kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_V))
> vcpu->arch.hcrx_el2 |= HCRX_EL2_EnASR;
> +
> + /*
> + * NV3 is a host-specific extension, and we always use it
> + * when present and that the guest uses NV. It may be be
> + * hidden from the guest though.
> + */
> + if (cpus_have_final_cap(ARM64_HAS_NV3) &&
> + vcpu_has_nv(vcpu) && vcpu_el2_e2h_is_set(vcpu)) {
> + vcpu->arch.hcrx_el2 |= HCRX_EL2_NVTGE;
> + }
> }
> }
> #endif /* __ARM64_KVM_EMULATE_H__ */
> diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c
> index cbda9e087db39..4ed745bdde418 100644
> --- a/arch/arm64/kvm/hyp/vhe/switch.c
> +++ b/arch/arm64/kvm/hyp/vhe/switch.c
> @@ -345,6 +345,10 @@ static bool kvm_hyp_handle_eret(struct kvm_vcpu *vcpu, u64 *exit_code)
> u64 esr = kvm_vcpu_get_esr(vcpu);
> u64 spsr, elr, mode;
>
> + /* With NV3, the fast path is handled in HW */
> + if (cpus_have_final_cap(ARM64_HAS_NV3) && vcpu_el2_e2h_is_set(vcpu))
> + return false;
> +
Reviewed-by: Yuan Yao <yaoyuan at linux.alibaba.com>
> /*
> * Going through the whole put/load motions is a waste of time
> * if this is a VHE guest hypervisor returning to its own
> --
> 2.47.3
More information about the linux-arm-kernel
mailing list