summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorShahin, Md Shahadat Hossain <shahinmd@amazon.de>2021-04-30 13:52:31 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2021-05-03 17:25:34 +0200
commit1699f65c8b658d434fe92563c906cd1a136c9cb6 (patch)
treefd2737addd3b7f5483f4c5abb8e366e750d49c23 /arch
parentKVM: x86/mmu: Avoid unnecessary page table allocation in kvm_tdp_mmu_map() (diff)
downloadlinux-1699f65c8b658d434fe92563c906cd1a136c9cb6.tar.xz
linux-1699f65c8b658d434fe92563c906cd1a136c9cb6.zip
kvm/x86: Fix 'lpages' kvm stat for TDM MMU
Large pages not being created properly may result in increased memory access time. The 'lpages' kvm stat used to keep track of the current number of large pages in the system, but with TDP MMU enabled the stat is not showing the correct number. This patch extends the lpages counter to cover the TDP case. Signed-off-by: Md Shahadat Hossain Shahin <shahinmd@amazon.de> Cc: Bartosz Szczepanek <bsz@amazon.de> Message-Id: <1619783551459.35424@amazon.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kvm/mmu/tdp_mmu.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
index 3c8284841bed..c743894fe0b7 100644
--- a/arch/x86/kvm/mmu/tdp_mmu.c
+++ b/arch/x86/kvm/mmu/tdp_mmu.c
@@ -444,6 +444,13 @@ static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
trace_kvm_tdp_mmu_spte_changed(as_id, gfn, level, old_spte, new_spte);
+ if (is_large_pte(old_spte) != is_large_pte(new_spte)) {
+ if (is_large_pte(old_spte))
+ atomic64_sub(1, (atomic64_t*)&kvm->stat.lpages);
+ else
+ atomic64_add(1, (atomic64_t*)&kvm->stat.lpages);
+ }
+
/*
* The only times a SPTE should be changed from a non-present to
* non-present state is when an MMIO entry is installed/modified/