From: Sean Christopherson <seanjc@google.com>
To: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Paolo Bonzini <pbonzini@redhat.com>,
Lai Jiangshan <jiangshan.ljs@antgroup.com>,
Jonathan Corbet <corbet@lwn.net>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
linux-doc@vger.kernel.org
Subject: Re: [RFC PATCH V3 2/4] KVM: X86: Introduce role.glevel for level expanded pagetable
Date: Tue, 12 Apr 2022 21:31:32 +0000 [thread overview]
Message-ID: <YlXvtMqWpyM9Bjox@google.com> (raw)
In-Reply-To: <20220330132152.4568-3-jiangshanlai@gmail.com>
On Wed, Mar 30, 2022, Lai Jiangshan wrote:
> + role.glevel:
> + The level in guest pagetable if the sp is indirect. Is 0 if the sp
> + is direct without corresponding guest pagetable, like TDP or !CR0.PG.
> + When role.level > guest paging level, indirect sp is created on the
> + top with role.glevel = guest paging level and acks as passthrough sp
s/acks/acts
> + and its contents are specially installed rather than the translations
> + of the corresponding guest pagetable.
> gfn:
> Either the guest page table containing the translations shadowed by this
> page, or the base page frame for linear translations. See role.direct.
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 9694dd5e6ccc..67e1bccaf472 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -314,7 +314,7 @@ struct kvm_kernel_irq_routing_entry;
> * cr0_wp=0, therefore these three bits only give rise to 5 possibilities.
> *
> * Therefore, the maximum number of possible upper-level shadow pages for a
> - * single gfn is a bit less than 2^13.
> + * single gfn is a bit less than 2^15.
> */
> union kvm_mmu_page_role {
> u32 word;
> @@ -331,7 +331,8 @@ union kvm_mmu_page_role {
> unsigned smap_andnot_wp:1;
> unsigned ad_disabled:1;
> unsigned guest_mode:1;
> - unsigned :6;
> + unsigned glevel:4;
We don't need 4 bits for this. Crossing our fingers that we never had to shadow
a 2-level guest with a 6-level host, we can do:
unsigned passthrough_delta:2;
Where the field is ignored if direct=1, '0' for non-passthrough, and 1-3 to handle
shadow_root_level - guest_root_level. Basically the same idea as Paolo's smushing
of direct+passthrough into mapping_level, just dressed up differently.
Side topic, we should steal a bit back from "level", or at least document that we
can steal a bit if necessary.
> + unsigned :2;
>
> /*
> * This is left at the top of the word so that
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index 02eae110cbe1..d53037df8177 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -737,8 +737,12 @@ static void mmu_free_pte_list_desc(struct pte_list_desc *pte_list_desc)
>
> static gfn_t kvm_mmu_page_get_gfn(struct kvm_mmu_page *sp, int index)
> {
> - if (!sp->role.direct)
> + if (!sp->role.direct) {
> + if (unlikely(sp->role.glevel < sp->role.level))
Regardless of whatever magic we end up using, there should be an is_passthrough_sp()
helper to wrap the magic.
> + return sp->gfn;
> +
> return sp->gfns[index];
> + }
>
> return sp->gfn + (index << ((sp->role.level - 1) * PT64_LEVEL_BITS));
> }
next prev parent reply other threads:[~2022-04-12 23:24 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-30 13:21 [RFC PATCH V3 0/4] KVM: X86: Add and use shadow page with level expanded or acting as pae_root Lai Jiangshan
2022-03-30 13:21 ` [RFC PATCH V3 1/4] KVM: X86: Add arguement gfn and role to kvm_mmu_alloc_page() Lai Jiangshan
2022-03-30 13:21 ` [RFC PATCH V3 2/4] KVM: X86: Introduce role.glevel for level expanded pagetable Lai Jiangshan
2022-03-30 16:01 ` Lai Jiangshan
2022-04-12 21:31 ` Sean Christopherson [this message]
2022-04-13 4:13 ` Lai Jiangshan
2022-04-13 8:38 ` Paolo Bonzini
2022-04-13 14:42 ` Sean Christopherson
2022-04-13 14:46 ` Paolo Bonzini
2022-04-13 15:32 ` Sean Christopherson
2022-04-13 16:03 ` Paolo Bonzini
2022-04-14 15:51 ` Sean Christopherson
2022-04-14 16:32 ` Lai Jiangshan
2022-03-30 13:21 ` [RFC PATCH V3 3/4] KVM: X86: Alloc role.pae_root shadow page Lai Jiangshan
2022-04-12 21:14 ` Sean Christopherson
2022-04-14 9:07 ` Lai Jiangshan
2022-04-14 9:08 ` Paolo Bonzini
2022-04-14 9:32 ` Lai Jiangshan
2022-04-14 10:04 ` Paolo Bonzini
2022-04-14 11:06 ` Lai Jiangshan
2022-04-14 14:12 ` Paolo Bonzini
2022-04-14 14:42 ` Sean Christopherson
2022-04-14 13:35 ` Lai Jiangshan
2022-04-14 14:52 ` Sean Christopherson
2022-03-30 13:21 ` [RFC PATCH V3 4/4] KVM: X86: Use passthrough and pae_root shadow page for 32bit guests Lai Jiangshan
2022-04-12 21:34 ` Sean Christopherson
2022-04-12 9:35 ` [RFC PATCH V3 0/4] KVM: X86: Add and use shadow page with level expanded or acting as pae_root Lai Jiangshan
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=YlXvtMqWpyM9Bjox@google.com \
--to=seanjc@google.com \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jiangshan.ljs@antgroup.com \
--cc=jiangshanlai@gmail.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
--cc=x86@kernel.org \
/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.