On 24.07.23 15:34, Thomas Gleixner wrote: > num_processors is 0 by default and only gets incremented when local APICs > are registered. > > Make init_apic_mappings(), which tries to enable the local APIC in the case > that no SMP configuration was found set num_processors to 1. > > This allows to remove yet another check for the local APIC and yet another > place which registers the boot CPUs local APIC ID. > > Signed-off-by: Thomas Gleixner > Acked-by: Peter Zijlstra (Intel) > --- > arch/x86/kernel/apic/apic.c | 9 ++++++--- > arch/x86/kernel/smpboot.c | 18 ------------------ > 2 files changed, 6 insertions(+), 21 deletions(-) > > --- a/arch/x86/kernel/apic/apic.c > +++ b/arch/x86/kernel/apic/apic.c > @@ -2130,9 +2130,12 @@ void __init init_apic_mappings(void) > if (x2apic_mode) > return; > > - if (!smp_found_config && !detect_init_APIC()) { > - pr_info("APIC: disable apic facility\n"); > - apic_disable(); > + if (!smp_found_config) { > + if (!detect_init_APIC()) { > + pr_info("APIC: disable apic facility\n"); > + apic_disable(); > + } > + num_processors = 1; > } > } > This is introducing a regression for Xen PV guests: those have no ACPI tables, so smp_found_config will be 0. OTOH num_processors has been set already using hypervisor data, so setting num_processors to 1 here will overwrite the previous setting. Below diff on top is fixing the problem: diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 564d584c8b99..59c12b20c635 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -2135,7 +2135,13 @@ void __init init_apic_mappings(void) pr_info("APIC: disable apic facility\n"); apic_disable(); } - num_processors = 1; + + /* + * Unprivileged Xen PV guests have smp_found_config = 0, but + * they have set num_processors already from hypervisor data. + */ + if (!num_processors) + num_processors = 1; } } Juergen