Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42594970 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge branch 'nohz/drop-double-write-v3' of...

Merge branch 'nohz/drop-double-write-v3' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks

 into timers/core

Pull nohz fixes from Frederic Weisbecker:

	" The tick reschedules itself unconditionally. It's relevant in periodic
	  mode but not in dynticks mode where it results in spurious double clock
	  writes and even spurious periodic behaviour for low-res case.

	  This set fixes that:

	  * 1st patch removes low-res periodic tick rescheduling in nohz mode.
	    This fixes spurious periodic behaviour.

	  * 2nd patch does the same for high-res mode. Here there is no such
	    spurious periodic behaviour but it still spares a double clock write
	    in some cases. "

Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 52addcf9 2a16fc93
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -968,6 +968,10 @@ static void tick_nohz_handler(struct clock_event_device *dev)
	tick_sched_do_timer(now);
	tick_sched_handle(ts, regs);

	/* No need to reprogram if we are running tickless  */
	if (unlikely(ts->tick_stopped))
		return;

	while (tick_nohz_reprogram(ts, now)) {
		now = ktime_get();
		tick_do_update_jiffies64(now);
@@ -1095,6 +1099,10 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
	if (regs)
		tick_sched_handle(ts, regs);

	/* No need to reprogram if we are in idle or full dynticks mode */
	if (unlikely(ts->tick_stopped))
		return HRTIMER_NORESTART;

	hrtimer_forward(timer, now, tick_period);

	return HRTIMER_RESTART;