]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
[PATCH] x86_64: avoid SMP boot up race
authorAndi Kleen <ak@suse.de>
Tue, 31 May 2005 14:08:47 +0000 (16:08 +0200)
committerChris Wright <chrisw@osdl.org>
Sun, 12 Jun 2005 02:45:23 +0000 (19:45 -0700)
Keep interrupts disabled during smp bootup

This avoids a race that breaks SMP bootup on some machines.
The race is not fully plugged (that is only done with much
more changes in 2.6.12), but should be good enough
for most people.

Keeping the interrupts disabled here is ok because we
don't rely on the timer interrupt for local APIC
timer setup, but always read the timer registers
directly.

(originally from Rusty Russell iirc)

Signed-off-by: ak@suse.de
Signed-off-by: Chris Wright <chrisw@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/x86_64/kernel/apic.c
arch/x86_64/kernel/smpboot.c

index dbccec4894c0b1b04b0e17834483f5443e00bb16..b97b4a20395dccda017bbc15975a00bbbf58932b 100644 (file)
@@ -775,9 +775,7 @@ void __init setup_boot_APIC_clock (void)
 
 void __init setup_secondary_APIC_clock(void)
 {
-       local_irq_disable(); /* FIXME: Do we need this? --RR */
        setup_APIC_timer(calibration_result);
-       local_irq_enable();
 }
 
 void __init disable_APIC_timer(void)
index a7e2c3e95ea5940bcab4345bb500782875ba17af..8e3edd231cec14adf412b26a9467b6c25eed45be 100644 (file)
@@ -309,8 +309,6 @@ void __init smp_callin(void)
        Dprintk("CALLIN, before setup_local_APIC().\n");
        setup_local_APIC();
 
-       local_irq_enable();
-
        /*
         * Get our bogomips.
         */
@@ -324,8 +322,6 @@ void __init smp_callin(void)
         */
        smp_store_cpu_info(cpuid);
 
-       local_irq_disable();
-
        /*
         * Allow the master to continue.
         */