in cpuidle.c [77:100]
static int find_deepest_state(struct cpuidle_driver *drv,
struct cpuidle_device *dev,
u64 max_latency_ns,
unsigned int forbidden_flags,
bool s2idle)
{
u64 latency_req = 0;
int i, ret = 0;
for (i = 1; i < drv->state_count; i++) {
struct cpuidle_state *s = &drv->states[i];
if (dev->states_usage[i].disable ||
s->exit_latency_ns <= latency_req ||
s->exit_latency_ns > max_latency_ns ||
(s->flags & forbidden_flags) ||
(s2idle && !s->enter_s2idle))
continue;
latency_req = s->exit_latency_ns;
ret = i;
}
return ret;
}