On 09/26/2013 08:09 AM, Viresh Kumar wrote:
On 26 September 2013 03:52, Daniel Lezcano daniel.lezcano@linaro.org wrote:
On 09/22/2013 03:21 AM, Viresh Kumar wrote:
Signed-off-by: Viresh Kumar viresh.kumar@linaro.org
This deserved a log, sorry for missing that :(
The optimization sounds good but IMHO if we can move this state out of the cpuidle common framework that would be nicer.
The poll_idle is only applicable for x86 (acpi_driver and intel_idle), hence I suggest we move this state to these drivers, that will cleanup the framework code and will remove index shift macro CPUIDLE_DRIVER_STATE_START which IMHO is weid and prone-to-error.
Lets see what X86 folks have to say about it and then we can do it.. Btw, wouldn't that add some code duplication in those two drivers?
Yes, certainly and that will impact also the menu select governor function:
...
/* * We want to default to C1 (hlt), not to busy polling * unless the timer is happening really really soon. */ if (data->expected_us > 5 && !drv->states[CPUIDLE_DRIVER_STATE_START].disabled && dev->states_usage[CPUIDLE_DRIVER_STATE_START].disable == 0) data->last_state_idx = CPUIDLE_DRIVER_STATE_START;
/* * Find the idle state with the lowest power while satisfying * our constraints. */ for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) { struct cpuidle_state *s = &drv->states[i]; struct cpuidle_state_usage *su = &dev->states_usage[i];
if (s->disabled || su->disable) continue; if (s->target_residency > data->predicted_us) continue; if (s->exit_latency > latency_req) continue; if (s->exit_latency * multiplier > data->predicted_us) continue;
data->last_state_idx = i; data->exit_us = s->exit_latency; }
....