From: Rick Edgecombe <rick.p.edgecombe@intel.com>
To: seanjc@google.com, pbonzini@redhat.com, kvm@vger.kernel.org
Cc: kai.huang@intel.com, dmatlack@google.com, erdemaktas@google.com,
isaku.yamahata@gmail.com, linux-kernel@vger.kernel.org,
sagis@google.com, yan.y.zhao@intel.com,
rick.p.edgecombe@intel.com
Subject: [PATCH v4 17/18] KVM: x86/tdp_mmu: Don't zap valid mirror roots in kvm_tdp_mmu_zap_all()
Date: Thu, 18 Jul 2024 14:12:29 -0700 [thread overview]
Message-ID: <20240718211230.1492011-18-rick.p.edgecombe@intel.com> (raw)
In-Reply-To: <20240718211230.1492011-1-rick.p.edgecombe@intel.com>
Don't zap valid mirror roots in kvm_tdp_mmu_zap_all(), which in effect
is only direct roots (invalid and valid).
For TDX, kvm_tdp_mmu_zap_all() is only called during MMU notifier
release. Since, mirrored EPT comes from guest mem, it will never be
mapped to userspace, and won't apply. But in addition to be unnecessary,
mirrored EPT is cleaned up in a special way during VM destruction.
Pass the KVM_INVALID_ROOTS bit into __for_each_tdp_mmu_root_yield_safe()
as well, to clean up invalid direct roots, as is the current behavior.
Co-developed-by: Yan Zhao <yan.y.zhao@intel.com>
Signed-off-by: Yan Zhao <yan.y.zhao@intel.com>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
---
v4:
- New patch
---
arch/x86/kvm/mmu/tdp_mmu.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
index 2f3ba9d477e9..465c9fdb3301 100644
--- a/arch/x86/kvm/mmu/tdp_mmu.c
+++ b/arch/x86/kvm/mmu/tdp_mmu.c
@@ -1044,19 +1044,23 @@ void kvm_tdp_mmu_zap_all(struct kvm *kvm)
struct kvm_mmu_page *root;
/*
- * Zap all roots, including invalid roots, as all SPTEs must be dropped
- * before returning to the caller. Zap directly even if the root is
- * also being zapped by a worker. Walking zapped top-level SPTEs isn't
- * all that expensive and mmu_lock is already held, which means the
- * worker has yielded, i.e. flushing the work instead of zapping here
- * isn't guaranteed to be any faster.
+ * Zap all roots, except valid mirror roots, as all direct SPTEs must
+ * be dropped before returning to the caller. For TDX, mirror roots
+ * don't need handling in response to the mmu notifier (the caller) and
+ * they also won't be invalid until the VM is being torn down.
+ *
+ * Zap directly even if the root is also being zapped by a worker.
+ * Walking zapped top-level SPTEs isn't all that expensive and mmu_lock
+ * is already held, which means the worker has yielded, i.e. flushing
+ * the work instead of zapping here isn't guaranteed to be any faster.
*
* A TLB flush is unnecessary, KVM zaps everything if and only the VM
* is being destroyed or the userspace VMM has exited. In both cases,
* KVM_RUN is unreachable, i.e. no vCPUs will ever service the request.
*/
lockdep_assert_held_write(&kvm->mmu_lock);
- for_each_tdp_mmu_root_yield_safe(kvm, root)
+ __for_each_tdp_mmu_root_yield_safe(kvm, root, -1,
+ KVM_DIRECT_ROOTS | KVM_INVALID_ROOTS)
tdp_mmu_zap_root(kvm, root, false);
}
--
2.34.1
next prev parent reply other threads:[~2024-07-18 21:12 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-18 21:12 [PATCH v4 00/18] TDX MMU prep series part 1 Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 01/18] KVM: x86/mmu: Zap invalid roots with mmu_lock holding for write at uninit Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 02/18] KVM: Add member to struct kvm_gfn_range for target alias Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 03/18] KVM: x86: Add a VM type define for TDX Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 04/18] KVM: x86/mmu: Add an external pointer to struct kvm_mmu_page Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 05/18] KVM: x86/mmu: Add an is_mirror member for union kvm_mmu_page_role Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 06/18] KVM: x86/mmu: Make kvm_tdp_mmu_alloc_root() return void Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 07/18] KVM: x86/tdp_mmu: Take struct kvm in iter loops Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 08/18] KVM: x86/mmu: Support GFN direct bits Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 09/18] KVM: x86/tdp_mmu: Extract root invalid check from tdx_mmu_next_root() Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 10/18] KVM: x86/tdp_mmu: Introduce KVM MMU root types to specify page table type Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 11/18] KVM: x86/tdp_mmu: Take root in tdp_mmu_for_each_pte() Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 12/18] KVM: x86/tdp_mmu: Support mirror root for TDP MMU Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 13/18] KVM: x86/tdp_mmu: Propagate attr_filter to MMU notifier callbacks Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 14/18] KVM: x86/tdp_mmu: Propagate building mirror page tables Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 15/18] KVM: x86/tdp_mmu: Propagate tearing down " Rick Edgecombe
2024-07-18 21:12 ` [PATCH v4 16/18] KVM: x86/tdp_mmu: Take root types for kvm_tdp_mmu_invalidate_all_roots() Rick Edgecombe
2024-07-18 21:12 ` Rick Edgecombe [this message]
2024-07-18 21:12 ` [PATCH v4 18/18] KVM: x86/mmu: Prevent aliased memslot GFNs Rick Edgecombe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240718211230.1492011-18-rick.p.edgecombe@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=dmatlack@google.com \
--cc=erdemaktas@google.com \
--cc=isaku.yamahata@gmail.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=sagis@google.com \
--cc=seanjc@google.com \
--cc=yan.y.zhao@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®