diff options
| author | Len Brown <len.brown@intel.com> | 2011-04-01 19:34:59 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2011-08-03 19:06:37 -0400 |
| commit | a0bfa1373859e9d11dc92561a8667588803e42d8 (patch) | |
| tree | ef5768a313ac16a211830efc3edb9ca95487cb6a /arch | |
| parent | 4bfc8288bc4a64529c5547d17349a2a1f4675507 (diff) | |
cpuidle: stop depending on pm_idle
cpuidle users should call cpuidle_call_idle() directly
rather than via (pm_idle)() function pointer.
Architecture may choose to continue using (pm_idle)(),
but cpuidle need not depend on it:
my_arch_cpu_idle()
...
if(cpuidle_call_idle())
pm_idle();
cc: Kevin Hilman <khilman@deeprootsystems.com>
cc: Paul Mundt <lethal@linux-sh.org>
cc: x86@kernel.org
Acked-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/arm/kernel/process.c | 4 | ||||
| -rw-r--r-- | arch/sh/kernel/idle.c | 6 | ||||
| -rw-r--r-- | arch/x86/kernel/process_32.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/process_64.c | 4 |
4 files changed, 13 insertions, 5 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 5e1e54197227..d7ee0d4c072d 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/random.h> | 31 | #include <linux/random.h> |
| 32 | #include <linux/hw_breakpoint.h> | 32 | #include <linux/hw_breakpoint.h> |
| 33 | #include <linux/cpuidle.h> | ||
| 33 | 34 | ||
| 34 | #include <asm/cacheflush.h> | 35 | #include <asm/cacheflush.h> |
| 35 | #include <asm/leds.h> | 36 | #include <asm/leds.h> |
| @@ -196,7 +197,8 @@ void cpu_idle(void) | |||
| 196 | cpu_relax(); | 197 | cpu_relax(); |
| 197 | } else { | 198 | } else { |
| 198 | stop_critical_timings(); | 199 | stop_critical_timings(); |
| 199 | pm_idle(); | 200 | if (cpuidle_call_idle()) |
| 201 | pm_idle(); | ||
| 200 | start_critical_timings(); | 202 | start_critical_timings(); |
| 201 | /* | 203 | /* |
| 202 | * This will eventually be removed - pm_idle | 204 | * This will eventually be removed - pm_idle |
diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c index 425d604e3a28..9c7099ebfe14 100644 --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c | |||
| @@ -16,12 +16,13 @@ | |||
| 16 | #include <linux/thread_info.h> | 16 | #include <linux/thread_info.h> |
| 17 | #include <linux/irqflags.h> | 17 | #include <linux/irqflags.h> |
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/cpuidle.h> | ||
| 19 | #include <asm/pgalloc.h> | 20 | #include <asm/pgalloc.h> |
| 20 | #include <asm/system.h> | 21 | #include <asm/system.h> |
| 21 | #include <asm/atomic.h> | 22 | #include <asm/atomic.h> |
| 22 | #include <asm/smp.h> | 23 | #include <asm/smp.h> |
| 23 | 24 | ||
| 24 | void (*pm_idle)(void) = NULL; | 25 | static void (*pm_idle)(void); |
| 25 | 26 | ||
| 26 | static int hlt_counter; | 27 | static int hlt_counter; |
| 27 | 28 | ||
| @@ -100,7 +101,8 @@ void cpu_idle(void) | |||
| 100 | local_irq_disable(); | 101 | local_irq_disable(); |
| 101 | /* Don't trace irqs off for idle */ | 102 | /* Don't trace irqs off for idle */ |
| 102 | stop_critical_timings(); | 103 | stop_critical_timings(); |
| 103 | pm_idle(); | 104 | if (cpuidle_call_idle()) |
| 105 | pm_idle(); | ||
| 104 | /* | 106 | /* |
| 105 | * Sanity check to ensure that pm_idle() returns | 107 | * Sanity check to ensure that pm_idle() returns |
| 106 | * with IRQs enabled | 108 | * with IRQs enabled |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index a3d0dc59067b..7a3b65107a27 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <linux/uaccess.h> | 38 | #include <linux/uaccess.h> |
| 39 | #include <linux/io.h> | 39 | #include <linux/io.h> |
| 40 | #include <linux/kdebug.h> | 40 | #include <linux/kdebug.h> |
| 41 | #include <linux/cpuidle.h> | ||
| 41 | 42 | ||
| 42 | #include <asm/pgtable.h> | 43 | #include <asm/pgtable.h> |
| 43 | #include <asm/system.h> | 44 | #include <asm/system.h> |
| @@ -109,7 +110,8 @@ void cpu_idle(void) | |||
| 109 | local_irq_disable(); | 110 | local_irq_disable(); |
| 110 | /* Don't trace irqs off for idle */ | 111 | /* Don't trace irqs off for idle */ |
| 111 | stop_critical_timings(); | 112 | stop_critical_timings(); |
| 112 | pm_idle(); | 113 | if (cpuidle_idle_call()) |
| 114 | pm_idle(); | ||
| 113 | start_critical_timings(); | 115 | start_critical_timings(); |
| 114 | } | 116 | } |
| 115 | tick_nohz_restart_sched_tick(); | 117 | tick_nohz_restart_sched_tick(); |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index ca6f7ab8df33..f693e44e1bf6 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
| 38 | #include <linux/io.h> | 38 | #include <linux/io.h> |
| 39 | #include <linux/ftrace.h> | 39 | #include <linux/ftrace.h> |
| 40 | #include <linux/cpuidle.h> | ||
| 40 | 41 | ||
| 41 | #include <asm/pgtable.h> | 42 | #include <asm/pgtable.h> |
| 42 | #include <asm/system.h> | 43 | #include <asm/system.h> |
| @@ -136,7 +137,8 @@ void cpu_idle(void) | |||
| 136 | enter_idle(); | 137 | enter_idle(); |
| 137 | /* Don't trace irqs off for idle */ | 138 | /* Don't trace irqs off for idle */ |
| 138 | stop_critical_timings(); | 139 | stop_critical_timings(); |
| 139 | pm_idle(); | 140 | if (cpuidle_idle_call()) |
| 141 | pm_idle(); | ||
| 140 | start_critical_timings(); | 142 | start_critical_timings(); |
| 141 | 143 | ||
| 142 | /* In many cases the interrupt that ended idle | 144 | /* In many cases the interrupt that ended idle |
