This modifies nmi_watchdog_tick behavior for x86_64 arch to consider both timer and hpet IRQs just as the i386 arch does. Signed-off-by: David Bahi --- arch/x86_64/kernel/nmi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) Index: linux-2.6.22.8-rt9_1267/arch/x86_64/kernel/nmi.c =================================================================== --- linux-2.6.22.8-rt9_1267.orig/arch/x86_64/kernel/nmi.c +++ linux-2.6.22.8-rt9_1267/arch/x86_64/kernel/nmi.c @@ -369,8 +369,6 @@ int notrace __kprobes nmi_watchdog_tick( touched = 1; } - sum = read_pda(apic_timer_irqs); - if (__get_cpu_var(nmi_touch)) { __get_cpu_var(nmi_touch) = 0; touched = 1; @@ -386,6 +384,12 @@ int notrace __kprobes nmi_watchdog_tick( cpu_clear(cpu, backtrace_mask); } + /* + * Take the local apic timer and PIT/HPET into account. We don't + * know which one is active, when we have highres/dyntick on + */ + sum = read_pda(apic_timer_irqs) + kstat_cpu(cpu).irqs[0]; + #ifdef CONFIG_X86_MCE /* Could check oops_in_progress here too, but it's safer not too */