linux/drivers/cpuidle
Ulf Hansson 6f9b83ac87 cpuidle: Export the next timer expiration for CPUs
To be able to predict the sleep duration for a CPU entering idle, it
is essential to know the expiration time of the next timer.  Both the
teo and the menu cpuidle governors already use this information for
CPU idle state selection.

Moving forward, a similar prediction needs to be made for a group of
idle CPUs rather than for a single one and the following changes
implement a new genpd governor for that purpose.

In order to support that feature, add a new function called
tick_nohz_get_next_hrtimer() that will return the next hrtimer
expiration time of a given CPU to be invoked after deciding
whether or not to stop the scheduler tick on that CPU.

Make the cpuidle core call tick_nohz_get_next_hrtimer() right
before invoking the ->enter() callback provided by the cpuidle
driver for the given state and store its return value in the
per-CPU struct cpuidle_device, so as to make it available to code
outside of cpuidle.

Note that at the point when cpuidle calls tick_nohz_get_next_hrtimer(),
the governor's ->select() callback has already returned and indicated
whether or not the tick should be stopped, so in fact the value
returned by tick_nohz_get_next_hrtimer() always is the next hrtimer
expiration time for the given CPU, possibly including the tick (if
it hasn't been stopped).

Co-developed-by: Lina Iyer <lina.iyer@linaro.org>
Co-developed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
[ rjw: Subject & changelog ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-04-10 00:32:34 +02:00
..
governors cpuidle: menu: Avoid overflows when computing variance 2019-03-07 10:54:22 +01:00
Kconfig cpuidle: New timer events oriented governor for tickless systems 2019-01-16 23:07:30 +01:00
Kconfig.arm
Kconfig.mips
Kconfig.powerpc
Makefile
coupled.c
cpuidle-arm.c ARM: cpuidle: Convert to use cpuidle_register|unregister() 2018-11-08 18:53:00 +01:00
cpuidle-at91.c
cpuidle-big_little.c cpuidle: big.LITTLE: fix refcount leak 2018-12-11 12:09:48 +01:00
cpuidle-calxeda.c
cpuidle-clps711x.c
cpuidle-cps.c
cpuidle-exynos.c cpuidle: exynos: Unify target residency for AFTR and coupled AFTR states 2019-04-01 23:49:51 +02:00
cpuidle-kirkwood.c
cpuidle-mvebu-v7.c
cpuidle-powernv.c powernv/cpuidle: Use parsed device tree values for cpuidle_init 2018-07-31 19:56:44 +10:00
cpuidle-pseries.c powerpc/pseries/cpuidle: Fix preempt warning 2018-12-04 19:45:01 +11:00
cpuidle-ux500.c
cpuidle-zynq.c
cpuidle.c cpuidle: Export the next timer expiration for CPUs 2019-04-10 00:32:34 +02:00
cpuidle.h cpuidle: Add cpuidle.governor= command line parameter 2018-12-11 12:08:44 +01:00
driver.c
dt_idle_states.c cpuidle: dt: bail out if the idle-state DT node is not compatible 2019-02-01 12:58:58 +01:00
dt_idle_states.h
governor.c cpuidle: governor: Add new governors to cpuidle_governors again 2019-03-12 23:46:55 +01:00
poll_state.c cpuidle: poll_state: Fix default time limit 2019-01-30 22:57:42 +01:00
sysfs.c cpuidle: Add 'above' and 'below' idle state metrics 2018-12-12 23:22:18 +01:00