diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2014-01-27 01:08:19 -0500 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2014-02-06 11:15:15 +0000 |
commit | 72563868dd78e8976d6d885624da9bce968c227c (patch) | |
tree | 1e1f37a2eedfda31cbacf3d49d03dc1e99491366 | |
parent | f97a73d66f693e6e3ac927446b047081903565b0 (diff) |
idle: move the cpuidle entry point to the generic idle loop
In order to integrate cpuidle with the scheduler, we must have a better
proximity in the core code with what cpuidle is doing and not delegate
such interaction to arch code.
Architectures implementing arch_cpu_idle() should simply enter
a cheap idle mode in the absence of a proper cpuidle driver.
Signed-off-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r-- | kernel/cpu/idle.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/cpu/idle.c b/kernel/cpu/idle.c index 68e10f21446a..65d0427ec8b4 100644 --- a/kernel/cpu/idle.c +++ b/kernel/cpu/idle.c @@ -3,6 +3,7 @@ */ #include <linux/sched.h> #include <linux/cpu.h> +#include <linux/cpuidle.h> #include <linux/tick.h> #include <linux/mm.h> #include <linux/stackprotector.h> @@ -94,7 +95,8 @@ static void cpu_idle_loop(void) if (!current_clr_polling_and_test()) { stop_critical_timings(); rcu_idle_enter(); - arch_cpu_idle(); + if (cpuidle_idle_call()) + arch_cpu_idle(); WARN_ON_ONCE(irqs_disabled()); rcu_idle_exit(); start_critical_timings(); |