Commit-ID: 4e85876a9d2a977b4a07389da8c07edf76d10825 Gitweb: http://git.kernel.org/tip/4e85876a9d2a977b4a07389da8c07edf76d10825 Author: Thomas Gleixner <tglx@xxxxxxxxxxxxx> AuthorDate: Mon, 4 Jul 2016 09:50:37 +0000 Committer: Ingo Molnar <mingo@xxxxxxxxxx> CommitDate: Thu, 7 Jul 2016 10:35:11 +0200 timers: Only wake softirq if necessary With the wheel forwading in place and with the HZ=1000 4ms folding we can avoid running the softirq at all. Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Arjan van de Ven <arjan@xxxxxxxxxxxxx> Cc: Chris Mason <clm@xxxxxx> Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx> Cc: George Spelvin <linux@xxxxxxxxxxxxxxxxxxx> Cc: Josh Triplett <josh@xxxxxxxxxxxxxxxx> Cc: Len Brown <lenb@xxxxxxxxxx> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Paul McKenney <paulmck@xxxxxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Rik van Riel <riel@xxxxxxxxxx> Cc: rt@xxxxxxxxxxxxx Link: http://lkml.kernel.org/r/20160704094342.607650550@xxxxxxxxxxxxx Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> --- kernel/time/timer.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 9339d71..8d830f1 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -1608,7 +1608,18 @@ static void run_timer_softirq(struct softirq_action *h) */ void run_local_timers(void) { + struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]); + hrtimer_run_queues(); + /* Raise the softirq only if required. */ + if (time_before(jiffies, base->clk)) { + if (!IS_ENABLED(CONFIG_NO_HZ_COMMON) || !base->nohz_active) + return; + /* CPU is awake, so check the deferrable base. */ + base++; + if (time_before(jiffies, base->clk)) + return; + } raise_softirq(TIMER_SOFTIRQ); } -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |