public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: mlevitsk@redhat.com
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	kvm@vger.kernel.org,  linux-kernel@vger.kernel.org,
	Hou Wenlong <houwenlong.hwl@antgroup.com>,
	 Kechen Lu <kechenl@nvidia.com>,
	Oliver Upton <oliver.upton@linux.dev>,
	 Binbin Wu <binbin.wu@linux.intel.com>,
	Yang Weijiang <weijiang.yang@intel.com>,
	 Robert Hoo <robert.hoo.linux@gmail.com>,
	Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH v2 24/49] KVM: x86: #undef SPEC_CTRL_SSBD in cpuid.c to avoid macro collisions
Date: Mon, 5 Aug 2024 14:35:53 -0700	[thread overview]
Message-ID: <ZrFFua_7kWKBESbe@google.com> (raw)
In-Reply-To: <ffa76b1b62c5cd2001f5f313009376e131bc2817.camel@redhat.com>

+Boris

On Mon, Aug 05, 2024, mlevitsk@redhat.com wrote:
> У пт, 2024-07-26 у 16:34 -0700, Sean Christopherson пише:
> > > On Wed, Jul 24, 2024, Maxim Levitsky wrote:
> > > > > On Mon, 2024-07-08 at 14:29 -0700, Sean Christopherson wrote:
> > > > > > > On Thu, Jul 04, 2024, Maxim Levitsky wrote:
> > > > > > > > > Maybe we should instead rename the SPEC_CTRL_SSBD to
> > > > > > > > > 'MSR_IA32_SPEC_CTRL_SSBD' and together with it, other fields of this msr.  It
> > > > > > > > > seems that at least some msrs in this file do this.
> > > > > > > 
> > > > > > > Yeah, the #undef hack is quite ugly.  But I didn't (and still don't) want to
> > > > > > > introduce all the renaming churn in the middle of this already too-big series,
> > > > > > > especially since it would require touching quite a bit of code outside of KVM.
> > > > > 
> > > > > > > 
> > > > > > > I'm also not sure that's the right thing to do; I kinda feel like KVM is the one
> > > > > > > that's being silly here.
> > > > > 
> > > > > I don't think that KVM is silly here. I think that hardware definitions like
> > > > > MSRs, register names, register bit fields, etc, *must* come with a unique
> > > > > prefix, it's not an issue of breaking some deeply nested macro, but rather an
> > > > > issue of readability.
> > > 
> > > For the MSR names themselves, yes, I agree 100%.  But for the bits and mask, I
> > > disagree.  It's simply too verbose, especially given that in the vast majority
> > > of cases simply looking at the surrounding code will provide enough context to
> > > glean an understanding of what's going on.
> 
> I am not that sure about this, especially if someone by mistake uses a flag
> that belong to one MSR, in some unrelated place. Verbose code is rarely a bad thing.
> 
> 
> > >   E.g. even for SPEC_CTRL_SSBD, where
> > > there's an absurd amount of magic and layering, looking at the #define makes
> > > it fairly obvious that it belongs to MSR_IA32_SPEC_CTRL.
> > > 
> > > And for us x86 folks, who obviously look at this code far more often than non-x86
> > > folks, I find it valuable to know that a bit/mask is exactly that, and _not_ an
> > > MSR index.  E.g. VMX_BASIC_TRUE_CTLS is a good example, where renaming that to
> > > MSR_VMX_BASIC_TRUE_CTLS would make it look too much like MSR_IA32_VMX_TRUE_ENTRY_CTLS
> > > and all the other "true" VMX MSRs.
> > > 
> > > > > SPEC_CTRL_SSBD for example won't mean much to someone who only knows ARM, while
> > > > > MSR_SPEC_CTRL_SSBD, or even better IA32_MSR_SPEC_CTRL_SSBD, lets you instantly know
> > > > > that this is a MSR, and anyone with even a bit of x86 knowledge should at least have
> > > > > heard about what a MSR is.
> > > > > 
> > > > > In regard to X86_FEATURE_INTEL_SSBD, I don't oppose this idea, because we have
> > > > > X86_FEATURE_AMD_SSBD, but in general I do oppose the idea of adding 'INTEL' prefix,
> > > 
> > > Ya, those are my feelings exactly.  And in this case, since we already have an
> > > AMD variant, I think it's actually a net positive to add an INTEL variant so that
> > > it's clear that Intel and AMD ended up defining separate CPUID to enumerate the
> > > same basic info.
> > > 
> > > > > because it sets a not that good precedent, because most of the features on x86
> > > > > are first done by Intel, but then are also implemented by AMD, and thus an intel-only
> > > > > feature name can stick after it becomes a general x86 feature.
> > > > > 
> > > > > IN case of X86_FEATURE_INTEL_SSBD, we already have sadly different CPUID bits for
> > > > > each vendor (although I wonder if AMD also sets the X86_FEATURE_INTEL_SSBD).
> > > > > 
> > > > > I vote to rename 'SPEC_CTRL_SSBD', it can be done as a standalone patch, and can
> > > > > be accepted right now, even before this patch series is accepted.
> > > 
> > > If we go that route, then we also need to rename nearly ever bit/mask definition
> > > in msr-index.h, otherwise SPEC_CTRL_* will be the odd ones out.  And as above, I
> > > don't think this is the right direction.
> 
> Honestly not really. If you look carefully at the file, many bits are already defined
> in the way I suggest, for example:
> 
> MSR_PLATFORM_INFO_CPUID_FAULT_BIT
> MSR_IA32_POWER_CTL_BIT_EE
> MSR_INTEGRITY_CAPS_ARRAY_BIST_BIT
> MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT

Heh, I know there are some bits that have an "MSR" prefix, hence "nearly every".

> This file has all kind of names for both msrs and flags. There is not much
> order, so renaming the bit definitions of IA32_SPEC_CTRL won't increase the
> level of disorder in this file IMHO.

It depends on what direction msr-index.h is headed.  If the long-term preference
is to have bits/masks namespaced with only their associated MSR name, i.e. no
explicit MSR_, then renaming the bits is counter-productive.

I added Boris, who I believe was the most opinionated about the MSR bit names,
i.e. who can most likely give us the closest thing to an authoritative answer as
to the preferred style.

Boris, we're debating about the best way to solve a weird collision between:

  #define SPEC_CTRL_SSBD

and

  #define X86_FEATURE_SPEC_CTRL_SSBD

KVM wants to use its CPUID macros to essentially do:

  #define F(name) (X86_FEATURE_##name)

as a shorthand for X86_FEATURE_SPEC_CTRL_SSBD, but that can cause build failures
depending on how KVM's macros are layered.  E.g. SPEC_CTRL_SSBD can get resolved
to its value prior to token concatentation and result in KVM effectively generating
X86_FEATURE_BIT(SPEC_CTRL_SSBD_SHIFT).

One of the proposed solutions is to rename all of the SPEC_CTRL_* bit definitions
to add a MSR_ prefix, e.g. to generate MSR_SPEC_CTRL_SSBD and avoid the conflict.
My recollection from the IA32_FEATURE_CONTROL rework a few years back is that you
wanted to prioritize shorter names over having everything namespaced with MSR_,
i.e. that this approach is a non-starter.

  reply	other threads:[~2024-08-05 21:35 UTC|newest]

Thread overview: 185+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-17 17:38 [PATCH v2 00/49] KVM: x86: CPUID overhaul, fixes, and caching Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 01/49] KVM: x86: Do all post-set CPUID processing during vCPU creation Sean Christopherson
2024-07-05  0:48   ` Maxim Levitsky
2024-07-08 18:46     ` Sean Christopherson
2024-07-24 17:24       ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 02/49] KVM: x86: Explicitly do runtime CPUID updates "after" initial setup Sean Christopherson
2024-07-05  0:51   ` Maxim Levitsky
2024-07-09 19:46     ` Sean Christopherson
2024-07-24 17:24       ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 03/49] KVM: x86: Account for KVM-reserved CR4 bits when passing through CR4 on VMX Sean Christopherson
2024-07-05  0:55   ` Maxim Levitsky
2024-07-09 19:58     ` Sean Christopherson
2024-07-24 17:28       ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 04/49] KVM: selftests: Update x86's set_sregs_test to match KVM's CPUID enforcement Sean Christopherson
2024-07-05  0:55   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 05/49] KVM: selftests: Assert that the @cpuid passed to get_cpuid_entry() is non-NULL Sean Christopherson
2024-07-05  0:58   ` Maxim Levitsky
2024-07-08 19:33     ` Sean Christopherson
2024-07-24 17:28       ` Maxim Levitsky
2024-11-21 18:57         ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 06/49] KVM: selftests: Refresh vCPU CPUID cache in __vcpu_get_cpuid_entry() Sean Christopherson
2024-07-05  0:59   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 07/49] KVM: selftests: Verify KVM stuffs runtime CPUID OS bits on CR4 writes Sean Christopherson
2024-07-05  1:02   ` Maxim Levitsky
2024-07-08 19:39     ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 08/49] KVM: x86: Move __kvm_is_valid_cr4() definition to x86.h Sean Christopherson
2024-07-05  1:02   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 09/49] KVM: x86/pmu: Drop now-redundant refresh() during init() Sean Christopherson
2024-07-05  1:02   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 10/49] KVM: x86: Drop now-redundant MAXPHYADDR and GPA rsvd bits from vCPU creation Sean Christopherson
2024-07-05  1:13   ` Maxim Levitsky
2024-07-08 19:53     ` Sean Christopherson
2024-07-24 17:30       ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 11/49] KVM: x86: Disallow KVM_CAP_X86_DISABLE_EXITS after " Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-07-08 19:43     ` Sean Christopherson
2024-07-24 17:31       ` Maxim Levitsky
2024-07-25 18:07         ` Sean Christopherson
2024-07-12  7:42   ` Xiaoyao Li
2024-05-17 17:38 ` [PATCH v2 12/49] KVM: x86: Reject disabling of MWAIT/HLT interception when not allowed Sean Christopherson
2024-05-22  5:09   ` Binbin Wu
2024-05-28 18:56     ` Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-07-12  7:51   ` Xiaoyao Li
2024-07-12 13:31     ` Sean Christopherson
2024-05-17 17:38 ` [PATCH v2 13/49] KVM: selftests: Fix a bad TEST_REQUIRE() in x86's KVM PV test Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 14/49] KVM: selftests: Update x86's KVM PV test to match KVM's disabling exits behavior Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 15/49] KVM: x86: Zero out PV features cache when the CPUID leaf is not present Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 16/49] KVM: x86: Don't update PV features caches when enabling enforcement capability Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 17/49] KVM: x86: Do reverse CPUID sanity checks in __feature_leaf() Sean Christopherson
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 18/49] KVM: x86: Account for max supported CPUID leaf when getting raw host CPUID Sean Christopherson
2024-06-19  6:17   ` Yang, Weijiang
2024-06-19  8:07     ` Yang, Weijiang
2024-07-05  1:17   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 19/49] KVM: x86: Add a macro to init CPUID features that ignore host kernel support Sean Christopherson
2024-07-05  1:21   ` Maxim Levitsky
2024-07-08 20:53     ` Sean Christopherson
2024-07-24 17:39       ` Maxim Levitsky
2024-07-08 22:36     ` Sean Christopherson
2024-07-24 17:40       ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 20/49] KVM: x86: Rename kvm_cpu_cap_mask() to kvm_cpu_cap_init() Sean Christopherson
2024-05-22  6:23   ` Binbin Wu
2024-05-28 18:54     ` Sean Christopherson
2024-07-05  1:24   ` Maxim Levitsky
2024-05-17 17:38 ` [PATCH v2 21/49] KVM: x86: Add a macro to init CPUID features that are 64-bit only Sean Christopherson
2024-07-05  1:24   ` Maxim Levitsky
2024-07-17 13:31   ` Xiaoyao Li
2024-05-17 17:38 ` [PATCH v2 22/49] KVM: x86: Add a macro to precisely handle aliased 0x1.EDX CPUID features Sean Christopherson
2024-07-05  1:25   ` Maxim Levitsky
2024-07-08 21:08     ` Sean Christopherson
2024-07-24 17:46       ` Maxim Levitsky
2024-07-25 18:39         ` Sean Christopherson
2024-08-05 11:06           ` mlevitsk
2024-08-05 22:00             ` Sean Christopherson
2024-09-10 20:37               ` Maxim Levitsky
2024-09-11 15:37                 ` Sean Christopherson
2024-11-22  3:17                   ` Maxim Levitsky
2024-11-27 14:38                     ` Sean Christopherson
2024-05-17 17:39 ` [PATCH v2 23/49] KVM: x86: Handle kernel- and KVM-defined CPUID words in a single helper Sean Christopherson
2024-07-05  1:28   ` Maxim Levitsky
2024-07-08 21:18     ` Sean Christopherson
2024-07-17 14:00       ` Xiaoyao Li
2024-07-24 17:51       ` Maxim Levitsky
2024-07-25 19:18         ` Sean Christopherson
2024-08-05 11:07           ` mlevitsk
2024-05-17 17:39 ` [PATCH v2 24/49] KVM: x86: #undef SPEC_CTRL_SSBD in cpuid.c to avoid macro collisions Sean Christopherson
2024-07-05  1:30   ` Maxim Levitsky
2024-07-08 21:29     ` Sean Christopherson
2024-07-24 17:54       ` Maxim Levitsky
2024-07-26 23:34         ` Sean Christopherson
2024-08-05 11:11           ` mlevitsk
2024-08-05 21:35             ` Sean Christopherson [this message]
2024-09-10 20:37               ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 25/49] KVM: x86: Harden CPU capabilities processing against out-of-scope features Sean Christopherson
2024-07-05  1:31   ` Maxim Levitsky
2024-07-09 18:11     ` Sean Christopherson
2024-07-24 17:55       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 26/49] KVM: x86: Add a macro to init CPUID features that KVM emulates in software Sean Christopherson
2024-07-05  1:59   ` Maxim Levitsky
2024-07-08 22:30     ` Sean Christopherson
2024-07-24 17:58       ` Maxim Levitsky
2024-07-27  0:06         ` Sean Christopherson
2024-08-05 11:16           ` mlevitsk
2024-08-05 19:59             ` Sean Christopherson
2024-09-10 20:41               ` Maxim Levitsky
2024-09-11 16:03                 ` Sean Christopherson
2024-11-22  3:28                   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 27/49] KVM: x86: Swap incoming guest CPUID into vCPU before massaging in KVM_SET_CPUID2 Sean Christopherson
2024-07-05  1:32   ` Maxim Levitsky
2024-07-08 21:37     ` Sean Christopherson
2024-05-17 17:39 ` [PATCH v2 28/49] KVM: x86: Clear PV_UNHALT for !HLT-exiting only when userspace sets CPUID Sean Christopherson
2024-07-05  1:32   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 29/49] KVM: x86: Remove unnecessary caching of KVM's PV CPUID base Sean Christopherson
2024-07-05  1:51   ` Maxim Levitsky
2024-07-09 19:00     ` Sean Christopherson
2024-07-24 17:59       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 30/49] KVM: x86: Always operate on kvm_vcpu data in cpuid_entry2_find() Sean Christopherson
2024-07-05  1:51   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 31/49] KVM: x86: Move kvm_find_cpuid_entry{,_index}() up near cpuid_entry2_find() Sean Christopherson
2024-07-05  1:51   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 32/49] KVM: x86: Remove all direct usage of cpuid_entry2_find() Sean Christopherson
2024-07-05  1:52   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 33/49] KVM: x86: Advertise TSC_DEADLINE_TIMER in KVM_GET_SUPPORTED_CPUID Sean Christopherson
2024-05-22  9:11   ` Binbin Wu
2024-05-28 15:21     ` Sean Christopherson
2024-07-05  2:04   ` Maxim Levitsky
2024-07-09 19:28     ` Sean Christopherson
2024-07-24 18:00       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 34/49] KVM: x86: Advertise HYPERVISOR " Sean Christopherson
2024-07-05  2:04   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 35/49] KVM: x86: Add a macro to handle features that are fully VMM controlled Sean Christopherson
2024-07-05  2:08   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 36/49] KVM: x86: Rename "governed features" helpers to use "guest_cpu_cap" Sean Christopherson
2024-05-22 14:23   ` Binbin Wu
2024-05-17 17:39 ` [PATCH v2 37/49] KVM: x86: Replace guts of "governed" features with comprehensive cpu_caps Sean Christopherson
2024-06-20  2:20   ` Yang, Weijiang
2024-07-05  2:10   ` Maxim Levitsky
2024-07-09 18:30     ` Sean Christopherson
2024-07-24 18:00       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 38/49] KVM: x86: Initialize guest cpu_caps based on guest CPUID Sean Christopherson
2024-06-20  2:24   ` Yang, Weijiang
2024-07-05  2:13   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 39/49] KVM: x86: Extract code for generating per-entry emulated CPUID information Sean Christopherson
2024-07-05  2:18   ` Maxim Levitsky
2024-07-09  0:13     ` Sean Christopherson
2024-07-24 18:00       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 40/49] KVM: x86: Initialize guest cpu_caps based on KVM support Sean Christopherson
2024-07-05  2:22   ` Maxim Levitsky
2024-07-09  0:10     ` Sean Christopherson
2024-07-24 18:01       ` Maxim Levitsky
2024-07-29 15:34         ` Sean Christopherson
2024-08-05 11:16           ` mlevitsk
2024-05-17 17:39 ` [PATCH v2 41/49] KVM: x86: Avoid double CPUID lookup when updating MWAIT at runtime Sean Christopherson
2024-07-05  2:22   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 42/49] KVM: x86: Drop unnecessary check that cpuid_entry2_find() returns right leaf Sean Christopherson
2024-07-05  2:22   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 43/49] KVM: x86: Update OS{XSAVE,PKE} bits in guest CPUID irrespective of host support Sean Christopherson
2024-07-05  2:22   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 44/49] KVM: x86: Update guest cpu_caps at runtime for dynamic CPUID-based features Sean Christopherson
2024-07-05  2:26   ` Maxim Levitsky
2024-07-09  0:24     ` Sean Christopherson
2024-09-10 20:41       ` Maxim Levitsky
2024-09-11 15:41         ` Sean Christopherson
2024-11-22  2:11           ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 45/49] KVM: x86: Shuffle code to prepare for dropping guest_cpuid_has() Sean Christopherson
2024-07-05  2:26   ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 46/49] KVM: x86: Replace (almost) all guest CPUID feature queries with cpu_caps Sean Christopherson
2024-07-05  2:34   ` Maxim Levitsky
2024-07-09 19:20     ` Sean Christopherson
2024-07-24 18:01       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 47/49] KVM: x86: Drop superfluous host XSAVE check when adjusting guest XSAVES caps Sean Christopherson
2024-07-05  2:36   ` Maxim Levitsky
2024-07-09 19:15     ` Sean Christopherson
2024-07-24 18:02       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 48/49] KVM: x86: Add a macro for features that are synthesized into boot_cpu_data Sean Christopherson
2024-07-05  2:43   ` Maxim Levitsky
2024-07-09 21:13     ` Sean Christopherson
2024-07-24 18:04       ` Maxim Levitsky
2024-05-17 17:39 ` [PATCH v2 49/49] *** DO NOT APPLY *** KVM: x86: Verify KVM initializes all consumed guest caps Sean Christopherson
2024-05-17 17:54 ` [PATCH v2 00/49] KVM: x86: CPUID overhaul, fixes, and caching Paolo Bonzini

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=ZrFFua_7kWKBESbe@google.com \
    --to=seanjc@google.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=houwenlong.hwl@antgroup.com \
    --cc=kechenl@nvidia.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=oliver.upton@linux.dev \
    --cc=pbonzini@redhat.com \
    --cc=robert.hoo.linux@gmail.com \
    --cc=vkuznets@redhat.com \
    --cc=weijiang.yang@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