Skip to content

Commit e2fe84f

Browse files
committed
KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change
Call kvm_mmu_zap_all_fast() directly when flushing a memslot instead of bouncing through the page-track mechanism. KVM (unfortunately) needs to zap and flush all page tables on memslot DELETE/MOVE irrespective of whether KVM is shadowing guest page tables. This will allow changing KVM to register a page-track notifier on the first shadow root allocation, and will also allow deleting the misguided kvm_page_track_flush_slot() hook itself once KVM-GT also moves to a different method for reacting to memslot changes. No functional change intended. Cc: Yan Zhao <yan.y.zhao@intel.com> Link: https://lore.kernel.org/r/20221110014821.1548347-2-seanjc@google.com Reviewed-by: Yan Zhao <yan.y.zhao@intel.com> Tested-by: Yongwei Ma <yongwei.ma@intel.com> Link: https://lore.kernel.org/r/20230729013535.1070024-14-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent 2f50299 commit e2fe84f

File tree

1 file changed

+2
-8
lines changed

1 file changed

+2
-8
lines changed

arch/x86/kvm/mmu/mmu.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6177,13 +6177,6 @@ static bool kvm_has_zapped_obsolete_pages(struct kvm *kvm)
61776177
return unlikely(!list_empty_careful(&kvm->arch.zapped_obsolete_pages));
61786178
}
61796179

6180-
static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,
6181-
struct kvm_memory_slot *slot,
6182-
struct kvm_page_track_notifier_node *node)
6183-
{
6184-
kvm_mmu_zap_all_fast(kvm);
6185-
}
6186-
61876180
int kvm_mmu_init_vm(struct kvm *kvm)
61886181
{
61896182
struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker;
@@ -6201,7 +6194,6 @@ int kvm_mmu_init_vm(struct kvm *kvm)
62016194
}
62026195

62036196
node->track_write = kvm_mmu_pte_write;
6204-
node->track_flush_slot = kvm_mmu_invalidate_zap_pages_in_memslot;
62056197
kvm_page_track_register_notifier(kvm, node);
62066198

62076199
kvm->arch.split_page_header_cache.kmem_cache = mmu_page_header_cache;
@@ -6743,6 +6735,8 @@ void kvm_arch_flush_shadow_all(struct kvm *kvm)
67436735
void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
67446736
struct kvm_memory_slot *slot)
67456737
{
6738+
kvm_mmu_zap_all_fast(kvm);
6739+
67466740
kvm_page_track_flush_slot(kvm, slot);
67476741
}
67486742

0 commit comments

Comments
 (0)