cpuidle: menu: Fix menu_select() for CPUIDLE_DRIVER_STATE_START == 0
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 14 Jan 2016 22:24:22 +0000 (23:24 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 14 Jan 2016 22:24:22 +0000 (23:24 +0100)
commit9c4b2867ed7c8c8784dd417ffd16e705e81eb145
treecdb9a119d25dfd0347551b26d45ff6a95750ba75
parent84599238ea78d98136fc6f6239a14083128ecf8b
cpuidle: menu: Fix menu_select() for CPUIDLE_DRIVER_STATE_START == 0

Commit a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable
polling) exposed a bug in menu_select() causing it to return -1
on systems with CPUIDLE_DRIVER_STATE_START equal to zero, although
it should have returned 0.  As a result, idle states are not entered
by CPUs on those systems.

Namely, on the systems in question data->last_state_idx is initially
equal to -1 and the above commit modified the condition that would
have caused it to be changed to 0 to be less likely to trigger which
exposed the problem.  However, setting data->last_state_idx initially
to -1 doesn't make sense at all and on the affected systems it should
always be set to CPUIDLE_DRIVER_STATE_START (ie. 0) unconditionally,
so make that happen.

Fixes: a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable polling)
Reported-and-tested-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpuidle/governors/menu.c