Trinabh Gupta <trinabh@xxxxxxxxxxxxxxxxxx> writes: > Cpuidle subsystem only suggests the state to enter and does not > guarantee if the suggested state is entered. The actual entered state > may be different because of software or hardware demotion. Software > demotion is done by the back-end cpuidle driver and can be accounted > correctly. Current cpuidle code uses last_state field to capture the > actual state entered and based on that updates the statistics for the > state entered. > > Ideally the driver enter routine should update the counters, > and it should return the state actually entered rather than the time > spent there. OK, the return type was changed to return the state index instead of the time, but since the governors are still relying on dev->last_residency, drivers are required to update it. Because of that, why not keep the update of the time/usage counters in common code rather than duplicating it (9 times in this patch) into all the drivers? Something like the patch below should suffice. Kevin diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 845d3ef..875d241 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -91,6 +91,11 @@ static void cpuidle_idle_call(void) entered_state = target_state->enter(dev, drv, next_state); + /* Update cpuidle counters */ + dev->states_usage[entered_state].time += + (unsigned long long)dev->last_residency; + dev->states_usage[entered_state].usage++; + trace_power_end(dev->cpu); trace_cpu_idle(PWR_EVENT_EXIT, dev->cpu); _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm