Thanks again for making this happen, Daniel. I like this version, except for the small nitpick that I still think it would make sense to also turn the loop in menu.c around. How about something like this:
for (i = drv->state_count - 1; i >= CPUIDLE_DRIVER_STATE_START; i++) { struct cpuidle_state *s = &drv->states[i]; if (!s->disable && s->exit_latency <= latency_req && s->target_residency <= data->predicted_us && s->exit_latency * multiplier <= data->predicted_us) { data->last_state_idx = i; data->exit_us = s->exit_latency; break; } }