ARM: enable CONFIG_CPU_IDLE support
authorGary King <gking@nvidia.com>
Wed, 24 Mar 2010 21:46:53 +0000 (14:46 -0700)
committerColin Cross <ccross@android.com>
Mon, 4 Oct 2010 06:08:57 +0000 (23:08 -0700)
add ARCH_HAS_CPU_IDLE_WAIT and ARCH_HAS_DEFAULT_IDLE configuration,
and expose default_idle and cpu_idle_wait

cpu_idle_wait implementation based on the implementation in the x86 tree

Signed-off-by: Gary King <gking@nvidia.com>
arch/arm/Kconfig
arch/arm/include/asm/system.h
arch/arm/kernel/process.c

index 0c33e5aa44cd41a5ddb1896255a5fa1e96f24fab..6d122de8869339f68976da7ff48083ffb7cf7e89 100644 (file)
@@ -132,6 +132,14 @@ config RWSEM_GENERIC_SPINLOCK
 config RWSEM_XCHGADD_ALGORITHM
        bool
 
+config ARCH_HAS_CPU_IDLE_WAIT
+       bool
+       default y
+
+config ARCH_HAS_DEFAULT_IDLE
+       bool
+       default y
+
 config ARCH_HAS_ILOG2_U32
        bool
 
index 8ba1ccf82a0200283367db344ed79259f8d57c05..549c9786e0f921d2cad7ced9c9228edb32a87ee2 100644 (file)
@@ -97,6 +97,8 @@ extern void __show_regs(struct pt_regs *);
 
 extern int cpu_architecture(void);
 extern void cpu_init(void);
+extern void cpu_idle_wait(void);
+extern void default_idle(void);
 
 void arm_machine_restart(char mode, const char *cmd);
 extern void (*arm_pm_restart)(char str, const char *cmd);
index 401e38be1f787c16e7b36d6429406a05229d83da..69141f0b8388c2e7f17c2463b223194f0b068dcb 100644 (file)
@@ -140,12 +140,13 @@ EXPORT_SYMBOL_GPL(arm_pm_restart);
  * This is our default idle handler.  We need to disable
  * interrupts here to ensure we don't miss a wakeup call.
  */
-static void default_idle(void)
+void default_idle(void)
 {
        if (!need_resched())
                arch_idle();
        local_irq_enable();
 }
+EXPORT_SYMBOL(default_idle);
 
 void (*pm_idle)(void) = default_idle;
 EXPORT_SYMBOL(pm_idle);
@@ -195,6 +196,19 @@ void cpu_idle(void)
        }
 }
 
+#if defined(CONFIG_ARCH_HAS_CPU_IDLE_WAIT)
+static void do_nothing(void *unused)
+{
+}
+
+void cpu_idle_wait(void)
+{
+       smp_mb();
+       smp_call_function(do_nothing, NULL, 1);
+}
+#endif
+
+
 static char reboot_mode = 'h';
 
 int __init reboot_setup(char *str)