From: Sean Christopherson <seanjc@google.com>
To: David Matlack <dmatlack@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, Ben Gardon <bgardon@google.com>,
Joerg Roedel <joro@8bytes.org>, Jim Mattson <jmattson@google.com>,
Wanpeng Li <wanpengli@tencent.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Janis Schoetterl-Glausch <scgl@linux.vnet.ibm.com>,
Junaid Shahid <junaids@google.com>,
Oliver Upton <oupton@google.com>,
Harish Barathvajasankar <hbarath@google.com>,
Peter Xu <peterx@redhat.com>, Peter Shier <pshier@google.com>,
"Nikunj A . Dadhania" <nikunj@amd.com>
Subject: Re: [PATCH v1 07/13] KVM: x86/mmu: Derive page role from parent
Date: Thu, 6 Jan 2022 20:45:03 +0000 [thread overview]
Message-ID: <YddUz+SanLUgi+jd@google.com> (raw)
In-Reply-To: <20211213225918.672507-8-dmatlack@google.com>
Please include "TDP MMU" somewhere in the shortlog. It's a nice to have, e.g. not
worth forcing if there's more interesting info to put in the shortlog, but in this
case there are plenty of chars to go around. E.g.
KVM: x86/mmu: Derive page role for TDP MMU shadow pages from parent
On Mon, Dec 13, 2021, David Matlack wrote:
> Derive the page role from the parent shadow page, since the only thing
> that changes is the level. This is in preparation for eagerly splitting
> large pages during VM-ioctls which does not have access to the vCPU
s/does/do since VM-ioctls is plural.
> MMU context.
>
> No functional change intended.
>
> Signed-off-by: David Matlack <dmatlack@google.com>
> ---
> arch/x86/kvm/mmu/tdp_mmu.c | 43 ++++++++++++++++++++------------------
> 1 file changed, 23 insertions(+), 20 deletions(-)
>
> diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c
> index 2fb2d7677fbf..582d9a798899 100644
> --- a/arch/x86/kvm/mmu/tdp_mmu.c
> +++ b/arch/x86/kvm/mmu/tdp_mmu.c
> @@ -157,23 +157,8 @@ static struct kvm_mmu_page *tdp_mmu_next_root(struct kvm *kvm,
> if (kvm_mmu_page_as_id(_root) != _as_id) { \
> } else
>
> -static union kvm_mmu_page_role page_role_for_level(struct kvm_vcpu *vcpu,
> - int level)
> -{
> - union kvm_mmu_page_role role;
> -
> - role = vcpu->arch.mmu->mmu_role.base;
> - role.level = level;
> - role.direct = true;
> - role.has_4_byte_gpte = false;
> - role.access = ACC_ALL;
> - role.ad_disabled = !shadow_accessed_mask;
> -
> - return role;
> -}
> -
> static struct kvm_mmu_page *alloc_tdp_mmu_page(struct kvm_vcpu *vcpu, gfn_t gfn,
> - int level)
> + union kvm_mmu_page_role role)
> {
> struct kvm_mmu_page *sp;
>
> @@ -181,7 +166,7 @@ static struct kvm_mmu_page *alloc_tdp_mmu_page(struct kvm_vcpu *vcpu, gfn_t gfn,
> sp->spt = kvm_mmu_memory_cache_alloc(&vcpu->arch.mmu_shadow_page_cache);
> set_page_private(virt_to_page(sp->spt), (unsigned long)sp);
>
> - sp->role.word = page_role_for_level(vcpu, level).word;
> + sp->role = role;
> sp->gfn = gfn;
> sp->tdp_mmu_page = true;
>
> @@ -190,6 +175,19 @@ static struct kvm_mmu_page *alloc_tdp_mmu_page(struct kvm_vcpu *vcpu, gfn_t gfn,
> return sp;
> }
>
> +static struct kvm_mmu_page *alloc_child_tdp_mmu_page(struct kvm_vcpu *vcpu, struct tdp_iter *iter)
Newline please, this is well over 80 chars.
static struct kvm_mmu_page *alloc_child_tdp_mmu_page(struct kvm_vcpu *vcpu,
struct tdp_iter *iter)
> +{
> + struct kvm_mmu_page *parent_sp;
> + union kvm_mmu_page_role role;
> +
> + parent_sp = sptep_to_sp(rcu_dereference(iter->sptep));
> +
> + role = parent_sp->role;
> + role.level--;
> +
> + return alloc_tdp_mmu_page(vcpu, iter->gfn, role);
> +}
> +
> hpa_t kvm_tdp_mmu_get_vcpu_root_hpa(struct kvm_vcpu *vcpu)
> {
> union kvm_mmu_page_role role;
> @@ -198,7 +196,12 @@ hpa_t kvm_tdp_mmu_get_vcpu_root_hpa(struct kvm_vcpu *vcpu)
>
> lockdep_assert_held_write(&kvm->mmu_lock);
>
> - role = page_role_for_level(vcpu, vcpu->arch.mmu->shadow_root_level);
> + role = vcpu->arch.mmu->mmu_role.base;
> + role.level = vcpu->arch.mmu->shadow_root_level;
> + role.direct = true;
> + role.has_4_byte_gpte = false;
> + role.access = ACC_ALL;
> + role.ad_disabled = !shadow_accessed_mask;
Hmm, so _all_ of this unnecessary, i.e. this can simply be:
role = vcpu->arch.mmu->mmu_role.base;
Probably better to handle everything except .level in a separate prep commit.
I'm not worried about the cost, I want to avoid potential confusion as to why the
TDP MMU is apparently "overriding" these fields.
next prev parent reply other threads:[~2022-01-06 20:45 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-13 22:59 [PATCH v1 00/13] KVM: x86/mmu: Eager Page Splitting for the TDP MMU David Matlack
2021-12-13 22:59 ` [PATCH v1 01/13] KVM: x86/mmu: Rename rmap_write_protect to kvm_vcpu_write_protect_gfn David Matlack
2022-01-06 0:35 ` Sean Christopherson
2021-12-13 22:59 ` [PATCH v1 02/13] KVM: x86/mmu: Rename __rmap_write_protect to rmap_write_protect David Matlack
2022-01-06 0:35 ` Sean Christopherson
2021-12-13 22:59 ` [PATCH v1 03/13] KVM: x86/mmu: Automatically update iter->old_spte if cmpxchg fails David Matlack
2022-01-04 10:13 ` Peter Xu
2022-01-04 17:29 ` Ben Gardon
2022-01-06 0:54 ` Sean Christopherson
2022-01-06 18:04 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 04/13] KVM: x86/mmu: Factor out logic to atomically install a new page table David Matlack
2022-01-04 10:32 ` Peter Xu
2022-01-04 18:26 ` David Matlack
2022-01-05 1:00 ` Peter Xu
2022-01-06 20:12 ` Sean Christopherson
2022-01-06 22:56 ` David Matlack
2022-01-07 18:24 ` David Matlack
2022-01-07 21:39 ` Sean Christopherson
2021-12-13 22:59 ` [PATCH v1 05/13] KVM: x86/mmu: Move restore_acc_track_spte to spte.c David Matlack
2022-01-04 10:33 ` Peter Xu
2022-01-06 20:27 ` Sean Christopherson
2022-01-06 22:58 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 06/13] KVM: x86/mmu: Refactor tdp_mmu iterators to take kvm_mmu_page root David Matlack
2022-01-04 10:35 ` Peter Xu
2022-01-06 20:34 ` Sean Christopherson
2022-01-06 22:57 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 07/13] KVM: x86/mmu: Derive page role from parent David Matlack
2022-01-05 7:51 ` Peter Xu
2022-01-06 20:45 ` Sean Christopherson [this message]
2022-01-06 23:00 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 08/13] KVM: x86/mmu: Refactor TDP MMU child page initialization David Matlack
2022-01-05 7:51 ` Peter Xu
2022-01-06 20:59 ` Sean Christopherson
2022-01-06 22:08 ` David Matlack
2022-01-06 23:02 ` Sean Christopherson
2021-12-13 22:59 ` [PATCH v1 09/13] KVM: x86/mmu: Split huge pages when dirty logging is enabled David Matlack
2022-01-05 7:54 ` Peter Xu
2022-01-05 17:49 ` David Matlack
2022-01-06 22:48 ` Sean Christopherson
2022-01-06 21:28 ` Sean Christopherson
2022-01-06 22:20 ` David Matlack
2022-01-06 22:56 ` Sean Christopherson
2022-01-07 2:02 ` Peter Xu
2022-01-07 2:06 ` Peter Xu
2021-12-13 22:59 ` [PATCH v1 10/13] KVM: Push MMU locking down into kvm_arch_mmu_enable_log_dirty_pt_masked David Matlack
2021-12-13 22:59 ` [PATCH v1 11/13] KVM: x86/mmu: Split huge pages during CLEAR_DIRTY_LOG David Matlack
2022-01-05 9:02 ` Peter Xu
2022-01-05 17:55 ` David Matlack
2022-01-05 17:57 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 12/13] KVM: x86/mmu: Add tracepoint for splitting huge pages David Matlack
2022-01-05 8:38 ` Peter Xu
2022-01-06 23:14 ` Sean Christopherson
2022-01-07 0:54 ` David Matlack
2021-12-13 22:59 ` [PATCH v1 13/13] KVM: selftests: Add an option to disable MANUAL_PROTECT_ENABLE and INITIALLY_SET David Matlack
2022-01-05 8:38 ` Peter Xu
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=YddUz+SanLUgi+jd@google.com \
--to=seanjc@google.com \
--cc=bgardon@google.com \
--cc=dmatlack@google.com \
--cc=hbarath@google.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=junaids@google.com \
--cc=kvm@vger.kernel.org \
--cc=nikunj@amd.com \
--cc=oupton@google.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=pshier@google.com \
--cc=scgl@linux.vnet.ibm.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.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;
as well as URLs for NNTP newsgroup(s).