
From: Andi Kleen <ak@muc.de>

Remove WARN_ON in smp_call_function. it breaks the machine check
handling and there is no good way to enable interrupts here.

 Call Trace:<ffffffff8011cb33>{smp_call_function+115} <ffffffff8011cbf9>{smp_send_stop+25}
 <ffffffff80138012>{panic+274} <ffffffff801187e0>{do_machine_check+0}
 <ffffffff80118c3a>{do_machine_check+1114} <ffffffff80111663>{machine_check+127}
 <ffffffff803434d7>{net_rx_action+215}  <EOE> <IRQ> <ffffffff8013c8e3>{__do_softirq+83} 
   <ffffffff8013c975>{do_softirq+53} <ffffffff80113cdd>{do_IRQ+317}
 <<ffffffff8010f3b0>{default_idle+0} <ffffffff80110b81>{ret_from_intr+0}
     <EOI> <ffffffff8010f3d0>{default_idle+32} <ffffffff8010f86a>{cpu_idle+26}
  <ffffffff8058f886>{start_kernel+502} <ffffffff8058f1e0>{_sinittext+48

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/x86_64/kernel/smp.c |    4 +---
 1 files changed, 1 insertion(+), 3 deletions(-)

diff -puN arch/x86_64/kernel/smp.c~x86-64-remove-warn_on-in-smp_call_function arch/x86_64/kernel/smp.c
--- 25/arch/x86_64/kernel/smp.c~x86-64-remove-warn_on-in-smp_call_function	Tue Sep 14 17:03:14 2004
+++ 25-akpm/arch/x86_64/kernel/smp.c	Tue Sep 14 17:03:14 2004
@@ -408,6 +408,7 @@ int smp_call_function (void (*func) (voi
  *
  * You must not call this function with disabled interrupts or from a
  * hardware interrupt handler or from a bottom half handler.
+ * Actually there are a few legal cases, like panic.
  */
 {
 	struct call_data_struct data;
@@ -416,9 +417,6 @@ int smp_call_function (void (*func) (voi
 	if (!cpus)
 		return 0;
 
-	/* Can deadlock when called with interrupts disabled */
-	WARN_ON(irqs_disabled());
-
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
_
