On Mon, Jul 03 2023 at 00:28, Zhang Rui wrote: > > +static bool has_lapic_cpus; Yet another random flag. Sigh. I really hate this. Why not doing the obvious? --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -2452,6 +2452,9 @@ int generic_processor_info(int apicid, i bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map); + if (physid_isset(apicid, phys_cpu_present_map)) + return -EBUSY; + /* * boot_cpu_physical_apicid is designed to have the apicid * returned by read_apic_id(), i.e, the apicid of the As the call sites during MADT parsing ignore the return value anyway, there is no harm and this is a proper defense against broken tables which enumerate an APIC twice. Thanks, tglx