Commit 8a95db3b authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Juergen Gross

x86/xen/smp_pv: Register the boot CPU APIC properly

The topology core expects the boot APIC to be registered from earhy APIC
detection first and then again when the firmware tables are evaluated. This
is used for detecting the real BSP CPU on a kexec kernel.

The recent conversion of XEN/PV to register fake APIC IDs failed to
register the boot CPU APIC correctly as it only registers it once. This
causes the BSP detection mechanism to trigger wrongly:

   CPU topo: Boot CPU APIC ID not the first enumerated APIC ID: 0 > 1

Additionally this results in one CPU being ignored.

Register the boot CPU APIC twice so that the XEN/PV fake enumeration
behaves like real firmware.
Reported-by: default avatarJuergen Gross <jgross@suse.com>
Fixes: e7530702 ("x86/xen/smp_pv: Register fake APICs")
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarJuergen Gross <jgross@suse.com>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Link: https://lore.kernel.org/r/87a5l8s2fg.ffs@tglxSigned-off-by: default avatarJuergen Gross <jgross@suse.com>
parent e67572cd
...@@ -154,9 +154,9 @@ static void __init xen_pv_smp_config(void) ...@@ -154,9 +154,9 @@ static void __init xen_pv_smp_config(void)
u32 apicid = 0; u32 apicid = 0;
int i; int i;
topology_register_boot_apic(apicid++); topology_register_boot_apic(apicid);
for (i = 1; i < nr_cpu_ids; i++) for (i = 0; i < nr_cpu_ids; i++)
topology_register_apic(apicid++, CPU_ACPIID_INVALID, true); topology_register_apic(apicid++, CPU_ACPIID_INVALID, true);
/* Pretend to be a proper enumerated system */ /* Pretend to be a proper enumerated system */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment