From: Gary King Date: Wed, 24 Mar 2010 21:46:53 +0000 (-0700) Subject: ARM: enable CONFIG_CPU_IDLE support X-Git-Tag: firefly_0821_release~9833^2~381 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1512cef47070413a175399c73c5f3636e4902162;p=firefly-linux-kernel-4.4.55.git ARM: enable CONFIG_CPU_IDLE support 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 --- diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0c33e5aa44cd..6d122de88693 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -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 diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 8ba1ccf82a02..549c9786e0f9 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -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); diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 401e38be1f78..69141f0b8388 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -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)