* [PATCH] nohz: Clarify magic in tick_nohz_stop_sched_tick()
@ 2015-11-19 16:21 Peter Zijlstra
2015-11-25 21:39 ` [tip:timers/core] " tip-bot for Peter Zijlstra
0 siblings, 1 reply; 2+ messages in thread
From: Peter Zijlstra @ 2015-11-19 16:21 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Ingo Molnar, Frederic Weisbecker, linux-kernel
While going through the nohz code I got stumped by some of it.
This patch adds a few comments clarifying the code; based on discussion
with Thomas.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 7c7ec4515983..cba9f3479fab 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -603,15 +603,31 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
/*
* If the tick is due in the next period, keep it ticking or
- * restart it proper.
+ * force prod the timer.
*/
delta = next_tick - basemono;
if (delta <= (u64)TICK_NSEC) {
tick.tv64 = 0;
+ /*
+ * We've not stopped the tick yet, and there's a timer in the
+ * next period, so no point in stopping it either, bail.
+ */
if (!ts->tick_stopped)
goto out;
+
+ /*
+ * If, OTOH, we did stop it, but there's a pending (expired)
+ * timer reprogram the timer hardware to fire now.
+ *
+ * We will not restart the tick proper, just prod the timer
+ * hardware into firing an interrupt to process the pending
+ * timers. Just like tick_irq_exit() will not restart the tick
+ * for 'normal' interrupts.
+ *
+ * Only once we exit the idle loop will we re-enable the tick,
+ * see tick_nohz_idle_exit().
+ */
if (delta == 0) {
- /* Tick is stopped, but required now. Enforce it */
tick_nohz_restart(ts, now);
goto out;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [tip:timers/core] nohz: Clarify magic in tick_nohz_stop_sched_tick()
2015-11-19 16:21 [PATCH] nohz: Clarify magic in tick_nohz_stop_sched_tick() Peter Zijlstra
@ 2015-11-25 21:39 ` tip-bot for Peter Zijlstra
0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Peter Zijlstra @ 2015-11-25 21:39 UTC (permalink / raw)
To: linux-tip-commits; +Cc: fweisbec, tglx, peterz, mingo, linux-kernel, hpa
Commit-ID: 82bbe34b3d895fb026b2fc0e7da2e641797bfaed
Gitweb: http://git.kernel.org/tip/82bbe34b3d895fb026b2fc0e7da2e641797bfaed
Author: Peter Zijlstra <peterz@infradead.org>
AuthorDate: Thu, 19 Nov 2015 17:21:06 +0100
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 25 Nov 2015 22:37:27 +0100
nohz: Clarify magic in tick_nohz_stop_sched_tick()
While going through the nohz code I got stumped by some of it.
This patch adds a few comments clarifying the code; based on discussion
with Thomas.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Link: http://lkml.kernel.org/r/20151119162106.GO3816@twins.programming.kicks-ass.net
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
kernel/time/tick-sched.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 7c7ec45..7ea28ed 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -603,15 +603,31 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
/*
* If the tick is due in the next period, keep it ticking or
- * restart it proper.
+ * force prod the timer.
*/
delta = next_tick - basemono;
if (delta <= (u64)TICK_NSEC) {
tick.tv64 = 0;
+ /*
+ * We've not stopped the tick yet, and there's a timer in the
+ * next period, so no point in stopping it either, bail.
+ */
if (!ts->tick_stopped)
goto out;
+
+ /*
+ * If, OTOH, we did stop it, but there's a pending (expired)
+ * timer reprogram the timer hardware to fire now.
+ *
+ * We will not restart the tick proper, just prod the timer
+ * hardware into firing an interrupt to process the pending
+ * timers. Just like tick_irq_exit() will not restart the tick
+ * for 'normal' interrupts.
+ *
+ * Only once we exit the idle loop will we re-enable the tick,
+ * see tick_nohz_idle_exit().
+ */
if (delta == 0) {
- /* Tick is stopped, but required now. Enforce it */
tick_nohz_restart(ts, now);
goto out;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-11-25 21:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-19 16:21 [PATCH] nohz: Clarify magic in tick_nohz_stop_sched_tick() Peter Zijlstra
2015-11-25 21:39 ` [tip:timers/core] " tip-bot for Peter Zijlstra
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.