Messages in this thread |  | | From | Doug Smythies <> | Date | Thu, 29 Jul 2021 20:36:49 -0700 | Subject | Re: [PATCH v1 0/5] cpuidle: teo: Rework the idle state selection logic |
| |
On Thu, Jul 29, 2021 at 9:14 AM Rafael J. Wysocki <rjw@rjwysocki.net> wrote: > ... [snip]... > > This means that idle state 0 data are disregarded after disabling it > and that most likely is because the second loop in teo_select() should > be over all states down to idle state 0 (not only down to the first > enabled one). > > So below is an updated patch (not tested yet).
Hi Rafael,
This updated patch works great / solves the problem. Tested-by: Doug Smythies <dsmythies@telus.net>
Thank you very much.
... Doug
> > --- > drivers/cpuidle/governors/teo.c | 28 +++++++++++++++------------- > 1 file changed, 15 insertions(+), 13 deletions(-) > > Index: linux-pm/drivers/cpuidle/governors/teo.c > =================================================================== > --- linux-pm.orig/drivers/cpuidle/governors/teo.c > +++ linux-pm/drivers/cpuidle/governors/teo.c > @@ -397,32 +397,34 @@ static int teo_select(struct cpuidle_dri > intercept_sum = 0; > recent_sum = 0; > > - for (i = idx - 1; i >= idx0; i--) { > + for (i = idx - 1; i >= 0; i--) { > struct teo_bin *bin = &cpu_data->state_bins[i]; > s64 span_ns; > > intercept_sum += bin->intercepts; > recent_sum += bin->recent; > > - if (dev->states_usage[i].disable) > + if (dev->states_usage[i].disable && i > 0) > continue; > > span_ns = teo_middle_of_bin(i, drv); > - if (!teo_time_ok(span_ns)) { > - /* > - * The current state is too shallow, so select > - * the first enabled deeper state. > - */ > - duration_ns = last_enabled_span_ns; > - idx = last_enabled_idx; > - break; > - } > > if ((!alt_recent || 2 * recent_sum > idx_recent_sum) && > (!alt_intercepts || > 2 * intercept_sum > idx_intercept_sum)) { > - idx = i; > - duration_ns = span_ns; > + if (!teo_time_ok(span_ns) || > + dev->states_usage[i].disable) { > + /* > + * The current state is too shallow or > + * disabled, so select the first enabled > + * deeper state. > + */ > + duration_ns = last_enabled_span_ns; > + idx = last_enabled_idx; > + } else { > + idx = i; > + duration_ns = span_ns; > + } > break; > }
|  |