Patch "cpuidle / menu: Return (-1) if there are no suitable states" has been added to the 3.10-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
cpuidle / menu: Return (-1) if there are no suitable states
to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cpuidle-menu-return-1-if-there-are-no-suitable-states.patch
and it can be found in the queue-3.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
3836785a1bdcd6706c68ad46bf53adc0b057b310Mon Sep 17 00:00:00 2001
From: "Rafael J. Wysocki" <[email protected]>
Date: Thu, 1 May 2014 00:14:04 +0200
Subject: cpuidle / menu: Return (-1) if there are no suitable states
From: "Rafael J. Wysocki" <[email protected]>
commit 3836785a1bdcd6706c68ad46bf53adc0b057b310 upstream.
If there is a PM QoS latency limit and all of the sufficiently shallow C-states are disabled, the cpuidle menu governor returns 0 which on some systems is CPUIDLE_DRIVER_STATE_START and shouldn't be returned if that C-state has been disabled.
Fix the issue by modifying the menu governor to return (-1) in such situations.
[shilpab: Backport to 3.10.y
- adjust context
- add a check if 'next_state' is less than 0 in 'cpuidle_idle_call()', this ensures that we exit 'cpuidle_idle_call()' if governor->select() returns negative value]
--- drivers/cpuidle/cpuidle.c | 3 +++ drivers/cpuidle/governors/menu.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
drivers/cpuidle/cpuidle.c +3 -0
@@ -135,6 +135,9 @@ int cpuidle_idle_call(void)/* ask the governor for the next state */ next_state = cpuidle_curr_governor->select (drv, dev); +if (next_state <0 ) +return -EBUSY ; +if (need_resched ()) { dev->last_residency =0 ;/* give the governor an opportunity to reflect on the outcome */
drivers/cpuidle/governors/menu.c +1 -1
@@ -269,7 +269,7 @@ static int menu_select(struct cpuidle_dr data->needs_update =0 ; } - data->last_state_idx =0 ; + data->last_state_idx =CPUIDLE_DRIVER_STATE_START -1 ; data->exit_us =0 ;/* Special case when user has set very strict latency requirement */
Patches currently in stable-queue which might be from [email protected] are
queue-3.10/cpuidle-menu-return-1-if-there-are-no-suitable-states.patch