From patchwork Thu Aug 27 11:53:54 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arun Bharadwaj X-Patchwork-Id: 32245 Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 88D0BB7B73 for ; Thu, 27 Aug 2009 21:54:32 +1000 (EST) Received: by ozlabs.org (Postfix) id 82B66DDD0C; Thu, 27 Aug 2009 21:54:32 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from bilbo.ozlabs.org (bilbo.ozlabs.org [203.10.76.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "bilbo.ozlabs.org", Issuer "CAcert Class 3 Root" (verified OK)) by ozlabs.org (Postfix) with ESMTPS id 7FCD5DDD0B for ; Thu, 27 Aug 2009 21:54:32 +1000 (EST) Received: from bilbo.ozlabs.org (localhost [127.0.0.1]) by bilbo.ozlabs.org (Postfix) with ESMTP id 10B32B812F for ; Thu, 27 Aug 2009 21:54:15 +1000 (EST) Received: from e23smtp01.au.ibm.com (e23smtp01.au.ibm.com [202.81.31.143]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "e23smtp01.au.ibm.com", Issuer "Equifax" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id B982FB7BB1 for ; Thu, 27 Aug 2009 21:54:06 +1000 (EST) Received: from d23relay03.au.ibm.com (d23relay03.au.ibm.com [202.81.31.245]) by e23smtp01.au.ibm.com (8.14.3/8.13.1) with ESMTP id n7RBqqux011168 for ; Thu, 27 Aug 2009 21:52:52 +1000 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id n7RBs4AY1335342 for ; Thu, 27 Aug 2009 21:54:04 +1000 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id n7RBs3L5032611 for ; Thu, 27 Aug 2009 21:54:04 +1000 Received: from linux.vnet.ibm.com ([9.124.35.32]) by d23av01.au.ibm.com (8.14.3/8.13.1/NCO v10.0 AVin) with ESMTP id n7RBrtL7032558 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 27 Aug 2009 21:53:58 +1000 Date: Thu, 27 Aug 2009 17:23:54 +0530 From: Arun R Bharadwaj To: Joel Schopp , Benjamin Herrenschmidt , Paul Mackerras , Peter Zijlstra , Ingo Molnar , Vaidyanathan Srinivasan , Dipankar Sarma , Balbir Singh , Gautham R Shenoy , "Pallipadi, Venkatesh" , Arun Bharadwaj Subject: [PATCH 2/4]: CPUIDLE: Introduce architecture independent cpuidle_pm_idle in drivers/cpuidle/cpuidle.c Message-ID: <20090827115354.GC24986@linux.vnet.ibm.com> References: <20090827114908.GA24986@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20090827114908.GA24986@linux.vnet.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: arun@linux.vnet.ibm.com List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org * Arun R Bharadwaj [2009-08-27 17:19:08]: Cpuidle infrastructure assumes pm_idle as the default idle routine. But, ppc_md.power_save is the default idle callback in case of pSeries. So, create a more generic, architecture independent cpuidle_pm_idle function pointer in driver/cpuidle/cpuidle.c and allow the idle routines of architectures to be set to cpuidle_pm_idle. Signed-off-by: Arun R Bharadwaj --- drivers/cpuidle/cpuidle.c | 12 +++++++----- include/linux/cpuidle.h | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) Index: linux.trees.git/drivers/cpuidle/cpuidle.c =================================================================== --- linux.trees.git.orig/drivers/cpuidle/cpuidle.c +++ linux.trees.git/drivers/cpuidle/cpuidle.c @@ -25,6 +25,7 @@ DEFINE_PER_CPU(struct cpuidle_device *, DEFINE_MUTEX(cpuidle_lock); LIST_HEAD(cpuidle_detected_devices); static void (*pm_idle_old)(void); +void (*cpuidle_pm_idle)(void); static int enabled_devices; @@ -98,10 +99,10 @@ static void cpuidle_idle_call(void) */ void cpuidle_install_idle_handler(void) { - if (enabled_devices && (pm_idle != cpuidle_idle_call)) { + if (enabled_devices && (cpuidle_pm_idle != cpuidle_idle_call)) { /* Make sure all changes finished before we switch to new idle */ smp_wmb(); - pm_idle = cpuidle_idle_call; + cpuidle_pm_idle = cpuidle_idle_call; } } @@ -110,8 +111,9 @@ void cpuidle_install_idle_handler(void) */ void cpuidle_uninstall_idle_handler(void) { - if (enabled_devices && pm_idle_old && (pm_idle != pm_idle_old)) { - pm_idle = pm_idle_old; + if (enabled_devices && pm_idle_old && + (cpuidle_pm_idle != pm_idle_old)) { + cpuidle_pm_idle = pm_idle_old; cpuidle_kick_cpus(); } } @@ -382,7 +384,7 @@ static int __init cpuidle_init(void) { int ret; - pm_idle_old = pm_idle; + pm_idle_old = cpuidle_pm_idle; ret = cpuidle_add_class_sysfs(&cpu_sysdev_class); if (ret) Index: linux.trees.git/include/linux/cpuidle.h =================================================================== --- linux.trees.git.orig/include/linux/cpuidle.h +++ linux.trees.git/include/linux/cpuidle.h @@ -188,4 +188,11 @@ static inline void cpuidle_unregister_go #define CPUIDLE_DRIVER_STATE_START 0 #endif +/* + * Idle callback used by cpuidle to call the cpuidle_idle_call(). + * Platform drivers can use this to register to cpuidle's idle loop. + */ + +extern void (*cpuidle_pm_idle)(void); + #endif /* _LINUX_CPUIDLE_H */