From: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Jason Andryuk" <jason.andryuk@amd.com>,
"Xenia Ragiadakou" <xenia.ragiadakou@amd.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
xen-devel@lists.xenproject.org
Subject: Re: [RFC PATCH 01/11] x86: Add more granularity to the vendors in Kconfig
Date: Thu, 27 Nov 2025 13:36:26 +0100 [thread overview]
Message-ID: <DEJHD0L6BMLD.1IWHHEXGAHH4I@amd.com> (raw)
In-Reply-To: <868f28fe-f2dd-469d-a0cf-111885184dfe@suse.com>
Hi,
Thanks for taking the time to look at this
On Thu Nov 27, 2025 at 10:43 AM CET, Jan Beulich wrote:
> On 26.11.2025 17:44, Alejandro Vallejo wrote:
>> This enables very aggressive DCE passes on single-vendor builds in later
>> patches, as it will allow most vendor checks to become statically chosen
>> branches. A lot of statics go away and a lot more inlining is allowed.
>>
>> In order to allow x86_vendor_is() to fold into constants, expand Kconfig
>> to have the full set of vendors. Adds Hygon, Centaur, Shanghai and the
>> default path.
>>
>> Have Hygon depend on AMD, and Centaur+Shanghai depend on Intel.
>>
>> Not a functional change.
>>
>> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
>> ---
>> xen/arch/x86/Kconfig.cpu | 45 ++++++++++++++++++++++++++++++++
>> xen/arch/x86/cpu/common.c | 17 +++++++-----
>> xen/arch/x86/include/asm/cpuid.h | 7 +++++
>> 3 files changed, 62 insertions(+), 7 deletions(-)
>
> Shouldn't patch 5 be folded into here? Or, if there were some dependencies
> on patches 2-4 (albeit I can't spot anything, as the files are all self-
> contained), at least the parts which can be done right away?
I didn't expect that to work before transforming the switch, but of course
the prior & X86_ENABLED_VENDORS is already telling the compiler which switch
branches are unreachable.
Will do and send soon as non-RFC if there's no objection to the full vendor
palette (including the unknown vendor case) being on display in Kconfig.
>
>> --- a/xen/arch/x86/Kconfig.cpu
>> +++ b/xen/arch/x86/Kconfig.cpu
>> @@ -19,4 +19,49 @@ config INTEL
>> May be turned off in builds targetting other vendors. Otherwise,
>> must be enabled for Xen to work suitably on Intel platforms.
>>
>> +config HYGON
>> + bool "Support Hygon CPUs"
>> + depends on AMD
>> + default y
>> + help
>> + Detection, tunings and quirks for Hygon platforms.
>> +
>> + May be turned off in builds targetting other vendors. Otherwise,
>> + must be enabled for Xen to work suitably on Hygon platforms.
>> +
>> +
>> +config CENTAUR
>> + bool "Support Centaur CPUs"
>> + depends on INTEL
>> + default y
>> + help
>> + Detection, tunings and quirks for Centaur platforms.
>> +
>> + May be turned off in builds targetting other vendors. Otherwise,
>> + must be enabled for Xen to work suitably on Centaur platforms.
>> +
>> +config SHANGHAI
>> + bool "Support Shanghai CPUs"
>> + depends on INTEL
>> + default y
>> + help
>> + Detection, tunings and quirks for Shanghai platforms.
>> +
>> + May be turned off in builds targetting other vendors. Otherwise,
>> + must be enabled for Xen to work suitably on Shanghai platforms.
>> +
>> +config UNKNOWN_CPU
>> + bool "Support unknown CPUs"
>
> "Unknown CPUs" can be of two kinds: Such of vendors we don't explicitly support,
> and such of vendors we do explicitly support, but where we aren't aware of the
> particular model. This needs to be unambiguous here, perhaps by it becoming
> UNKNOWN_CPU_VENDOR (and the prompt changing accordingly).
Right, what I do in this RFC is have compiled-out vendors fall back onto the
unknown vendor path. Because it really is unknown to the binary.
I could call it GENERIC_CPU_VENDOR, or anything else, but the main question
is whether a toggle for this seems acceptable upstream. I don't see obvious
drawbacks.
>
>> --- a/xen/arch/x86/cpu/common.c
>> +++ b/xen/arch/x86/cpu/common.c
>> @@ -118,7 +118,7 @@ static void cf_check default_init(struct cpuinfo_x86 * c)
>> __clear_bit(X86_FEATURE_SEP, c->x86_capability);
>> }
>>
>> -static const struct cpu_dev __initconst_cf_clobber __used default_cpu = {
>> +static const struct cpu_dev __initconst_cf_clobber default_cpu = {
>
> This change isn't explained in the description. __used here was introduced not
> all this long ago together with __initconst_cf_clobber. Maybe this really was
> a mistake, but if so it's correction should be explained.
It wasn't clear to me why __used was there (I assume it shouldn't have been),
but it definitely clashes with the intent of having it gone when UNKNOWN_CPU=n.
If __used was misplaced to begin with I'm happy to get rid of it in a separate
patch. I don't think it warrants a Fixes tag, though.
>
>> @@ -340,7 +340,8 @@ void __init early_cpu_init(bool verbose)
>> *(u32 *)&c->x86_vendor_id[8] = ecx;
>> *(u32 *)&c->x86_vendor_id[4] = edx;
>>
>> - c->x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx);
>> + c->x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx) &
>> + X86_ENABLED_VENDORS;
>
> May I suggest the & to move ...
>
>> switch (c->x86_vendor) {
>
> ... here? Yes, you panic() below, but I see no reason to store inaccurate
> data when that's easy to avoid.
That's intentional. Otherwise further checks of c->x86_vendor in other parts of
the code may not go through the same branch as the one here.
>
>> case X86_VENDOR_INTEL: intel_unlock_cpuid_leaves(c);
>> actual_cpu = intel_cpu_dev; break;
>> @@ -349,12 +350,14 @@ void __init early_cpu_init(bool verbose)
>> case X86_VENDOR_SHANGHAI: actual_cpu = shanghai_cpu_dev; break;
>> case X86_VENDOR_HYGON: actual_cpu = hygon_cpu_dev; break;
>> default:
>> + if (verbose || !IS_ENABLED(CONFIG_UNKNOWN_CPU))
>> + printk(XENLOG_ERR
>> + "Unrecognised or unsupported CPU vendor '%.12s'\n",
>> + c->x86_vendor_id);
>> + if (!IS_ENABLED(CONFIG_UNKNOWN_CPU))
>> + panic("Cannot run in unknown/compiled-out CPU vendor.\n");
>
> The text reads somewhat odd to me, "run in" in particular. Also nit: No full stop
> please at the end of log messages, except maybe in extraordinary situations.
ack. As for the text, might as well be just "Unsupported hardware\n". The prior
printk already gives all relevant information. The particulars on the text can
be argued after I send a non-RFC version.
>
> Jan
next prev parent reply other threads:[~2025-11-27 12:36 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-26 16:44 [RFC PATCH 00/11] x86 vendor check optimisations Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 01/11] x86: Add more granularity to the vendors in Kconfig Alejandro Vallejo
2025-11-27 9:43 ` Jan Beulich
2025-11-27 12:36 ` Alejandro Vallejo [this message]
2025-11-27 13:19 ` Jan Beulich
2025-11-27 13:44 ` Alejandro Vallejo
2025-11-27 14:00 ` Jan Beulich
2025-11-27 9:59 ` Jan Beulich
2025-11-27 12:37 ` Alejandro Vallejo
2025-11-27 21:01 ` Andrew Cooper
2025-11-26 16:44 ` [RFC PATCH 02/11] x86: Reject CPU policies with vendors other than the host's Alejandro Vallejo
2025-11-27 20:15 ` Andrew Cooper
2025-11-26 16:44 ` [RFC PATCH 03/11] x86: Add x86_vendor_is() by itself before using it Alejandro Vallejo
2025-11-27 10:46 ` Jan Beulich
2025-11-27 13:15 ` Alejandro Vallejo
2025-11-27 13:37 ` Jan Beulich
2025-11-27 14:06 ` Alejandro Vallejo
2025-11-27 14:14 ` Jan Beulich
2025-11-27 20:36 ` Andrew Cooper
2025-11-28 9:08 ` Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 04/11] x86: Refactor early vendor lookup code to use x86_vendor_is() Alejandro Vallejo
2025-11-27 10:51 ` Jan Beulich
2025-11-27 13:35 ` Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 05/11] x86: Conditionalise the inclusion of Hygon/Centaur/Shanghai cpu/ files Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 06/11] x86: Migrate switch-based vendor checks to x86_vendor_is() Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 07/11] x86: Migrate MSR handler " Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 08/11] x86: Migrate insn emulator to use x86_vendor_is() Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 09/11] x86: Migrate spec_ctrl vendor checks to x86_vendor_is() Alejandro Vallejo
2025-12-08 16:01 ` Jan Beulich
2025-12-08 16:04 ` Jan Beulich
2025-12-11 10:31 ` Alejandro Vallejo
2025-12-11 15:38 ` Andrew Cooper
2025-12-11 16:58 ` Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 10/11] x86: Migrate everything under cpu/ to use x86_vendor_is() Alejandro Vallejo
2025-11-26 16:44 ` [RFC PATCH 11/11] x86: Migrate every remaining raw vendor check to x86_vendor_is() Alejandro Vallejo
2025-11-27 22:11 ` [RFC PATCH 00/11] x86 vendor check optimisations Andrew Cooper
2025-11-28 9:18 ` Alejandro Vallejo
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=DEJHD0L6BMLD.1IWHHEXGAHH4I@amd.com \
--to=alejandro.garciavallejo@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=jason.andryuk@amd.com \
--cc=jbeulich@suse.com \
--cc=roger.pau@citrix.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=xenia.ragiadakou@amd.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.