From f0bb493a44b00c1970e70bd1f2778b7e730a35e0 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Thu, 7 Jul 2022 15:49:23 +0100 Subject: [PATCH] Revert "Revert "ANDROID: KVM: arm64: Avoid switching to guest context if guest is already loaded"" This reverts commit 6b08ae02c5c2ef2597e9e340b370f09346a7b2d6. Bug: 233587962 Signed-off-by: Will Deacon Change-Id: I550d659aa6cd77c20873b403e7c2bd813502d8b7 --- arch/arm64/kvm/hyp/nvhe/tlb.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/arch/arm64/kvm/hyp/nvhe/tlb.c b/arch/arm64/kvm/hyp/nvhe/tlb.c index d296d617f589..82f8a5195505 100644 --- a/arch/arm64/kvm/hyp/nvhe/tlb.c +++ b/arch/arm64/kvm/hyp/nvhe/tlb.c @@ -17,6 +17,17 @@ struct tlb_inv_context { static void __tlb_switch_to_guest(struct kvm_s2_mmu *mmu, struct tlb_inv_context *cxt) { + struct kvm_cpu_context *host_ctxt; + struct kvm_vcpu *vcpu; + + host_ctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt; + vcpu = host_ctxt->__hyp_running_vcpu; + + if (vcpu) { + WARN_ON(vcpu->arch.hw_mmu->vmid.vmid != mmu->vmid.vmid); + return; + } + if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) { u64 val; @@ -45,6 +56,12 @@ static void __tlb_switch_to_guest(struct kvm_s2_mmu *mmu, static void __tlb_switch_to_host(struct tlb_inv_context *cxt) { + struct kvm_cpu_context *host_ctxt; + + host_ctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt; + if (host_ctxt->__hyp_running_vcpu) + return; + __load_host_stage2(); if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) {