linux/drivers/cpuidle
Rafael J. Wysocki 3810631332 PM / sleep: Re-implement suspend-to-idle handling
In preparation for adding support for quiescing timers in the final
stage of suspend-to-idle transitions, rework the freeze_enter()
function making the system wait on a wakeup event, the freeze_wake()
function terminating the suspend-to-idle loop and the mechanism by
which deep idle states are entered during suspend-to-idle.

First of all, introduce a simple state machine for suspend-to-idle
and make the code in question use it.

Second, prevent freeze_enter() from losing wakeup events due to race
conditions and ensure that the number of online CPUs won't change
while it is being executed.  In addition to that, make it force
all of the CPUs re-enter the idle loop in case they are in idle
states already (so they can enter deeper idle states if possible).

Next, drop cpuidle_use_deepest_state() and replace use_deepest_state
checks in cpuidle_select() and cpuidle_reflect() with a single
suspend-to-idle state check in cpuidle_idle_call().

Finally, introduce cpuidle_enter_freeze() that will simply find the
deepest idle state available to the given CPU and enter it using
cpuidle_enter().

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
2015-02-13 23:49:36 +01:00
..
governors cpuidle: ladder: Better idle duration measurement without using CPUIDLE_FLAG_TIME_INVALID 2014-12-17 02:26:28 +01:00
coupled.c arch: Mass conversion of smp_mb__*() 2014-04-18 14:20:48 +02:00
cpuidle-arm64.c arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00
cpuidle-at91.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-big_little.c drivers: cpuidle: Don't initialize big.LITTLE driver if MCPM is unavailable 2015-01-23 15:05:48 +01:00
cpuidle-calxeda.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-clps711x.c cpuidle: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
cpuidle-cps.c cpuidle: Invert CPUIDLE_FLAG_TIME_VALID logic 2014-11-12 21:17:27 +01:00
cpuidle-exynos.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-kirkwood.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-mvebu-v7.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-powernv.c powerpc updates for 3.19 batch 2 2014-12-19 12:57:45 -08:00
cpuidle-pseries.c cpuidle: Invert CPUIDLE_FLAG_TIME_VALID logic 2014-11-12 21:17:27 +01:00
cpuidle-ux500.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle-zynq.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
cpuidle.c PM / sleep: Re-implement suspend-to-idle handling 2015-02-13 23:49:36 +01:00
cpuidle.h cpuidle: support multiple drivers 2012-11-15 00:34:23 +01:00
driver.c cpuidle: Invert CPUIDLE_FLAG_TIME_VALID logic 2014-11-12 21:17:27 +01:00
dt_idle_states.c Merge back earlier cpuidle material for 3.19-rc1. 2014-11-21 16:31:42 +01:00
dt_idle_states.h drivers: cpuidle: implement DT based idle states infrastructure 2014-09-25 10:52:20 +02:00
governor.c cpuidle: Replace strnicmp with strncasecmp 2014-09-25 01:17:10 +02:00
Kconfig drivers: cpuidle: CPU idle ARM64 driver 2014-09-25 10:52:21 +02:00
Kconfig.arm ACPI and power management updates for 3.18-rc1 2014-10-09 16:07:43 -04:00
Kconfig.arm64 arm64: kernel: remove ARM64_CPU_SUSPEND config option 2015-01-27 11:35:33 +00:00
Kconfig.mips MIPS: Kconfig: Add missing MIPS_CPS dependencies to PM and cpuidle 2014-10-23 19:58:05 +02:00
Kconfig.powerpc powerpc/powernv/cpuidle: Back-end cpuidle driver for powernv platform. 2014-01-29 17:02:24 +11:00
Makefile drivers: cpuidle: CPU idle ARM64 driver 2014-09-25 10:52:21 +02:00
sysfs.c cpuidle: fix permission for driver name sysfs node 2014-07-19 21:43:28 +02:00