[<prev] [next>] [day] [month] [year] [list]
Message-ID: <EB12A50964762B4D8111D55B764A8454DD054E@scsmsx413.amr.corp.intel.com>
Date: Thu, 9 Nov 2006 17:19:16 -0800
From: "Pallipadi, Venkatesh" <venkatesh.pallipadi@...el.com>
To: "Thomas Gleixner" <tglx@...utronix.de>,
"Andrew Morton" <akpm@...l.org>
Cc: "LKML" <linux-kernel@...r.kernel.org>,
"Ingo Molnar" <mingo@...e.hu>, "Len Brown" <lenb@...nel.org>,
"John Stultz" <johnstul@...ibm.com>,
"Arjan van de Ven" <arjan@...radead.org>,
"Andi Kleen" <ak@...e.de>, "Roman Zippel" <zippel@...ux-m68k.org>
Subject: RE: [patch 17/19] dynticks: Fix nmi watchdog
>-----Original Message-----
>From: linux-kernel-owner@...r.kernel.org
>[mailto:linux-kernel-owner@...r.kernel.org] On Behalf Of
>Thomas Gleixner
>Sent: Thursday, November 09, 2006 3:39 PM
>To: Andrew Morton
>Cc: LKML; Ingo Molnar; Len Brown; John Stultz; Arjan van de
>Ven; Andi Kleen; Roman Zippel
>Subject: [patch 17/19] dynticks: Fix nmi watchdog
>
>From: Thomas Gleixner <tglx@...utronix.de>
>
>The NMI watchdog implementation assumes that the local APIC timer
>interrupt is happening. This assumption is not longer true when
>high resolution timers and dynamic ticks come into play, as they
>may switch off the local APIC timer completely. Take the PIT/HPET
>interrupts into account too, to avoid false positives.
>
>Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
>Signed-off-by: Ingo Molnar <mingo@...e.hu>
>
>Index: linux-2.6.19-rc5-mm1/arch/i386/kernel/nmi.c
>===================================================================
>--- linux-2.6.19-rc5-mm1.orig/arch/i386/kernel/nmi.c
>2006-11-09 17:47:58.000000000 +0100
>+++ linux-2.6.19-rc5-mm1/arch/i386/kernel/nmi.c
>2006-11-09 20:52:29.000000000 +0100
>@@ -23,6 +23,7 @@
> #include <linux/dmi.h>
> #include <linux/kprobes.h>
> #include <linux/cpumask.h>
>+#include <linux/kernel_stat.h>
>
> #include <asm/smp.h>
> #include <asm/nmi.h>
>@@ -920,9 +921,13 @@ __kprobes int nmi_watchdog_tick(struct p
> cpu_clear(cpu, backtrace_mask);
> }
>
>- sum = per_cpu(irq_stat, cpu).apic_timer_irqs;
>+ /*
>+ * 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 = per_cpu(irq_stat, cpu).apic_timer_irqs + kstat_irqs(0);
>
>- /* if the apic timer isn't firing, this cpu isn't doing much */
>+ /* if the none of the timers isn't firing, this cpu
>isn't doing much */
> if (!touched && last_irq_sums[cpu] == sum) {
> /*
> * Ayiee, looks like this CPU is stuck ...
>
Similar change is needed for x86-64 as well. No?
Thanks,
Venki
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists