diff options
Diffstat (limited to 'arch/i386/kernel/nmi.c')
| -rw-r--r-- | arch/i386/kernel/nmi.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c index 5d8a07c20281..821df34d2b3a 100644 --- a/arch/i386/kernel/nmi.c +++ b/arch/i386/kernel/nmi.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/dmi.h> | 23 | #include <linux/dmi.h> |
| 24 | #include <linux/kprobes.h> | 24 | #include <linux/kprobes.h> |
| 25 | #include <linux/cpumask.h> | 25 | #include <linux/cpumask.h> |
| 26 | #include <linux/kernel_stat.h> | ||
| 26 | 27 | ||
| 27 | #include <asm/smp.h> | 28 | #include <asm/smp.h> |
| 28 | #include <asm/nmi.h> | 29 | #include <asm/nmi.h> |
| @@ -973,9 +974,13 @@ __kprobes int nmi_watchdog_tick(struct pt_regs * regs, unsigned reason) | |||
| 973 | cpu_clear(cpu, backtrace_mask); | 974 | cpu_clear(cpu, backtrace_mask); |
| 974 | } | 975 | } |
| 975 | 976 | ||
| 976 | sum = per_cpu(irq_stat, cpu).apic_timer_irqs; | 977 | /* |
| 978 | * Take the local apic timer and PIT/HPET into account. We don't | ||
| 979 | * know which one is active, when we have highres/dyntick on | ||
| 980 | */ | ||
| 981 | sum = per_cpu(irq_stat, cpu).apic_timer_irqs + kstat_irqs(0); | ||
| 977 | 982 | ||
| 978 | /* if the apic timer isn't firing, this cpu isn't doing much */ | 983 | /* if the none of the timers isn't firing, this cpu isn't doing much */ |
| 979 | if (!touched && last_irq_sums[cpu] == sum) { | 984 | if (!touched && last_irq_sums[cpu] == sum) { |
| 980 | /* | 985 | /* |
| 981 | * Ayiee, looks like this CPU is stuck ... | 986 | * Ayiee, looks like this CPU is stuck ... |
