From cc2b97cd8df0a01e8492ce5f0262e41a95b30881 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Thu, 7 Jul 2022 15:51:17 +0100 Subject: [PATCH] Revert "ANDROID: KVM: arm64: pkvm: Plug in cache invalidation for non-protected guests" This reverts commit a1d06af5bf754cfe3815de70a086aa1208e21279. Bug: 233587962 Signed-off-by: Will Deacon Change-Id: Ibe4bfbcda3b20a4e49dec44134e7c2976822f1b6 --- arch/arm64/kvm/mmu.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 1eb8c18b2c67..e8d3c67c97b8 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -190,22 +190,6 @@ static void unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64 si __unmap_stage2_range(mmu, start, size, true); } -static void pkvm_stage2_flush(struct kvm *kvm) -{ - struct kvm_pinned_page *ppage; - - /* - * Contrary to stage2_apply_range(), we don't need to check - * whether the VM is being torn down, as this is always called - * from a vcpu thread, and the list is only ever freed on VM - * destroy (which only occurs when all vcpu are gone). - */ - list_for_each_entry(ppage, &kvm->arch.pkvm.pinned_pages, link) { - __clean_dcache_guest_page(page_address(ppage->page), PAGE_SIZE); - cond_resched_lock(&kvm->mmu_lock); - } -} - static void stage2_flush_memslot(struct kvm *kvm, struct kvm_memory_slot *memslot) { @@ -231,13 +215,9 @@ static void stage2_flush_vm(struct kvm *kvm) idx = srcu_read_lock(&kvm->srcu); spin_lock(&kvm->mmu_lock); - if (!is_protected_kvm_enabled()) { - slots = kvm_memslots(kvm); - kvm_for_each_memslot(memslot, slots) - stage2_flush_memslot(kvm, memslot); - } else if (!kvm_vm_is_protected(kvm)) { - pkvm_stage2_flush(kvm); - } + slots = kvm_memslots(kvm); + kvm_for_each_memslot(memslot, slots) + stage2_flush_memslot(kvm, memslot); spin_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); @@ -1198,7 +1178,6 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, goto dec_account; } - spin_lock(&kvm->mmu_lock); pfn = page_to_pfn(page); ret = pkvm_host_donate_guest(pfn, fault_ipa >> PAGE_SHIFT, vcpu); if (ret) { @@ -1209,13 +1188,13 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, ppage->page = page; INIT_LIST_HEAD(&ppage->link); + spin_lock(&kvm->mmu_lock); list_add(&ppage->link, &kvm->arch.pkvm.pinned_pages); spin_unlock(&kvm->mmu_lock); return 0; unpin: - spin_unlock(&kvm->mmu_lock); unpin_user_pages(&page, 1); dec_account: account_locked_vm(mm, 1, false);