linux-yocto/arch
K Prateek Nayak 44bce62994 x86/cpu/topology: Use initial APIC ID from XTOPOLOGY leaf on AMD/HYGON
commit c2415c407a2cde01290d52ce2a1f81b0616379a3 upstream.

Prior to the topology parsing rewrite and the switchover to the new parsing
logic for AMD processors in

  c749ce393b ("x86/cpu: Use common topology code for AMD"),

the initial_apicid on these platforms was:

- First initialized to the LocalApicId from CPUID leaf 0x1 EBX[31:24].

- Then overwritten by the ExtendedLocalApicId in CPUID leaf 0xb
  EDX[31:0] on processors that supported topoext.

With the new parsing flow introduced in

  f7fb3b2dd9 ("x86/cpu: Provide an AMD/HYGON specific topology parser"),

parse_8000_001e() now unconditionally overwrites the initial_apicid already
parsed during cpu_parse_topology_ext().

Although this has not been a problem on baremetal platforms, on virtualized AMD
guests that feature more than 255 cores, QEMU zeros out the CPUID leaf
0x8000001e on CPUs with CoreID > 255 to prevent collision of these IDs in
EBX[7:0] which can only represent a maximum of 255 cores [1].

This results in the following FW_BUG being logged when booting a guest
with more than 255 cores:

    [Firmware Bug]: CPU 512: APIC ID mismatch. CPUID: 0x0000 APIC: 0x0200

AMD64 Architecture Programmer's Manual Volume 2: System Programming Pub.
24593 Rev. 3.42 [2] Section 16.12 "x2APIC_ID" mentions the Extended
Enumeration leaf 0xb (Fn0000_000B_EDX[31:0])(which was later superseded by the
extended leaf 0x80000026) provides the full x2APIC ID under all circumstances
unlike the one reported by CPUID leaf 0x8000001e EAX which depends on the mode
in which APIC is configured.

Rely on the APIC ID parsed during cpu_parse_topology_ext() from CPUID leaf
0x80000026 or 0xb and only use the APIC ID from leaf 0x8000001e if
cpu_parse_topology_ext() failed (has_topoext is false).

On platforms that support the 0xb leaf (Zen2 or later, AMD guests on
QEMU) or the extended leaf 0x80000026 (Zen4 or later), the
initial_apicid is now set to the value parsed from EDX[31:0].

On older AMD/Hygon platforms that do not support the 0xb leaf but support the
TOPOEXT extension (families 0x15, 0x16, 0x17[Zen1], and Hygon), retain current
behavior where the initial_apicid is set using the 0x8000001e leaf.

Issue debugged by Naveen N Rao (AMD) <naveen@kernel.org> and Sairaj Kodilkar
<sarunkod@amd.com>.

  [ bp: Massage commit message. ]

Fixes: c749ce393b ("x86/cpu: Use common topology code for AMD")
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Naveen N Rao (AMD) <naveen@kernel.org>
Cc: stable@vger.kernel.org
Link: https://github.com/qemu/qemu/commit/35ac5dfbcaa4b [1]
Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537 [2]
Link: https://lore.kernel.org/20250825075732.10694-2-kprateek.nayak@amd.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-09-04 15:31:52 +02:00
..
alpha alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support 2025-03-22 12:54:15 -07:00
arc
arm ARM: tegra: Use I/O memcpy to write to IRAM 2025-08-20 18:30:24 +02:00
arm64 arm64: dts: ti: k3-am62*: Move eMMC pinmux to top level board file 2025-08-28 16:31:08 +02:00
csky
hexagon hexagon: Fix unbalanced spinlock in die() 2025-02-08 09:58:11 +01:00
loongarch LoongArch: Optimize module load time by optimizing PLT/GOT counting 2025-08-28 16:31:14 +02:00
m68k m68k: Fix lost column on framebuffer debug console 2025-08-28 16:30:54 +02:00
microblaze
mips mips: lantiq: xway: sysctrl: rename the etop node 2025-09-04 15:31:43 +02:00
nios2
openrisc
parisc parisc: Update comments in make_insert_tlb 2025-08-28 16:31:00 +02:00
powerpc powerpc/kvm: Fix ifdef to remove build warning 2025-09-04 15:31:45 +02:00
riscv RISC-V: KVM: fix stack overrun when loading vlenb 2025-09-04 15:31:52 +02:00
s390 s390/hypfs: Enable limited access during lockdown 2025-08-28 16:31:16 +02:00
sh sh: Do not use hyphen in exported variable name 2025-08-15 12:13:56 +02:00
sparc sparc/mm: avoid calling arch_enter/leave_lazy_mmu() in set_ptes 2025-04-20 10:15:48 +02:00
um um: Re-evaluate thread flags repeatedly 2025-08-20 18:30:32 +02:00
x86 x86/cpu/topology: Use initial APIC ID from XTOPOLOGY leaf on AMD/HYGON 2025-09-04 15:31:52 +02:00
xtensa
.gitignore
Kconfig