Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756130AbZIVLan (ORCPT ); Tue, 22 Sep 2009 07:30:43 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756099AbZIVLal (ORCPT ); Tue, 22 Sep 2009 07:30:41 -0400 Received: from e28smtp01.in.ibm.com ([59.145.155.1]:60287 "EHLO e28smtp01.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756092AbZIVLaj (ORCPT ); Tue, 22 Sep 2009 07:30:39 -0400 Date: Tue, 22 Sep 2009 17:00:37 +0530 From: Arun R Bharadwaj To: Peter Zijlstra , Joel Schopp , Benjamin Herrenschmidt , Paul Mackerras , Ingo Molnar , Vaidyanathan Srinivasan , Dipankar Sarma , Balbir Singh , Gautham R Shenoy , Shaohua Li , Venkatesh Pallipadi , Arun Bharadwaj Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: [v6 PATCH 4/7]: POWER: enable cpuidle for POWER. Message-ID: <20090922113037.GE7788@linux.vnet.ibm.com> Reply-To: arun@linux.vnet.ibm.com References: <20090922112526.GA7788@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20090922112526.GA7788@linux.vnet.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2985 Lines: 97 * Arun R Bharadwaj [2009-09-22 16:55:27]: This patch enables the cpuidle option in Kconfig for pSeries. Currently cpuidle infrastructure is enabled only for x86 and ARM. This code is almost completely borrowed from x86 to enable cpuidle for pSeries. Signed-off-by: Arun R Bharadwaj --- arch/powerpc/Kconfig | 17 +++++++++++++++++ arch/powerpc/include/asm/system.h | 2 ++ arch/powerpc/kernel/idle.c | 19 +++++++++++++++++++ 3 files changed, 38 insertions(+) Index: linux.trees.git/arch/powerpc/Kconfig =================================================================== --- linux.trees.git.orig/arch/powerpc/Kconfig +++ linux.trees.git/arch/powerpc/Kconfig @@ -88,6 +88,9 @@ config ARCH_HAS_ILOG2_U64 bool default y if 64BIT +config ARCH_HAS_CPU_IDLE_WAIT + def_bool y + config GENERIC_HWEIGHT bool default y @@ -243,6 +246,20 @@ source "kernel/Kconfig.freezer" source "arch/powerpc/sysdev/Kconfig" source "arch/powerpc/platforms/Kconfig" +menu "Power management options" + +source "drivers/cpuidle/Kconfig" + +config PSERIES_PROCESSOR_IDLE + bool "Idle Power Management Support for pSeries" + depends on PPC_PSERIES && CPU_IDLE + default y + help + Idle Power Management Support for pSeries. This hooks onto cpuidle + infrastructure to help in idle cpu power management. + +endmenu + menu "Kernel options" config HIGHMEM Index: linux.trees.git/arch/powerpc/include/asm/system.h =================================================================== --- linux.trees.git.orig/arch/powerpc/include/asm/system.h +++ linux.trees.git/arch/powerpc/include/asm/system.h @@ -546,5 +546,7 @@ extern void account_system_vtime(struct extern struct dentry *powerpc_debugfs_root; +void cpu_idle_wait(void); + #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_SYSTEM_H */ Index: linux.trees.git/arch/powerpc/kernel/idle.c =================================================================== --- linux.trees.git.orig/arch/powerpc/kernel/idle.c +++ linux.trees.git/arch/powerpc/kernel/idle.c @@ -102,6 +102,25 @@ void cpu_idle(void) } } +static void do_nothing(void *unused) +{ +} + +/* + * cpu_idle_wait - Used to ensure that all the CPUs come out of the old + * idle loop and start using the new idle loop. + * Required while changing idle handler on SMP systems. + * Caller must have changed idle handler to the new value before the call. + */ +void cpu_idle_wait(void) +{ + /* Ensure that new value of ppc_md.power_save is set */ + smp_mb(); + /* kick all the CPUs so that they exit out of ppc_md.power_save */ + smp_call_function(do_nothing, NULL, 1); +} +EXPORT_SYMBOL_GPL(cpu_idle_wait); + int powersave_nap; #ifdef CONFIG_SYSCTL -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/