From: Sean Christopherson <seanjc@google.com>
To: Yan Zhao <yan.y.zhao@intel.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
pbonzini@redhat.com, chao.gao@intel.com, kai.huang@intel.com,
robert.hoo.linux@gmail.com
Subject: Re: [PATCH v3 08/11] KVM: x86: move vmx code to get EPT memtype when CR0.CD=1 to x86 common code
Date: Thu, 29 Jun 2023 13:42:46 -0700 [thread overview]
Message-ID: <ZJ3sxm6CngYC7pno@google.com> (raw)
In-Reply-To: <ZJzWZEsRWOUrF7TG@yzhao56-desk.sh.intel.com>
On Thu, Jun 29, 2023, Yan Zhao wrote:
> On Wed, Jun 28, 2023 at 03:57:09PM -0700, Sean Christopherson wrote:
> > On Fri, Jun 16, 2023, Yan Zhao wrote:
> > > Move code in vmx.c to get cache disabled memtype when non-coherent DMA
> > > present to x86 common code.
> > >
> > > This is the preparation patch for later implementation of fine-grained gfn
> > > zap for CR0.CD toggles when guest MTRRs are honored.
> > >
> > > No functional change intended.
> > >
> > > Signed-off-by: Yan Zhao <yan.y.zhao@intel.com>
> > > ---
> > > arch/x86/kvm/mtrr.c | 19 +++++++++++++++++++
> > > arch/x86/kvm/vmx/vmx.c | 10 +++++-----
> > > arch/x86/kvm/x86.h | 1 +
> > > 3 files changed, 25 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c
> > > index 3ce58734ad22..b35dd0bc9cad 100644
> > > --- a/arch/x86/kvm/mtrr.c
> > > +++ b/arch/x86/kvm/mtrr.c
> > > @@ -721,3 +721,22 @@ bool kvm_mtrr_check_gfn_range_consistency(struct kvm_vcpu *vcpu, gfn_t gfn,
> > >
> > > return type == mtrr_default_type(mtrr_state);
> > > }
> > > +
> > > +void kvm_mtrr_get_cd_memory_type(struct kvm_vcpu *vcpu, u8 *type, bool *ipat)
> >
> > Hmm, I'm not convinced that this logic is subtle enough to warrant a common
> I added this patch because the memtype to use under CR0.CD=1 is determined by
> vmx specific code (i.e. vmx.c), while mtrr.c is a common code for x86.
>
> I don't know if it's good to assume what vmx.c will return as in below open code.
> (e.g. if someone added IPAT bit for CR0.CD=1 under the quirk, and forgot
> to update the code here, we actually need to zap everything rather than
> zap only non-WB ranges).
>
> That's why I want to introduce a helper and let vmx.c call into it.
> (sorry, I didn't write a good commit message to explain the real intent).
No need to apologize, I fully understood the intent. I'm just not convinced that
the risk of us screwing up this particular case is worth the extra layers of crud
that are necessary to let VMX and MTRRs share the core logic.
Absent emulating CR0.CD=1 with UC, setting IPAT is complete nonsense when KVM is
honoring the guest memtype.
I 100% agree that splitting the logic is less than ideal, but providing a common
helper feels forced and IMO yields significantly less readable code. And exporting
kvm_mtrr_get_cd_memory_type() only adds to the confusion because calling it on
SVM, which can't fully ignore gPAT, is also nonsensical.
next prev parent reply other threads:[~2023-06-29 20:43 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-16 2:31 [PATCH v3 00/11] KVM: x86/mmu: refine memtype related mmu zap Yan Zhao
2023-06-16 2:32 ` [PATCH v3 01/11] KVM: x86/mmu: helpers to return if KVM honors guest MTRRs Yan Zhao
2023-06-16 2:34 ` [PATCH v3 02/11] KVM: x86/mmu: Use KVM honors guest MTRRs helper in kvm_tdp_page_fault() Yan Zhao
2023-06-16 2:35 ` [PATCH v3 03/11] KVM: x86/mmu: Use KVM honors guest MTRRs helper when CR0.CD toggles Yan Zhao
2023-06-28 21:59 ` Sean Christopherson
2023-06-29 1:42 ` Yan Zhao
2023-06-16 2:36 ` [PATCH v3 04/11] KVM: x86/mmu: Use KVM honors guest MTRRs helper when update mtrr Yan Zhao
2023-06-28 22:08 ` Sean Christopherson
2023-06-16 2:37 ` [PATCH v3 05/11] KVM: x86/mmu: zap KVM TDP when noncoherent DMA assignment starts/stops Yan Zhao
2023-06-16 2:37 ` [PATCH v3 06/11] KVM: x86/mmu: move TDP zaps from guest MTRRs update to CR0.CD toggling Yan Zhao
2023-06-16 2:38 ` [PATCH v3 07/11] KVM: VMX: drop IPAT in memtype when CD=1 for KVM_X86_QUIRK_CD_NW_CLEARED Yan Zhao
2023-06-20 2:42 ` Chao Gao
2023-06-20 2:34 ` Yan Zhao
2023-06-20 3:34 ` Chao Gao
2023-06-20 3:19 ` Yan Zhao
2023-06-25 7:14 ` Xiaoyao Li
2023-06-26 0:08 ` Yan Zhao
2023-06-26 3:40 ` Yuan Yao
2023-06-26 3:38 ` Yan Zhao
2023-06-20 3:17 ` Yan Zhao
2023-06-16 2:38 ` [PATCH v3 08/11] KVM: x86: move vmx code to get EPT memtype when CR0.CD=1 to x86 common code Yan Zhao
2023-06-28 22:57 ` Sean Christopherson
2023-06-29 0:55 ` Yan Zhao
2023-06-29 20:42 ` Sean Christopherson [this message]
2023-06-30 7:49 ` Yan Zhao
2023-07-14 7:00 ` Yan Zhao
2023-06-16 2:39 ` [PATCH v3 09/11] KVM: x86/mmu: serialize vCPUs to zap gfn when guest MTRRs are honored Yan Zhao
2023-06-16 7:45 ` Yuan Yao
2023-06-16 7:37 ` Yan Zhao
2023-06-16 8:09 ` Yuan Yao
2023-06-16 7:50 ` Yan Zhao
2023-06-28 23:00 ` Sean Christopherson
2023-06-29 1:51 ` Yan Zhao
2023-06-16 2:41 ` [PATCH v3 10/11] KVM: x86/mmu: fine-grained gfn zap " Yan Zhao
2023-06-16 2:42 ` [PATCH v3 11/11] KVM: x86/mmu: split a single gfn zap range " Yan Zhao
2023-06-28 23:02 ` [PATCH v3 00/11] KVM: x86/mmu: refine memtype related mmu zap Sean Christopherson
2023-07-14 7:11 ` Yan Zhao
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=ZJ3sxm6CngYC7pno@google.com \
--to=seanjc@google.com \
--cc=chao.gao@intel.com \
--cc=kai.huang@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=robert.hoo.linux@gmail.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