[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250616181144.2874709-1-jthoughton@google.com>
Date: Mon, 16 Jun 2025 18:11:44 +0000
From: James Houghton <jthoughton@...gle.com>
To: lkp@...el.com, pbonzini@...hat.com, seanjc@...gle.com
Cc: dmatlack@...gle.com, jthoughton@...gle.com, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, llvm@...ts.linux.dev,
oe-kbuild-all@...ts.linux.dev, vipinsh@...gle.com
Subject: Re: [PATCH v4 3/7] KVM: x86/mmu: Recover TDP MMU NX huge pages using
MMU read lock
> All errors (new ones prefixed by >>):
>
> arch/x86/kvm/mmu/mmu.c:7570:28: error: use of undeclared identifier 'KVM_TDP_MMU'
> 7570 | bool is_tdp = mmu_type == KVM_TDP_MMU;
> | ^
> >> arch/x86/kvm/mmu/mmu.c:7594:25: error: no member named 'tdp_mmu_pages_lock' in 'struct kvm_arch'
> 7594 | spin_lock(&kvm->arch.tdp_mmu_pages_lock);
> | ~~~~~~~~~ ^
> arch/x86/kvm/mmu/mmu.c:7597:28: error: no member named 'tdp_mmu_pages_lock' in 'struct kvm_arch'
> 7597 | spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
> | ~~~~~~~~~ ^
> arch/x86/kvm/mmu/mmu.c:7617:27: error: no member named 'tdp_mmu_pages_lock' in 'struct kvm_arch'
> 7617 | spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
> | ~~~~~~~~~ ^
> 4 errors generated.
Fixup for this below.
I also realized that the variable name `is_tdp` is bad/misleading, so I've
changed it to `is_tdp_mmu` as part of this fixup too. Sean/Paolo, let me know
if I should just go ahead and post the fixed series, given the size of this
fixup.
I don't really like having to #ifdef all the places where we take
tdp_mmu_pages_lock, but I couldn't find a way to avoid that. Even doing
#ifndef CONFIG_X86_64
#define is_tdp_mmu false
#endif
didn't work. :(
Anyway, here's the fixup:
diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index 10ba328b664d7..7df1b4ead705b 100644
--- a/arch/x86/kvm/mmu/mmu.c
+++ b/arch/x86/kvm/mmu/mmu.c
@@ -7564,10 +7564,10 @@ static bool kvm_mmu_sp_dirty_logging_enabled(struct kvm *kvm,
}
static void kvm_recover_nx_huge_pages(struct kvm *kvm,
- enum kvm_mmu_type mmu_type)
+ const enum kvm_mmu_type mmu_type)
{
unsigned long to_zap = nx_huge_pages_to_zap(kvm, mmu_type);
- bool is_tdp = mmu_type == KVM_TDP_MMU;
+ bool is_tdp_mmu = mmu_type == KVM_TDP_MMU;
struct list_head *nx_huge_pages;
struct kvm_mmu_page *sp;
LIST_HEAD(invalid_list);
@@ -7577,7 +7577,7 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
nx_huge_pages = &kvm->arch.possible_nx_huge_pages[mmu_type].pages;
rcu_idx = srcu_read_lock(&kvm->srcu);
- if (is_tdp)
+ if (is_tdp_mmu)
read_lock(&kvm->mmu_lock);
else
write_lock(&kvm->mmu_lock);
@@ -7590,11 +7590,15 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
rcu_read_lock();
for ( ; to_zap; --to_zap) {
- if (is_tdp)
+#ifdef CONFIG_X86_64
+ if (is_tdp_mmu)
spin_lock(&kvm->arch.tdp_mmu_pages_lock);
+#endif
if (list_empty(nx_huge_pages)) {
- if (is_tdp)
+#ifdef CONFIG_X86_64
+ if (is_tdp_mmu)
spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
+#endif
break;
}
@@ -7613,8 +7617,10 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
unaccount_nx_huge_page(kvm, sp);
- if (is_tdp)
+#ifdef CONFIG_X86_64
+ if (is_tdp_mmu)
spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
+#endif
/*
* Do not attempt to recover any NX Huge Pages that are being
@@ -7624,7 +7630,7 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
* logging is disabled.
*/
if (!kvm_mmu_sp_dirty_logging_enabled(kvm, sp)) {
- if (is_tdp)
+ if (is_tdp_mmu)
flush |= kvm_tdp_mmu_zap_possible_nx_huge_page(kvm, sp);
else
kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list);
@@ -7637,7 +7643,7 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
kvm_mmu_remote_flush_or_zap(kvm, &invalid_list, flush);
rcu_read_unlock();
- if (is_tdp)
+ if (is_tdp_mmu)
cond_resched_rwlock_read(&kvm->mmu_lock);
else
cond_resched_rwlock_write(&kvm->mmu_lock);
@@ -7650,7 +7656,7 @@ static void kvm_recover_nx_huge_pages(struct kvm *kvm,
rcu_read_unlock();
- if (is_tdp)
+ if (is_tdp_mmu)
read_unlock(&kvm->mmu_lock);
else
write_unlock(&kvm->mmu_lock);
Powered by blists - more mailing lists