Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> writes: > On Mon, May 18, 2009 at 10:00:44AM -0700, Kevin Hilman wrote: >> Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> writes: >> >> > On Fri, May 15, 2009 at 11:40:41AM -0700, Kevin Hilman wrote: >> >> This patch is to sync the core linux-omap PM code with mainline. This >> >> code has evolved and been used for a while the linux-omap tree, but >> >> the attempt here is to finally get this into mainline. >> >> >> >> Following this will be a series of patches from the 'PM branch' of the >> >> linux-omap tree to add full PM hardware support from the linux-omap >> >> tree. >> >> >> >> Much of this PM core code was written by Jouni Hogander with >> >> significant contributions from Paul Walmsley as well as many others >> >> from Nokia, Texas Instruments and linux-omap community. >> > >> > Overall comment, I think we need to rework the idle support code so >> > that enable_hlt/disable_hlt can be used even when pm_idle has been >> > overridden, rather than OMAP going off and inventing its own mechanisms. >> >> Would adding: >> >> if (hlt_counter) >> cpu_relax(); >> >> to the beginning of omap*_pm_idle functions be sufficient? That will >> at least allow the hlt stuff to behave as expected. > > Yes, but the comment was also directed at the other functions which > increment/decrement that atomic_t variable to enable/disable sleep mode. > Russell, Do you have a preference in how to export the hlt_counter to platform-specific code? The patch below creates a can_hlt() function that can be called from platform-specific idle code. Kevin >From 23c802a0a1e9bb24ca51af9cf18b972590f8d1dc Mon Sep 17 00:00:00 2001 From: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> Date: Tue, 19 May 2009 11:34:12 -0700 Subject: [PATCH] ARM: add can_hlt() for platform PM code to check before idling When platform-specific code overrides pm_idle, the hlt_counter is no longer used. Create a can_hlt() check which returns the hlt_counter so platform code can check it and thus honor the requests of enable_hlt()/disable_hlt() users. Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> --- arch/arm/include/asm/system.h | 1 + arch/arm/kernel/process.c | 7 +++++++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index bd4dc8e..ff9e2dd 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -313,6 +313,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size extern void disable_hlt(void); extern void enable_hlt(void); +extern int can_hlt(void); #include <asm-generic/cmpxchg-local.h> diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index c3265a2..1b414b8 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -68,6 +68,13 @@ void enable_hlt(void) EXPORT_SYMBOL(enable_hlt); +int can_hlt(void) +{ + return !hlt_counter; +} + +EXPORT_SYMBOL(can_hlt); + static int __init nohlt_setup(char *__unused) { hlt_counter = 1; -- 1.6.2.2 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html