[PATCH 2/3] cpuidle: teo: Avoid expecting unrealistic idle times

From: Rafael J. Wysocki
Date: Tue Nov 12 2019 - 19:11:40 EST


From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>

If an idle state shallower than the one "matching" the time till the
next timer event is considered for selection, expect the idle duration
to fall in the middle of the "bin" corresponding to that state rather
than at the beginning of it which is unrealistic.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
drivers/cpuidle/governors/teo.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

Index: linux-pm/drivers/cpuidle/governors/teo.c
===================================================================
--- linux-pm.orig/drivers/cpuidle/governors/teo.c
+++ linux-pm/drivers/cpuidle/governors/teo.c
@@ -360,7 +360,14 @@ static int teo_select(struct cpuidle_dri

if (max_early_idx >= 0) {
idx = max_early_idx;
- duration_ns = drv->states[idx].target_residency_ns;
+ /*
+ * Expect the idle duration to fall in the middle of the
+ * "bin" corresponding to idx (note that the maximum
+ * state index is guaranteed to be greater than idx at
+ * this point).
+ */
+ duration_ns = (drv->states[idx].target_residency_ns +
+ drv->states[idx+1].target_residency_ns) / 2;
}
}