linux/drivers/cpuidle
Shreyas B. Prabhu 7cba160ad7 powernv/cpuidle: Redesign idle states management
Deep idle states like sleep and winkle are per core idle states. A core
enters these states only when all the threads enter either the
particular idle state or a deeper one. There are tasks like fastsleep
hardware bug workaround and hypervisor core state save which have to be
done only by the last thread of the core entering deep idle state and
similarly tasks like timebase resync, hypervisor core register restore
that have to be done only by the first thread waking up from these
state.

The current idle state management does not have a way to distinguish the
first/last thread of the core waking/entering idle states. Tasks like
timebase resync are done for all the threads. This is not only is
suboptimal, but can cause functionality issues when subcores and kvm is
involved.

This patch adds the necessary infrastructure to track idle states of
threads in a per-core structure. It uses this info to perform tasks like
fastsleep workaround and timebase resync only once per core.

Signed-off-by: Shreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
Originally-by: Preeti U. Murthy <preeti@linux.vnet.ibm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: linux-pm@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2014-12-15 10:46:40 +11:00
..
governors drivers/cpuidle: Replace __get_cpu_var uses for address calculation 2014-08-26 13:45:45 -04:00
coupled.c arch: Mass conversion of smp_mb__*() 2014-04-18 14:20:48 +02:00
cpuidle-arm64.c drivers: cpuidle: CPU idle ARM64 driver 2014-09-25 10:52:21 +02:00
cpuidle-at91.c ARM: at91: cpuidle: Move driver to drivers/cpuidle 2013-10-16 23:49:35 +02:00
cpuidle-big_little.c drivers: cpuidle: initialize big.LITTLE driver through DT 2014-09-25 10:52:21 +02:00
cpuidle-calxeda.c ARM/cpuidle: remove __init tag from Calxeda cpuidle probe function 2013-12-30 11:55:20 +01:00
cpuidle-clps711x.c ARM: clps711x: Add cpuidle driver 2014-04-30 01:33:02 +02:00
cpuidle-cps.c cpuidle: cpuidle-cps: add MIPS CPS cpuidle driver 2014-05-28 16:20:36 +01:00
cpuidle-exynos.c ARM: EXYNOS: Fix suspend/resume sequences 2014-08-09 08:24:36 -07:00
cpuidle-kirkwood.c cpuidle-kirkwood.c: simplify use of devm_ioremap_resource() 2013-08-14 22:20:06 +02:00
cpuidle-mvebu-v7.c cpuidle: mvebu: add Armada 38x support 2014-07-24 11:47:29 +00:00
cpuidle-powernv.c powernv/cpuidle: Redesign idle states management 2014-12-15 10:46:40 +11:00
cpuidle-pseries.c cpuidle/pseries: Fix fallout caused due to cleanup in pseries cpuidle backend driver 2014-02-12 08:05:03 +01:00
cpuidle-ux500.c ARM: ux500: cpuidle: fix section mismatch 2013-10-07 16:47:07 +02:00
cpuidle-zynq.c ARM: zynq: cpuidle: Remove pointless code 2014-09-16 12:55:09 +02:00
cpuidle.c sched: Let the scheduler see CPU idle states 2014-09-24 14:46:58 +02:00
cpuidle.h cpuidle: support multiple drivers 2012-11-15 00:34:23 +01:00
driver.c cpuidle: Remove time measurement in poll state 2014-07-29 01:37:57 +02:00
dt_idle_states.c drivers: cpuidle: implement DT based idle states infrastructure 2014-09-25 10:52:20 +02: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 drivers: cpuidle: CPU idle ARM64 driver 2014-09-25 10:52:21 +02: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