linux/drivers/cpuidle
Carsten Emde 62d6ae880e Honor state disabling in the cpuidle ladder governor
There are two cpuidle governors ladder and menu. While the ladder
governor is always available, if CONFIG_CPU_IDLE is selected, the
menu governor additionally requires CONFIG_NO_HZ.

A particular C state can be disabled by writing to the sysfs file
/sys/devices/system/cpu/cpuN/cpuidle/stateN/disable, but this mechanism
is only implemented in the menu governor. Thus, in a system where
CONFIG_NO_HZ is not selected, the ladder governor becomes default and
always will walk through all sleep states - irrespective of whether the
C state was disabled via sysfs or not. The only way to select a specific
C state was to write the related latency to /dev/cpu_dma_latency and
keep the file open as long as this setting was required - not very
practical and not suitable for setting a single core in an SMP system.

With this patch, the ladder governor only will promote to the next
C state, if it has not been disabled, and it will demote, if the
current C state was disabled.

Note that the patch does not make the setting of the sysfs variable
"disable" coherent, i.e. if one is disabling a light state, then all
deeper states are disabled as well, but the "disable" variable does not
reflect it. Likewise, if one enables a deep state but a lighter state
still is disabled, then this has no effect. A related section has been
added to the documentation.

Signed-off-by: Carsten Emde <C.Emde@osadl.org>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2012-09-04 01:35:44 +02:00
..
governors Honor state disabling in the cpuidle ladder governor 2012-09-04 01:35:44 +02:00
coupled.c cpuidle: Prevent null pointer dereference in cpuidle_coupled_cpu_notify 2012-08-17 19:37:08 +02:00
cpuidle.c Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-07-26 14:28:55 -07:00
cpuidle.h cpuidle: add support for states that affect multiple cpus 2012-06-02 00:49:09 -04:00
driver.c PM / cpuidle: Add driver reference counter 2012-07-03 19:06:25 +02:00
governor.c cpuidle: create bootparam "cpuidle.off=1" 2011-08-03 19:06:36 -04:00
Kconfig cpuidle: add support for states that affect multiple cpus 2012-06-02 00:49:09 -04:00
Makefile cpuidle: add support for states that affect multiple cpus 2012-06-02 00:49:09 -04:00
sysfs.c cpuidle: move field disable from per-driver to per-cpu 2012-07-03 19:05:31 +02:00