summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2005-05-31 16:08:47 +0200
committerChris Wright <chrisw@osdl.org>2005-06-11 19:45:23 -0700
commit51af80e5f428d3d15b37c1f2df0479839a1d1fa4 (patch)
tree18d6d5eb74ba2416e47113c14ea2671e81bded87
parent08373277d66dd334de2e20cf05e85533aaccf257 (diff)
downloadlinux-stable-51af80e5f428d3d15b37c1f2df0479839a1d1fa4.tar.gz
linux-stable-51af80e5f428d3d15b37c1f2df0479839a1d1fa4.tar.bz2
linux-stable-51af80e5f428d3d15b37c1f2df0479839a1d1fa4.zip
[PATCH] x86_64: avoid SMP boot up race
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>
-rw-r--r--arch/x86_64/kernel/apic.c2
-rw-r--r--arch/x86_64/kernel/smpboot.c4
2 files changed, 0 insertions, 6 deletions
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index dbccec4894c0..b97b4a20395d 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -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)
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index a7e2c3e95ea5..8e3edd231cec 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -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.
*/