From: Ingo Molnar <mingo@elte.hu>
To: Andrew Morton <akpm@osdl.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
LKML <linux-kernel@vger.kernel.org>, Jim Gettys <jg@laptop.org>,
John Stultz <johnstul@us.ibm.com>,
David Woodhouse <dwmw2@infradead.org>,
Arjan van de Ven <arjan@infradead.org>,
Dave Jones <davej@redhat.com>
Subject: [patch] dynticks: core, NMI watchdog fix
Date: Mon, 2 Oct 2006 08:41:27 +0200 [thread overview]
Message-ID: <20061002064127.GA20841@elte.hu> (raw)
In-Reply-To: <20061001225724.985115000@cruncher.tec.linutronix.de>
Andrew: find below a fix for a bug that could cause lockups if NO_HZ,
lockdep and the NMI watchdog are all activated. This patch comes after
dynticks-core.patch. Compile and boot tested.
Ingo
----------------->
Subject: dynticks: core, NMI watchdog fix
From: Ingo Molnar <mingo@elte.hu>
fix an NMI-watchdog interaction: we dont want to call
hrtimer_update_jiffies() in NMI contexts ...
create __irq_enter() (which is symmetric to __irq_exit())
and use it in nmi_enter() and irq_enter().
[ Note: like __irq_exit() it needs to be a macro because
hardirq.h is included early on and types like struct
task_struct are not available yet. ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
--
include/linux/hardirq.h | 12 +++++++++++-
kernel/softirq.c | 5 +----
2 files changed, 12 insertions(+), 5 deletions(-)
Index: linux/include/linux/hardirq.h
===================================================================
--- linux.orig/include/linux/hardirq.h
+++ linux/include/linux/hardirq.h
@@ -106,6 +106,16 @@ static inline void account_system_vtime(
* always balanced, so the interrupted value of ->hardirq_context
* will always be restored.
*/
+#define __irq_enter() \
+ do { \
+ account_system_vtime(current); \
+ add_preempt_count(HARDIRQ_OFFSET); \
+ trace_hardirq_enter(); \
+ } while (0)
+
+/*
+ * Enter irq context (on NO_HZ, update jiffies):
+ */
extern void irq_enter(void);
/*
@@ -123,7 +133,7 @@ extern void irq_enter(void);
*/
extern void irq_exit(void);
-#define nmi_enter() do { lockdep_off(); irq_enter(); } while (0)
+#define nmi_enter() do { lockdep_off(); __irq_enter(); } while (0)
#define nmi_exit() do { __irq_exit(); lockdep_on(); } while (0)
#endif /* LINUX_HARDIRQ_H */
Index: linux/kernel/softirq.c
===================================================================
--- linux.orig/kernel/softirq.c
+++ linux/kernel/softirq.c
@@ -278,10 +278,7 @@ EXPORT_SYMBOL(do_softirq);
*/
void irq_enter(void)
{
- account_system_vtime(current);
- add_preempt_count(HARDIRQ_OFFSET);
- trace_hardirq_enter();
-
+ __irq_enter();
#ifdef CONFIG_NO_HZ
if (idle_cpu(smp_processor_id()))
hrtimer_update_jiffies();
next prev parent reply other threads:[~2006-10-02 6:50 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-01 22:59 [patch 00/21] high resolution timers / dynamic ticks - V2 Thomas Gleixner
2006-10-01 22:59 ` [patch 01/21] GTOD: exponential update_wall_time Thomas Gleixner
2006-10-01 23:00 ` [patch 02/21] GTOD: persistent clock support, core Thomas Gleixner
2006-10-01 23:00 ` [patch 03/21] GTOD: persistent clock support, i386 Thomas Gleixner
2006-10-01 23:00 ` [patch 04/21] time: uninline jiffies.h Thomas Gleixner
2006-10-01 23:00 ` [patch 05/21] time: fix msecs_to_jiffies() bug Thomas Gleixner
2006-10-01 23:00 ` [patch 06/21] time: fix timeout overflow Thomas Gleixner
2006-10-01 23:00 ` [patch 07/21] cleanup: uninline irq_enter() and move it into a function Thomas Gleixner
2006-10-01 23:00 ` [patch 08/21] dynticks: extend next_timer_interrupt() to use a reference jiffie Thomas Gleixner
2006-10-01 23:00 ` [patch 09/21] hrtimers: namespace and enum cleanup Thomas Gleixner
2006-10-01 23:00 ` [patch 10/21] hrtimers: clean up locking Thomas Gleixner
2006-10-01 23:00 ` [patch 11/21] hrtimers: state tracking Thomas Gleixner
2006-10-01 23:00 ` [patch 12/21] hrtimers: clean up callback tracking Thomas Gleixner
2006-10-01 23:01 ` [patch 13/21] hrtimers: Move and add documentation Thomas Gleixner
2006-10-01 23:01 ` [patch 14/21] clockevents: core Thomas Gleixner
2006-10-01 23:01 ` [patch 15/21] clockevents: drivers for i386 Thomas Gleixner
2006-10-01 23:01 ` [patch 16/21] high-res timers: core Thomas Gleixner
2006-10-02 11:50 ` Paulo Marques
2006-10-01 23:01 ` [patch 17/21] dynticks: core Thomas Gleixner
2006-10-02 6:41 ` Ingo Molnar [this message]
2006-10-02 8:54 ` [patch] dynticks: core, NMI watchdog fix, #2 Ingo Molnar
2006-10-01 23:01 ` [patch 18/21] dyntick: add nohz stats to /proc/stat Thomas Gleixner
2006-10-01 23:01 ` [patch 19/21] dynticks: i386 arch code Thomas Gleixner
2006-10-01 23:01 ` [patch 20/21] high-res timers, dynticks: enable i386 support Thomas Gleixner
2006-10-01 23:01 ` [patch 21/21] debugging feature: timer stats Thomas Gleixner
2006-10-02 5:11 ` [patch 00/21] high resolution timers / dynamic ticks - V2 Valdis.Kletnieks
2006-10-02 13:02 ` Valdis.Kletnieks
2006-10-02 13:43 ` Thomas Gleixner
2006-10-02 18:25 ` Valdis.Kletnieks
2006-10-02 18:38 ` john stultz
2006-10-02 19:08 ` Valdis.Kletnieks
2006-10-02 19:23 ` john stultz
2006-10-02 18:43 ` [patch] dynticks core: Fix idle time accounting Thomas Gleixner
2006-10-02 20:17 ` Valdis.Kletnieks
2006-10-02 21:22 ` Thomas Gleixner
2006-10-02 21:35 ` Valdis.Kletnieks
2006-10-03 20:02 ` Thomas Gleixner
2006-10-03 21:05 ` Thomas Gleixner
2006-10-04 2:33 ` Valdis.Kletnieks
2006-10-04 7:56 ` Ingo Molnar
2006-10-04 9:58 ` Valdis.Kletnieks
2006-10-03 3:23 ` [patch 00/21] high resolution timers / dynamic ticks - V2 Andrew Morton
2006-10-03 4:00 ` Andrew Morton
2006-10-03 8:38 ` Thomas Gleixner
2006-10-03 8:47 ` Ingo Molnar
2006-10-03 10:35 ` [patch] clockevents: drivers for i386, fix #2 Ingo Molnar
2006-10-04 3:36 ` Andrew Morton
2006-10-04 6:46 ` Ingo Molnar
2006-10-04 7:32 ` Andrew Morton
2006-10-04 7:41 ` Ingo Molnar
2006-10-04 8:01 ` Andrew Morton
2006-10-04 7:55 ` Ingo Molnar
2006-10-04 8:15 ` Andrew Morton
2006-10-04 10:53 ` Ingo Molnar
2006-10-04 11:19 ` Thomas Gleixner
2006-10-04 16:02 ` Andrew Morton
2006-10-04 16:20 ` Thomas Gleixner
2006-10-04 16:35 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061002064127.GA20841@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=arjan@infradead.org \
--cc=davej@redhat.com \
--cc=dwmw2@infradead.org \
--cc=jg@laptop.org \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.