kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Kai Huang <kai.huang@intel.com>
Cc: "luto@kernel.org" <luto@kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	 "dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"peterz@infradead.org" <peterz@infradead.org>,
	 "bp@alien8.de" <bp@alien8.de>,
	"mingo@redhat.com" <mingo@redhat.com>,
	 "tglx@linutronix.de" <tglx@linutronix.de>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	Xin3 Li <xin3.li@intel.com>,
	 "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	Shan Kang <shan.kang@intel.com>,
	 "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 1/9] x86/cpu: KVM: Add common defines for architectural memory types (PAT, MTRRs, etc.)
Date: Wed, 3 Apr 2024 11:57:52 -0700	[thread overview]
Message-ID: <Zg2msDI9q_7GcwHk@google.com> (raw)
In-Reply-To: <2a369e6e229788f66fb2bbf8bc89552d86ba38b9.camel@intel.com>

On Wed, Mar 27, 2024, Kai Huang wrote:
> On Fri, 2024-03-08 at 17:27 -0800, Sean Christopherson wrote:
> > Add defines for the architectural memory types that can be shoved into
> > various MSRs and registers, e.g. MTRRs, PAT, VMX capabilities MSRs, EPTPs,
> > etc.  While most MSRs/registers support only a subset of all memory types,
> > the values themselves are architectural and identical across all users.
> > 
> > Leave the goofy MTRR_TYPE_* definitions as-is since they are in a uapi
> > header, but add compile-time assertions to connect the dots (and sanity
> > check that the msr-index.h values didn't get fat-fingered).
> > 
> > Keep the VMX_EPTP_MT_* defines so that it's slightly more obvious that the
> > EPTP holds a single memory type in 3 of its 64 bits; those bits just
> > happen to be 2:0, i.e. don't need to be shifted.
> > 
> > Opportunistically use X86_MEMTYPE_WB instead of an open coded '6' in
> > setup_vmcs_config().
> > 
> > No functional change intended.
> > 
> > Signed-off-by: Sean Christopherson <seanjc@google.com>
> > 
> 
> [...]
> 
> >  
> >  #include "mtrr.h"
> >  
> > +static_assert(X86_MEMTYPE_UC == MTRR_TYPE_UNCACHABLE);
> > +static_assert(X86_MEMTYPE_WC == MTRR_TYPE_WRCOMB);
> > +static_assert(X86_MEMTYPE_WT == MTRR_TYPE_WRTHROUGH);
> > +static_assert(X86_MEMTYPE_WP == MTRR_TYPE_WRPROT);
> > +static_assert(X86_MEMTYPE_WB == MTRR_TYPE_WRBACK);
> > +
> > 
> 
> Hi Sean,
> 
> IIUC, the purpose of this patch is for the kernel to use X86_MEMTYPE_xx, which
> are architectural values, where applicable?

Maybe?  Probably?

> Yeah we need to keep MTRR_TYPE_xx in the uapi header, but in the kernel, should
> we change all places that use MTRR_TYPE_xx to X86_MEMTYPE_xx?  The
> static_assert()s above have guaranteed the two are the same, so there's nothing
> wrong for the kernel to use X86_MEMTYPE_xx instead.
> 
> Both PAT_xx and VMX_BASIC_MEM_TYPE_xx to X86_MEMTYPE_xx, it seems a little bit
> odd if we don't switch for MTRR_TYPE_xx.
> 
> However by simple search MEM_TYPE_xx are intensively used in many files, so...

Yeah, I definitely don't want to do it in this series due to the amount of churn
that would be required.

  $ git grep MTRR_TYPE_ | wc -l
  100

I'm not even entirely convinced that it would be a net positive.  Much of the KVM
usage that's being cleaned up is flat out wrong, e.g. using "MTRR" enums in places
that having nothing to do with MTRRs.  But the majority of the remaining usage is
in MTRR code, i.e. isn't wrong, and is arguably better off using the MTRR specific
#defines.

  reply	other threads:[~2024-04-03 18:57 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-09  1:27 [PATCH v6 0/9] x86/cpu: KVM: Clean up PAT and VMX macros Sean Christopherson
2024-03-09  1:27 ` [PATCH v6 1/9] x86/cpu: KVM: Add common defines for architectural memory types (PAT, MTRRs, etc.) Sean Christopherson
2024-03-27 11:13   ` Huang, Kai
2024-04-03 18:57     ` Sean Christopherson [this message]
2024-04-03 21:17       ` Huang, Kai
2024-04-03 21:42         ` Sean Christopherson
2024-03-09  1:27 ` [PATCH v6 2/9] x86/cpu: KVM: Move macro to encode PAT value to common header Sean Christopherson
2024-03-27 11:21   ` Huang, Kai
2024-04-01  5:28   ` Xiaoyao Li
2024-04-03 21:03   ` Huang, Kai
2024-03-09  1:27 ` [PATCH v6 3/9] KVM: x86: Stuff vCPU's PAT with default value at RESET, not creation Sean Christopherson
2024-03-27 11:22   ` Huang, Kai
2024-04-01  6:00   ` Xiaoyao Li
2024-03-09  1:27 ` [PATCH v6 4/9] KVM: VMX: Move MSR_IA32_VMX_BASIC bit defines to asm/vmx.h Sean Christopherson
2024-03-15 15:13   ` Zhao Liu
2024-03-27 10:37   ` Huang, Kai
2024-04-01  6:13   ` Xiaoyao Li
2024-04-02  5:01     ` Li, Xin3
2024-04-02 14:28       ` Sean Christopherson
2024-03-09  1:27 ` [PATCH v6 5/9] KVM: VMX: Track CPU's MSR_IA32_VMX_BASIC as a single 64-bit value Sean Christopherson
2024-03-15 15:26   ` Zhao Liu
2024-03-27 10:38   ` Huang, Kai
2024-04-01  6:27   ` Xiaoyao Li
2024-03-09  1:27 ` [PATCH v6 6/9] KVM: nVMX: Use macros and #defines in vmx_restore_vmx_basic() Sean Christopherson
2024-03-15 15:30   ` Zhao Liu
2024-03-27 10:53   ` Huang, Kai
2024-04-01  7:00   ` Xiaoyao Li
2024-03-09  1:27 ` [PATCH v6 7/9] KVM VMX: Move MSR_IA32_VMX_MISC bit defines to asm/vmx.h Sean Christopherson
2024-03-15 15:43   ` Zhao Liu
2024-03-27 10:55   ` Huang, Kai
2024-03-09  1:27 ` [PATCH v6 8/9] KVM: VMX: Open code VMX preemption timer rate mask in its accessor Sean Christopherson
2024-03-15 15:46   ` Zhao Liu
2024-03-15 17:54     ` Sean Christopherson
2024-04-01  7:07       ` Xiaoyao Li
2024-04-02 22:06         ` Sean Christopherson
2024-04-24 20:06           ` Sean Christopherson
2024-04-25 10:05             ` Huang, Kai
2024-04-25 14:42               ` Sean Christopherson
2024-04-25 21:44                 ` Huang, Kai
2024-04-25 14:18             ` Xiaoyao Li
2024-03-27 10:59   ` Huang, Kai
2024-03-09  1:27 ` [PATCH v6 9/9] KVM: nVMX: Use macros and #defines in vmx_restore_vmx_misc() Sean Christopherson
2024-03-15 15:52   ` Zhao Liu
2024-03-27 11:02   ` Huang, Kai
2024-04-01  7:09   ` Xiaoyao Li

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=Zg2msDI9q_7GcwHk@google.com \
    --to=seanjc@google.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=kai.huang@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=shan.kang@intel.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=xin3.li@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;
as well as URLs for NNTP newsgroup(s).