From: Andi Kleen 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:{smp_call_function+115} {smp_send_stop+25} {panic+274} {do_machine_check+0} {do_machine_check+1114} {machine_check+127} {net_rx_action+215} {__do_softirq+83} {do_softirq+53} {do_IRQ+317} <{default_idle+0} {ret_from_intr+0} {default_idle+32} {cpu_idle+26} {start_kernel+502} {_sinittext+48 Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton --- 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); _