diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-08-09 20:08:34 +0300 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2018-08-20 12:25:55 +0300 |
commit | 7059b36636beab57c3c43c62104483e5449bee95 (patch) | |
tree | 8f84724860a3ab59460d3cff6c5b9f607c7419c3 /kernel | |
parent | 50f7ccc64750610f57983720613713b2c14f0e9c (diff) | |
download | linux-7059b36636beab57c3c43c62104483e5449bee95.tar.xz |
sched: idle: Avoid retaining the tick when it has been stopped
If the tick has been stopped already, but the governor has not asked to
stop it (which it can do sometimes), the idle loop should invoke
tick_nohz_idle_stop_tick(), to let tick_nohz_stop_tick() take care
of this case properly.
Fixes: 554c8aa8ecad (sched: idle: Select idle state before stopping the tick)
Cc: 4.17+ <stable@vger.kernel.org> # 4.17+
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched/idle.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 1a3e9bddd17b..16f84142f2f4 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -190,7 +190,7 @@ static void cpuidle_idle_call(void) */ next_state = cpuidle_select(drv, dev, &stop_tick); - if (stop_tick) + if (stop_tick || tick_nohz_tick_stopped()) tick_nohz_idle_stop_tick(); else tick_nohz_idle_retain_tick(); |