cpuidle: teo: Update idle duration estimate when choosing shallower state
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 31 Jul 2023 18:56:35 +0000 (20:56 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 3 Aug 2023 20:36:09 +0000 (22:36 +0200)
commit3f0b0966b30982e843950b170b7a9ddfd8094428
treec7749ffb176628a1208075dd7bf372c2f7fa8b66
parent5d0c230f1de8c7515b6567d9afba1f196fb4e2f4
cpuidle: teo: Update idle duration estimate when choosing shallower state

The TEO governor takes CPU utilization into account by refining idle state
selection when the utilization is above a certain threshold.  This is done by
choosing an idle state shallower than the previously selected one.

However, when doing this, the idle duration estimate needs to be
adjusted so as to prevent the scheduler tick from being stopped when the
candidate idle state is shallow, which may lead to excessive energy
usage if the CPU is not woken up quickly enough going forward.
Moreover, if the scheduler tick has been stopped already and the new
idle duration estimate is too small, the replacement candidate state
cannot be used.

Modify the relevant code to take the above observations into account.

Fixes: 9ce0f7c4bc64 ("cpuidle: teo: Introduce util-awareness")
Link: https://lore.kernel.org/linux-pm/CAJZ5v0jJxHj65r2HXBTd3wfbZtsg=_StzwO1kA5STDnaPe_dWA@mail.gmail.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-and-tested-by: Kajetan Puchalski <kajetan.puchalski@arm.com>
drivers/cpuidle/governors/teo.c