diff mbox series

[v2] kvm/x86: Fix 'lpages' kvm stat for TDM MMU

Message ID 1619783551459.35424@amazon.de (mailing list archive)
State New, archived
Headers show
Series [v2] kvm/x86: Fix 'lpages' kvm stat for TDM MMU | expand

Commit Message

Shahin, Md Shahadat Hossain April 30, 2021, 11:52 a.m. UTC
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>
---
 arch/x86/kvm/mmu/tdp_mmu.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Ben Gardon May 3, 2021, 4:25 p.m. UTC | #1
On Fri, Apr 30, 2021 at 4:52 AM Shahin, Md Shahadat Hossain
<shahinmd@amazon.de> wrote:
>
> 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>

Reviewed-by: Ben Gardon <bgardon@google.com>

Thanks for fixing this!

> ---
>  arch/x86/kvm/mmu/tdp_mmu.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
> index bc1283ed4db6..f89a140b8dea 100644
> --- a/arch/x86/kvm/mmu/tdp_mmu.c
> +++ b/arch/x86/kvm/mmu/tdp_mmu.c
> @@ -240,6 +240,13 @@ static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
>         if (old_spte == new_spte)
>                 return;
>
> +       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/
> --
> 2.17.1
>
>
>
> Amazon Development Center Germany GmbH
> Krausenstr. 38
> 10117 Berlin
> Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
> Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
> Sitz: Berlin
> Ust-ID: DE 289 237 879
>
>
>
diff mbox series

Patch

diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
index bc1283ed4db6..f89a140b8dea 100644
--- a/arch/x86/kvm/mmu/tdp_mmu.c
+++ b/arch/x86/kvm/mmu/tdp_mmu.c
@@ -240,6 +240,13 @@  static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
 	if (old_spte == new_spte)
 		return;
 
+	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/