arch/x86: Handle non enumerated CPU after physical hotplug
[cascardo/linux.git] / arch / x86 / kernel / smpboot.c
index 42a9362..951f093 100644 (file)
@@ -1407,9 +1407,21 @@ __init void prefill_possible_map(void)
 {
        int i, possible;
 
-       /* no processor from mptable or madt */
-       if (!num_processors)
-               num_processors = 1;
+       /* No boot processor was found in mptable or ACPI MADT */
+       if (!num_processors) {
+               int apicid = boot_cpu_physical_apicid;
+               int cpu = hard_smp_processor_id();
+
+               pr_warn("Boot CPU (id %d) not listed by BIOS\n", cpu);
+
+               /* Make sure boot cpu is enumerated */
+               if (apic->cpu_present_to_apicid(0) == BAD_APICID &&
+                   apic->apic_id_valid(apicid))
+                       generic_processor_info(apicid, boot_cpu_apic_version);
+
+               if (!num_processors)
+                       num_processors = 1;
+       }
 
        i = setup_max_cpus ?: 1;
        if (setup_possible_cpus == -1) {