|
@@ -1250,8 +1250,13 @@ void __cpuinit setup_local_APIC(void)
|
|
|
|
|
|
#ifdef CONFIG_X86_32
|
|
|
/*
|
|
|
- * APIC LDR is initialized. Fetch and store logical_apic_id.
|
|
|
+ * APIC LDR is initialized. If logical_apicid mapping was
|
|
|
+ * initialized during get_smp_config(), make sure it matches the
|
|
|
+ * actual value.
|
|
|
*/
|
|
|
+ i = early_per_cpu(x86_cpu_to_logical_apicid, cpu);
|
|
|
+ WARN_ON(i != BAD_APICID && i != logical_smp_processor_id());
|
|
|
+ /* always use the value from LDR */
|
|
|
early_per_cpu(x86_cpu_to_logical_apicid, cpu) =
|
|
|
logical_smp_processor_id();
|
|
|
#endif
|
|
@@ -1991,7 +1996,10 @@ void __cpuinit generic_processor_info(int apicid, int version)
|
|
|
early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;
|
|
|
early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
|
|
|
#endif
|
|
|
-
|
|
|
+#ifdef CONFIG_X86_32
|
|
|
+ early_per_cpu(x86_cpu_to_logical_apicid, cpu) =
|
|
|
+ apic->x86_32_early_logical_apicid(cpu);
|
|
|
+#endif
|
|
|
set_cpu_possible(cpu, true);
|
|
|
set_cpu_present(cpu, true);
|
|
|
}
|