aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/smpboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r--arch/x86/kernel/smpboot.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 5da35d2cdbd8..22bf6c29454f 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1101,6 +1101,7 @@ static __init void disable_smp(void)
1101 */ 1101 */
1102static int __init smp_sanity_check(unsigned max_cpus) 1102static int __init smp_sanity_check(unsigned max_cpus)
1103{ 1103{
1104 preempt_disable();
1104 if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) { 1105 if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
1105 printk(KERN_WARNING "weird, boot CPU (#%d) not listed" 1106 printk(KERN_WARNING "weird, boot CPU (#%d) not listed"
1106 "by the BIOS.\n", hard_smp_processor_id()); 1107 "by the BIOS.\n", hard_smp_processor_id());
@@ -1112,6 +1113,7 @@ static int __init smp_sanity_check(unsigned max_cpus)
1112 * get out of here now! 1113 * get out of here now!
1113 */ 1114 */
1114 if (!smp_found_config && !acpi_lapic) { 1115 if (!smp_found_config && !acpi_lapic) {
1116 preempt_enable();
1115 printk(KERN_NOTICE "SMP motherboard not detected.\n"); 1117 printk(KERN_NOTICE "SMP motherboard not detected.\n");
1116 disable_smp(); 1118 disable_smp();
1117 if (APIC_init_uniprocessor()) 1119 if (APIC_init_uniprocessor())
@@ -1130,6 +1132,7 @@ static int __init smp_sanity_check(unsigned max_cpus)
1130 boot_cpu_physical_apicid); 1132 boot_cpu_physical_apicid);
1131 physid_set(hard_smp_processor_id(), phys_cpu_present_map); 1133 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
1132 } 1134 }
1135 preempt_enable();
1133 1136
1134 /* 1137 /*
1135 * If we couldn't find a local APIC, then get out of here now! 1138 * If we couldn't find a local APIC, then get out of here now!
@@ -1205,11 +1208,13 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
1205 return; 1208 return;
1206 } 1209 }
1207 1210
1211 preempt_disable();
1208 if (GET_APIC_ID(read_apic_id()) != boot_cpu_physical_apicid) { 1212 if (GET_APIC_ID(read_apic_id()) != boot_cpu_physical_apicid) {
1209 panic("Boot APIC ID in local APIC unexpected (%d vs %d)", 1213 panic("Boot APIC ID in local APIC unexpected (%d vs %d)",
1210 GET_APIC_ID(read_apic_id()), boot_cpu_physical_apicid); 1214 GET_APIC_ID(read_apic_id()), boot_cpu_physical_apicid);
1211 /* Or can we switch back to PIC here? */ 1215 /* Or can we switch back to PIC here? */
1212 } 1216 }
1217 preempt_enable();
1213 1218
1214#ifdef CONFIG_X86_32 1219#ifdef CONFIG_X86_32
1215 connect_bsp_APIC(); 1220 connect_bsp_APIC();