mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 01:52:03 +02:00
KVM: arm64: Engage NV3 ERET trap elision
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@arm.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://patch.msgid.link/20260730071022.296811-25-maz@kernel.org Signed-off-by: Oliver Upton <oupton@kernel.org>
This commit is contained in:
parent
62ed180231
commit
c962853bf5
|
|
@ -705,6 +705,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 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__ */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/*
|
||||
* Going through the whole put/load motions is a waste of time
|
||||
* if this is a VHE guest hypervisor returning to its own
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user