mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
KVM: arm64: Don't switch MMU on translation from non-NV context
If calling into the AT code from guest EL1, there is no need to consider any context switch, as we are guaranteed to be in the correct context. Reviewed-by: Oliver Upton <oliver.upton@linux.dev> Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
cb1762904c
commit
61b0280a67
|
|
@ -1285,7 +1285,7 @@ static u64 __kvm_at_s1e01_fast(struct kvm_vcpu *vcpu, u32 op, u64 vaddr)
|
|||
{
|
||||
struct mmu_config config;
|
||||
struct kvm_s2_mmu *mmu;
|
||||
bool fail;
|
||||
bool fail, mmu_cs;
|
||||
u64 par;
|
||||
|
||||
par = SYS_PAR_EL1_F;
|
||||
|
|
@ -1301,8 +1301,13 @@ static u64 __kvm_at_s1e01_fast(struct kvm_vcpu *vcpu, u32 op, u64 vaddr)
|
|||
* If HCR_EL2.{E2H,TGE} == {1,1}, the MMU context is already
|
||||
* the right one (as we trapped from vEL2). If not, save the
|
||||
* full MMU context.
|
||||
*
|
||||
* We are also guaranteed to be in the correct context if
|
||||
* we're not in a nested VM.
|
||||
*/
|
||||
if (vcpu_el2_e2h_is_set(vcpu) && vcpu_el2_tge_is_set(vcpu))
|
||||
mmu_cs = (vcpu_has_nv(vcpu) &&
|
||||
!(vcpu_el2_e2h_is_set(vcpu) && vcpu_el2_tge_is_set(vcpu)));
|
||||
if (!mmu_cs)
|
||||
goto skip_mmu_switch;
|
||||
|
||||
/*
|
||||
|
|
@ -1370,7 +1375,7 @@ skip_mmu_switch:
|
|||
|
||||
write_sysreg_hcr(HCR_HOST_VHE_FLAGS);
|
||||
|
||||
if (!(vcpu_el2_e2h_is_set(vcpu) && vcpu_el2_tge_is_set(vcpu)))
|
||||
if (mmu_cs)
|
||||
__mmu_config_restore(&config);
|
||||
|
||||
return par;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user