]> git.dujemihanovic.xyz Git - linux.git/commitdiff
KVM: RISC-V: Unmap stage2 mapping when deleting/moving a memslot
authorSean Christopherson <seanjc@google.com>
Thu, 4 Nov 2021 16:41:06 +0000 (16:41 +0000)
committerAnup Patel <anup@brainfault.org>
Mon, 22 Nov 2021 05:06:16 +0000 (10:36 +0530)
Unmap stage2 page tables when a memslot is being deleted or moved.  It's
the architectures' responsibility to ensure existing mappings are removed
when kvm_arch_flush_shadow_memslot() returns.

Fixes: 9d05c1fee837 ("RISC-V: KVM: Implement stage2 page table programming")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Anup Patel <anup.patel@wdc.com>
arch/riscv/kvm/mmu.c

index d81bae8eb55ea0a0f81bed64b5c3ab589a99a00a..fc058ff5f4b6f3ac393d58ea25d0446a19fc7664 100644 (file)
@@ -453,6 +453,12 @@ void kvm_arch_flush_shadow_all(struct kvm *kvm)
 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
                                   struct kvm_memory_slot *slot)
 {
+       gpa_t gpa = slot->base_gfn << PAGE_SHIFT;
+       phys_addr_t size = slot->npages << PAGE_SHIFT;
+
+       spin_lock(&kvm->mmu_lock);
+       stage2_unmap_range(kvm, gpa, size, false);
+       spin_unlock(&kvm->mmu_lock);
 }
 
 void kvm_arch_commit_memory_region(struct kvm *kvm,