All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Xin Li <xin@zytor.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	pbonzini@redhat.com, tglx@linutronix.de, mingo@redhat.com,
	bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
	hpa@zytor.com, weijiang.yang@intel.com
Subject: Re: [PATCH 1/1] KVM: VMX: Cleanup VMX basic information defines and usages
Date: Thu, 19 Oct 2023 09:15:14 -0700	[thread overview]
Message-ID: <ZTFWEte375FF-5RA@google.com> (raw)
In-Reply-To: <20bb3005-bf6c-4fe1-bf0d-6d37e0ce1a77@zytor.com>

On Thu, Oct 19, 2023, Xin Li wrote:
> On 10/18/2023 2:08 PM, Sean Christopherson wrote:
> 
> > > Add IA32_VMX_BASIC MSR bitfield shift macros and use them to define VMX
> > > basic information bitfields.
> > 
> > Why?  Unless something actually uses the shift independently, just define the
> > BIT_ULL(...) straightaway.
> 
> Well, reading "BIT_ULL(49) | BIT_ULL(54) | BIT_ULL(55) |" is hard.

I wasn't suggesting that, I was suggesting:

 #define VMX_BASIC_INOUT                          BIT_ULL(54)

instead of

 #define VMX_BASIC_INOUT                          BIT_ULL(VMX_BASIC_INOUT_SHIFT)

Defining a shift adds a pointless layer of indirection (if the shift isn't used
directly).  It's especially problematic when there are a series of definitions.
E.g. if I want to know which bit a flag corresponds to, this:

  #define VMX_BASIC_32BIT_PHYS_ADDR_ONLY          BIT_ULL(48)
  #define VMX_BASIC_DUAL_MONITOR_TREATMENT        BIT_ULL(49)
  #define VMX_BASIC_MEM_TYPE(x)                   (((x) & GENMASK_ULL(53, 50)) >> 50)
  #define VMX_BASIC_INOUT                         BIT_ULL(54)
  #define VMX_BASIC_TRUE_CTLS                     BIT_ULL(55)

is much easier for me to process than this

  #define VMX_BASIC_32BIT_PHYS_ADDR_ONLY_SHIFT    48
  #define VMX_BASIC_32BIT_PHYS_ADDR_ONLY          BIT_ULL(VMX_BASIC_32BIT_PHYS_ADDR_ONLY_SHIFT)
  #define VMX_BASIC_DUAL_MONITOR_TREATMENT_SHIFT  49
  #define VMX_BASIC_DUAL_MONITOR_TREATMENT        BIT_ULL(VMX_BASIC_DUAL_MONITOR_TREATMENT_SHIFT)
  #define VMX_BASIC_MEM_TYPE_SHIFT                50
  #define VMX_BASIC_INOUT_SHIFT                   54
  #define VMX_BASIC_INOUT                         BIT_ULL(VMX_BASIC_INOUT_SHIFT)
  #define VMX_BASIC_TRUE_CTLS_SHIFT               55
  #define VMX_BASIC_TRUE_CTLS                     BIT_ULL(VMX_BASIC_TRUE_CTLS_SHIFT)

and the former also tends to work better for IDEs that support peeking at macro
definitions.

> > > ---
> > >   arch/x86/include/asm/msr-index.h       | 31 ++++++++++++++++++++------
> > >   arch/x86/kvm/vmx/nested.c              | 10 +++------
> > >   arch/x86/kvm/vmx/vmx.c                 |  2 +-
> > >   tools/arch/x86/include/asm/msr-index.h | 31 ++++++++++++++++++++------
> > 
> > Please drop the tools/ update, copying kernel headers into tools is a perf tools
> > thing that I want no part of.
> > 
> > https://lore.kernel.org/all/Y8bZ%2FJ98V5i3wG%2Fv@google.com
> 
> why can't we simply remove tools/arch/x86/include/asm/msr-index.h?

That's a question for the tools/perf folks, though I believe the answer is partly
that the perf tooling relies on *exactly* matching kernel-internal structures, and
so tools/perf doesn't want to rely on installed headers.

> > > +#define VMX_BASIC_RESERVED_BITS			\
> > > +	(VMX_BASIC_ALWAYS_0 |			\
> > > +	 VMX_BASIC_RESERVED_RANGE_1 |		\
> > > +	 VMX_BASIC_RESERVED_RANGE_2)
> > 
> > I don't see any value in defining VMX_BASIC_RESERVED_RANGE_1 and
> > VMX_BASIC_RESERVED_RANGE_2 separately.   Or VMX_BASIC_ALWAYS_0 for the matter.
> > And I don't think these macros need to go in msr-index.h, e.g. just define them
> > above vmx_restore_vmx_basic() as that's likely going to be the only user, ever.
> 
> hmm, I'm overusing macros, better do:
> #define VMX_BASIC_RESERVED_BITS			\
> 	(BIT_ULL(31) | GENMASK_ULL(47, 45) | GENMASK_ULL(63, 56))

Please define from high=>low, x86 is little-endian.  I.e.

	 (GENMASK_ULL(63, 56) | GENMASK_ULL(47, 45) | BIT_ULL(31))

> Probably should also move VMX MSR field defs from msr-index.h to
> a vmx header file.

Why bother putting them in a header?  As above, it's extremely unlikely anything
besides vmx_restore_vmx_basic() will ever care about exactly which bits are
reserved.

      reply	other threads:[~2023-10-19 16:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-27 23:08 [PATCH 1/1] KVM: VMX: Cleanup VMX basic information defines and usages Xin Li (Intel)
2023-10-18 21:08 ` Sean Christopherson
2023-10-19  8:26   ` Xin Li
2023-10-19 16:15     ` Sean Christopherson [this message]

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=ZTFWEte375FF-5RA@google.com \
    --to=seanjc@google.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=weijiang.yang@intel.com \
    --cc=x86@kernel.org \
    --cc=xin@zytor.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.