All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
Cc: xen-devel@lists.xenproject.org, Jan Beulich <jbeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Jason Andryuk <jason.andryuk@amd.com>
Subject: Re: [PATCH 03/12] x86: Add cpu_vendor() as a wrapper for the host's CPU vendor
Date: Tue, 10 Feb 2026 09:46:10 +0100	[thread overview]
Message-ID: <aYrwUj1uaEgGL9hl@Mac.lan> (raw)
In-Reply-To: <20260206161539.209922-4-alejandro.garciavallejo@amd.com>

On Fri, Feb 06, 2026 at 05:15:25PM +0100, Alejandro Vallejo wrote:
> Introduces various optimisations that rely on constant folding, Value
> Range Propagation (VRP), and Dead Code Elimination (DCE) to aggressively
> eliminate code surrounding the uses of the function.
> 
>   * For single-vendor+no-unknown-vendor builds returns a compile-time
>     constant.

This is kind of misleading IMO. It will possibly allow such
optimization for Intel or AMD, but not for Hygon/Centaur/Shanghai, as
for those CPUs you will always end up selecting either Intel or AMD as
a requisite (so X86_ENABLED_VENDORS will never have only a single bit
set).

Not saying it's bad, but I think the comment above should be adjusted
a bit to notice that such compile time optimizations for single vendor
builds will only be applicable to Intel or AMD builds.

>   * For all other cases it ANDs the result with the mask of compiled
>     vendors, with the effect of performing DCE in switch cases, removing
>     dead conditionals, etc.
> 
> It's difficult to reason about codegen in general in a project this big,
> but in this case the ANDed constant combines with the values typically
> checked against, folding into a comparison against zero. Thus, it's better
> for codegen to AND its result with the desired compared-against vendor,
> rather than using (in)equality operators. That way the comparison is
> always against zero.
> 
>   "cpu_vendor() & (X86_VENDOR_AMD | X86_VENDOR_HYGON)"
> 
> turns into (cpu_vendor() & X86_VENDOR_AMD) in AMD-only builds (AND +
> cmp with zero). Whereas this...
> 
>   "cpu_vendor() == X86_VENDOR_AMD"
> 
> forces cpu_vendor() to be ANDed and then compared to a non-zero value.
> 
> Later patches take the opportunity and make this refactor as cpu_vendor()
> is introduced throughout the tree.
> 
> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
> ---
>  xen/arch/x86/cpu/common.c             |  6 +++++-
>  xen/arch/x86/guest/xen/xen.c          |  4 ++++
>  xen/arch/x86/include/asm/cpufeature.h | 27 +++++++++++++++++++++++++++
>  3 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
> index ebe2baf8b9..6f4e723172 100644
> --- a/xen/arch/x86/cpu/common.c
> +++ b/xen/arch/x86/cpu/common.c
> @@ -328,7 +328,11 @@ void __init early_cpu_init(bool verbose)
>  	*(u32 *)&c->x86_vendor_id[4] = edx;
>  
>  	c->x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx);
> -	switch (c->x86_vendor) {
> +	if ( c->x86_vendor != cpu_vendor() )
> +		panic("CPU vendor not compiled-in: %s",
> +		      x86_cpuid_vendor_to_str(c->x86_vendor));

I think you want to print both the current compiled in support plus
the host vendor as part of the panic message.

> +
> +	switch (cpu_vendor()) {
>  	case X86_VENDOR_INTEL:    intel_unlock_cpuid_leaves(c);
>  				  actual_cpu = intel_cpu_dev;    break;
>  	case X86_VENDOR_AMD:      actual_cpu = amd_cpu_dev;      break;
> diff --git a/xen/arch/x86/guest/xen/xen.c b/xen/arch/x86/guest/xen/xen.c
> index 77a3a8742a..ec558bcbdb 100644
> --- a/xen/arch/x86/guest/xen/xen.c
> +++ b/xen/arch/x86/guest/xen/xen.c
> @@ -57,6 +57,10 @@ void asmlinkage __init early_hypercall_setup(void)
>          cpuid(0, &eax, &ebx, &ecx, &edx);
>  
>          boot_cpu_data.x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx);
> +
> +        if ( cpu_vendor() != boot_cpu_data.x86_vendor )
> +            panic("CPU vendor not compiled-in: %s",
> +                  x86_cpuid_vendor_to_str(boot_cpu_data.x86_vendor));

Is this going to be useful?  I fear the panic here might happen even
before the console is setup, so a user won't get any output from Xen
at all.

Would it be fine to allow such mismatch in the hypercall setup, just
for the sake of getting the console page setup so that
early_cpu_init() can print a proper error message?

Allowing the vendor mismatch here won't require any extra code, it's
just the selection of the instruction to use to call into Xen when
running in guest/shim mode.

Thanks, Roger.


  reply	other threads:[~2026-02-10  8:46 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-06 16:15 [PATCH 00/12] const-ify vendor checks Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 01/12] x86: Reject CPU policies with vendors other than the host's Alejandro Vallejo
2026-02-10  8:19   ` Roger Pau Monné
2026-02-10 10:11     ` Alejandro Vallejo
2026-02-11 15:41   ` Jan Beulich
2026-02-11 17:41     ` Alejandro Vallejo
2026-02-12  7:16       ` Jan Beulich
2026-02-06 16:15 ` [PATCH 02/12] x86: Add more granularity to the vendors in Kconfig Alejandro Vallejo
2026-02-10  8:26   ` Roger Pau Monné
2026-02-10 10:04     ` Alejandro Vallejo
2026-02-11 16:06   ` Jan Beulich
2026-02-11 17:51     ` Alejandro Vallejo
2026-02-12  7:24       ` Jan Beulich
2026-02-06 16:15 ` [PATCH 03/12] x86: Add cpu_vendor() as a wrapper for the host's CPU vendor Alejandro Vallejo
2026-02-10  8:46   ` Roger Pau Monné [this message]
2026-02-10 10:35     ` Alejandro Vallejo
2026-02-10 12:06       ` Roger Pau Monné
2026-02-11 16:04   ` Jan Beulich
2026-02-11 17:35     ` Alejandro Vallejo
2026-02-11 17:57       ` Alejandro Vallejo
2026-02-12 10:52   ` Jan Beulich
2026-02-12 14:36     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 04/12] x86: Migrate MSR handler vendor checks to cpu_vendor() Alejandro Vallejo
2026-02-11 16:15   ` Jan Beulich
2026-02-06 16:15 ` [PATCH 05/12] x86: Migrate spec_ctrl " Alejandro Vallejo
2026-02-12 10:49   ` Jan Beulich
2026-02-12 14:55     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 06/12] x86: Migrate switch " Alejandro Vallejo
2026-02-12 11:06   ` Jan Beulich
2026-02-12 15:06     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 07/12] x86: Have x86_emulate/ implement the single-vendor optimisation Alejandro Vallejo
2026-02-12 11:26   ` Jan Beulich
2026-02-12 15:29     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 07/12] x86: Migrate x86_emulate/ to use cpu_vendor() Alejandro Vallejo
2026-02-12 11:31   ` Jan Beulich
2026-02-12 15:30     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 08/12] x86/acpi: Migrate vendor checks to cpu_vendor() Alejandro Vallejo
2026-02-12 11:52   ` Jan Beulich
2026-02-12 15:34     ` Alejandro Vallejo
2026-02-12 15:52       ` Jan Beulich
2026-02-06 16:15 ` [PATCH 09/12] x86/pv: " Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 10/12] x86/mcheck: Migrate vendor checks to use cpu_vendor() Alejandro Vallejo
2026-02-12 12:02   ` Jan Beulich
2026-02-12 12:21     ` Jan Beulich
2026-02-12 15:46     ` Alejandro Vallejo
2026-02-06 16:15 ` [PATCH 11/12] x86/cpu: " Alejandro Vallejo
2026-02-12 13:17   ` Jan Beulich
2026-02-06 16:15 ` [PATCH 12/12] x86: Migrate every remaining raw vendor check to cpu_vendor() Alejandro Vallejo
2026-02-12 13:29   ` Jan Beulich
2026-02-09  9:21 ` [PATCH 00/12] const-ify vendor checks Jan Beulich
2026-02-09 10:05   ` Alejandro Vallejo
2026-02-09 10:15     ` Jan Beulich
2026-02-09 11:56       ` Alejandro Vallejo
2026-02-09 12:52         ` Jan Beulich
2026-02-09 14:37           ` 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=aYrwUj1uaEgGL9hl@Mac.lan \
    --to=roger.pau@citrix.com \
    --cc=alejandro.garciavallejo@amd.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=jason.andryuk@amd.com \
    --cc=jbeulich@suse.com \
    --cc=xen-devel@lists.xenproject.org \
    /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.