There appears to be a spurious local_irq_enable() in the
check_nmi_watchdog() of both i386 and x86_64, I cannot see
when are interrupts being disabled before it. In fact we
seem to be allocating with GFP_KERNEL and calling
smp_call_function() just before this call, which suggests
this call to local_irq_enable() is spurious and can be
removed.
Signed-off-by: Satyam Sharma <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Andi Kleen <[email protected]>
---
arch/i386/kernel/nmi.c | 1 -
arch/x86_64/kernel/nmi.c | 1 -
2 files changed, 2 deletions(-)
---
diff -ruNp a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
--- a/arch/i386/kernel/nmi.c 2007-06-07 12:46:34.000000000 +0530
+++ b/arch/i386/kernel/nmi.c 2007-06-07 15:37:57.000000000 +0530
@@ -94,7 +94,6 @@ static int __init check_nmi_watchdog(voi
for_each_possible_cpu(cpu)
prev_nmi_count[cpu] = per_cpu(irq_stat, cpu).__nmi_count;
- local_irq_enable();
mdelay((20*1000)/nmi_hz); // wait 20 ticks
for_each_possible_cpu(cpu) {
diff -ruNp a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
--- a/arch/x86_64/kernel/nmi.c 2007-06-07 12:46:39.000000000 +0530
+++ b/arch/x86_64/kernel/nmi.c 2007-06-07 15:34:19.000000000 +0530
@@ -104,7 +104,6 @@ int __init check_nmi_watchdog (void)
for (cpu = 0; cpu < NR_CPUS; cpu++)
counts[cpu] = cpu_pda(cpu)->__nmi_count;
- local_irq_enable();
mdelay((20*1000)/nmi_hz); // wait 20 ticks
for_each_online_cpu(cpu) {