[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240530210714.364118-15-rick.p.edgecombe@intel.com>
Date: Thu, 30 May 2024 14:07:13 -0700
From: Rick Edgecombe <rick.p.edgecombe@...el.com>
To: seanjc@...gle.com,
pbonzini@...hat.com,
kvm@...r.kernel.org
Cc: kai.huang@...el.com,
dmatlack@...gle.com,
erdemaktas@...gle.com,
isaku.yamahata@...il.com,
linux-kernel@...r.kernel.org,
sagis@...gle.com,
yan.y.zhao@...el.com,
rick.p.edgecombe@...el.com,
Sean Christopherson <sean.j.christopherson@...el.com>,
Isaku Yamahata <isaku.yamahata@...el.com>
Subject: [PATCH v2 14/15] KVM: x86/tdp_mmu: Invalidate correct roots
From: Sean Christopherson <sean.j.christopherson@...el.com>
When invalidating roots, respect the root type passed.
kvm_tdp_mmu_invalidate_roots() is called with different root types. For
kvm_mmu_zap_all_fast() it only operates on shared roots. But when tearing
down a VM it needs to invalidate all roots. Check the root type in root
iterator.
Signed-off-by: Sean Christopherson <sean.j.christopherson@...el.com>
Co-developed-by: Isaku Yamahata <isaku.yamahata@...el.com>
Signed-off-by: Isaku Yamahata <isaku.yamahata@...el.com>
[evolved quite a bit from original author's patch]
Co-developed-by: Rick Edgecombe <rick.p.edgecombe@...el.com>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@...el.com>
---
TDX MMU Prep:
- Rename from "Don't zap private pages for unsupported cases", and split
many parts out.
- Don't support MTRR, apic zapping (Rick)
- Detangle private/shared alias logic in kvm_tdp_mmu_unmap_gfn_range()
(Rick)
- Fix TLB flushing bug debugged by (Chao Gao)
https://lore.kernel.org/kvm/Zh8yHEiOKyvZO+QR@chao-email/
- Split out MTRR part
- Use enum based root iterators (Sean)
- Reorder logic in kvm_mmu_zap_memslot_leafs().
- Replace skip_private with enum kvm_tdp_mmu_root_type.
---
arch/x86/kvm/mmu/tdp_mmu.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
index da6024b8295f..0caa1029b6bd 100644
--- a/arch/x86/kvm/mmu/tdp_mmu.c
+++ b/arch/x86/kvm/mmu/tdp_mmu.c
@@ -1135,6 +1135,7 @@ void kvm_tdp_mmu_zap_invalidated_roots(struct kvm *kvm)
void kvm_tdp_mmu_invalidate_roots(struct kvm *kvm,
enum kvm_process process_types)
{
+ enum kvm_tdp_mmu_root_types root_types = kvm_process_to_root_types(kvm, process_types);
struct kvm_mmu_page *root;
/*
@@ -1158,6 +1159,9 @@ void kvm_tdp_mmu_invalidate_roots(struct kvm *kvm,
* or get/put references to roots.
*/
list_for_each_entry(root, &kvm->arch.tdp_mmu_roots, link) {
+ if (!tdp_mmu_root_match(root, root_types))
+ continue;
+
/*
* Note, invalid roots can outlive a memslot update! Invalid
* roots must be *zapped* before the memslot update completes,
--
2.34.1
Powered by blists - more mailing lists