From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
yan.y.zhao@intel.com, isaku.yamahata@intel.com,
binbin.wu@linux.intel.com, rick.p.edgecombe@intel.com
Subject: Re: [PATCH v6 09/18] KVM: x86/tdp_mmu: Extract root invalid check from tdx_mmu_next_root()
Date: Fri, 17 Jan 2025 17:05:42 -0800 [thread overview]
Message-ID: <Z4r-Znz1GQ2E1vMX@google.com> (raw)
In-Reply-To: <20241222193445.349800-10-pbonzini@redhat.com>
On Sun, Dec 22, 2024, Paolo Bonzini wrote:
> From: Isaku Yamahata <isaku.yamahata@intel.com>
>
> Extract tdp_mmu_root_match() to check if the root has given types and use
> it for the root page table iterator. It checks only_invalid now.
>
> TDX KVM operates on a shared page table only (Shared-EPT), a mirrored page
> table only (Secure-EPT), or both based on the operation. KVM MMU notifier
> operations only on shared page table. KVM guest_memfd invalidation
> operations only on mirrored page table, and so on. Introduce a centralized
> matching function instead of open coding matching logic in the iterator.
> The next step is to extend the function to check whether the page is shared
> or private
>
> Link: https://lore.kernel.org/kvm/ZivazWQw1oCU8VBC@google.com/
> Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
> Message-ID: <20240718211230.1492011-10-rick.p.edgecombe@intel.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> arch/x86/kvm/mmu/tdp_mmu.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
> index 5b01038ddce8..e0ccfdd4200b 100644
> --- a/arch/x86/kvm/mmu/tdp_mmu.c
> +++ b/arch/x86/kvm/mmu/tdp_mmu.c
> @@ -92,6 +92,14 @@ void kvm_tdp_mmu_put_root(struct kvm *kvm, struct kvm_mmu_page *root)
> call_rcu(&root->rcu_head, tdp_mmu_free_sp_rcu_callback);
> }
>
> +static bool tdp_mmu_root_match(struct kvm_mmu_page *root, bool only_valid)
> +{
> + if (only_valid && root->role.invalid)
> + return false;
> +
> + return true;
Ugh, this is almost as bad as
if (x)
return true;
return false;
Just do
return !only_valid || root->role.invalid;
And I vote to drop the helper, "match" makes me think about things like roles
and addresses, not just if a root is valid.
> +}
> +
> /*
> * Returns the next root after @prev_root (or the first root if @prev_root is
> * NULL). A reference to the returned root is acquired, and the reference to
> @@ -125,7 +133,7 @@ static struct kvm_mmu_page *tdp_mmu_next_root(struct kvm *kvm,
> typeof(*next_root), link);
>
> while (next_root) {
> - if ((!only_valid || !next_root->role.invalid) &&
> + if (tdp_mmu_root_match(next_root, only_valid) &&
E.g. this can just as easily be
!only_valid || root->role.invalid &&
which is amusingly even fewer characters :-D
> kvm_tdp_mmu_get_root(next_root))
> break;
>
> @@ -176,7 +184,7 @@ static struct kvm_mmu_page *tdp_mmu_next_root(struct kvm *kvm,
> list_for_each_entry(_root, &_kvm->arch.tdp_mmu_roots, link) \
> if (kvm_lockdep_assert_mmu_lock_held(_kvm, false) && \
> ((_as_id >= 0 && kvm_mmu_page_as_id(_root) != _as_id) || \
> - ((_only_valid) && (_root)->role.invalid))) { \
> + !tdp_mmu_root_match((_root), (_only_valid)))) { \
> } else
>
> #define for_each_tdp_mmu_root(_kvm, _root, _as_id) \
> --
> 2.43.5
>
>
next prev parent reply other threads:[~2025-01-18 1:05 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-22 19:34 [PATCH v6 00/18] TDX MMU prep series part 1 Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 01/18] KVM: x86/mmu: Zap invalid roots with mmu_lock held for write at uninit Paolo Bonzini
2024-12-23 7:58 ` Yan Zhao
2024-12-22 19:34 ` [PATCH v6 02/18] KVM: Add member to struct kvm_gfn_range to indicate private/shared Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 03/18] KVM: x86: Add a VM type define for TDX Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 04/18] KVM: x86/mmu: Add an external pointer to struct kvm_mmu_page Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 05/18] KVM: x86/mmu: Add an is_mirror member for union kvm_mmu_page_role Paolo Bonzini
2024-12-23 11:23 ` Yan Zhao
2024-12-22 19:34 ` [PATCH v6 06/18] KVM: x86/mmu: Make kvm_tdp_mmu_alloc_root() return void Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 07/18] KVM: x86/tdp_mmu: Take struct kvm in iter loops Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 08/18] KVM: x86/mmu: Support GFN direct bits Paolo Bonzini
2025-01-18 1:03 ` Sean Christopherson
2024-12-22 19:34 ` [PATCH v6 09/18] KVM: x86/tdp_mmu: Extract root invalid check from tdx_mmu_next_root() Paolo Bonzini
2025-01-18 1:05 ` Sean Christopherson [this message]
2025-01-22 18:20 ` Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 10/18] KVM: x86/tdp_mmu: Introduce KVM MMU root types to specify page table type Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 11/18] KVM: x86/tdp_mmu: Take root in tdp_mmu_for_each_pte() Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 12/18] KVM: x86/tdp_mmu: Support mirror root for TDP MMU Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 13/18] KVM: x86/tdp_mmu: Propagate attr_filter to MMU notifier callbacks Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 14/18] KVM: x86/tdp_mmu: Propagate building mirror page tables Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 15/18] KVM: x86/tdp_mmu: Propagate tearing down " Paolo Bonzini
2025-01-18 1:09 ` Sean Christopherson
2024-12-22 19:34 ` [PATCH v6 16/18] KVM: x86/tdp_mmu: Take root types for kvm_tdp_mmu_invalidate_all_roots() Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 17/18] KVM: x86/tdp_mmu: Don't zap valid mirror roots in kvm_tdp_mmu_zap_all() Paolo Bonzini
2024-12-22 19:34 ` [PATCH v6 18/18] KVM: x86/mmu: Prevent aliased memslot GFNs Paolo Bonzini
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=Z4r-Znz1GQ2E1vMX@google.com \
--to=seanjc@google.com \
--cc=binbin.wu@linux.intel.com \
--cc=isaku.yamahata@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rick.p.edgecombe@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.