]> asedeno.scripts.mit.edu Git - linux.git/commit
cpuidle: menu: Retain tick when shallow state is selected
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 21 Aug 2018 08:44:10 +0000 (10:44 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 25 Aug 2018 11:16:08 +0000 (13:16 +0200)
commit757ab15c3f4968b5a29caf3fe8b67660ce84c3cd
tree0f42fe2012bec1b64dc4fbdf8aae306e3268c944
parentdfec4a8478e8e81483a94b663f13153bb7796800
cpuidle: menu: Retain tick when shallow state is selected

The case addressed by commit 5ef499cd571c (cpuidle: menu: Handle
stopped tick more aggressively) in the stopped tick case is present
when the tick has not been stopped yet too.  Namely, if only two CPU
idle states, shallow state A with target residency significantly
below the tick boundary and deep state B with target residency
significantly above it, are available and the predicted idle
duration is above the tick boundary, but below the target residency
of state B, state A will be selected and the CPU may spend indefinite
amount of time in it, which is not quite energy-efficient.

However, if the tick has not been stopped yet and the governor is
about to select a shallow idle state for the CPU even though the idle
duration predicted by it is above the tick boundary, it should be
fine to wake up the CPU early, so the tick can be retained then and
the governor will have a chance to select a deeper state when it runs
next time.

[Note that when this really happens, it will make the idle duration
 predictor believe that the CPU might be idle longer than predicted,
 which will make it more likely to predict longer idle durations going
 forward, but that will also cause deeper idle states to be selected
 going forward, on average, which is what's needed here.]

Fixes: 87c9fe6ee495 (cpuidle: menu: Avoid selecting shallow states with stopped tick)
Reported-by: Leo Yan <leo.yan@linaro.org>
Cc: 4.17+ <stable@vger.kernel.org> # 4.17+: 5ef499cd571c (cpuidle: menu: Handle ...)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpuidle/governors/menu.c