From: Kevin Hilman <khilman@deeprootsystems.com>
To: linux-omap@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 0/5] OMAP PM fixes for 2.6.32
Date: Mon, 05 Oct 2009 10:57:10 -0700 [thread overview]
Message-ID: <877hv9yb9l.fsf@deeprootsystems.com> (raw)
In-Reply-To: <1254507295-11381-1-git-send-email-khilman@deeprootsystems.com> (Kevin Hilman's message of "Fri\, 2 Oct 2009 11\:14\:50 -0700")
Kevin Hilman <khilman@deeprootsystems.com> writes:
> These fixes are primarily for PRCM interrupt handler bugs
> and GPIO wakeup support.
>
> Jon Hunter (1):
> OMAP3: PM: Prevent hang in prcm_interrupt_handler
>
> Kevin Hilman (1):
> OMAP3: PM: Enable GPIO module-level wakeups
>
> Paul Walmsley (2):
> OMAP3: PM: PRCM interrupt: check MPUGRPSEL register
> OMAP3: PM: PRCM interrupt: only handle selected PRCM interrupts
>
> Vikram Pandita (1):
> OMAP3: PM: USBHOST: clear wakeup events on both hosts
>
Here's one more for the PM fixes queue from Atrem.
Kevin
>From ee894b18e064447f86019af38a90ccb091880942 Mon Sep 17 00:00:00 2001
From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Date: Thu, 1 Oct 2009 10:01:55 +0300
Subject: [PATCH 6/6] OMAP3: PM: introduce a new powerdomain walk helper
The 'pwrdm_for_each()' function walks powerdomains with a spinlock
locked, so the the callbacks cannot do anything which may sleep.
This patch introduces a 'pwrdm_for_each_nolock()' helper which does
the same, but without the spinlock locked. This fixes the following
lockdep warning:
[ 0.000000] WARNING: at kernel/lockdep.c:2460 lockdep_trace_alloc+0xac/0xec()
[ 0.000000] Modules linked in:
(unwind_backtrace+0x0/0xdc) from [<c0045464>] (warn_slowpath_common+0x48/0x60)
(warn_slowpath_common+0x48/0x60) from [<c0067dd4>] (lockdep_trace_alloc+0xac/0xec)
(lockdep_trace_alloc+0xac/0xec) from [<c009da14>] (kmem_cache_alloc+0x1c/0xd0)
(kmem_cache_alloc+0x1c/0xd0) from [<c00b21d8>] (d_alloc+0x1c/0x1a4)
(d_alloc+0x1c/0x1a4) from [<c00a887c>] (__lookup_hash+0xd8/0x118)
(__lookup_hash+0xd8/0x118) from [<c00a9f20>] (lookup_one_len+0x84/0x94)
(lookup_one_len+0x84/0x94) from [<c010d12c>] (debugfs_create_file+0x8c/0x20c)
(debugfs_create_file+0x8c/0x20c) from [<c010d320>] (debugfs_create_dir+0x1c/0x20)
(debugfs_create_dir+0x1c/0x20) from [<c000e8cc>] (pwrdms_setup+0x60/0x90)
(pwrdms_setup+0x60/0x90) from [<c002e010>] (pwrdm_for_each+0x30/0x80)
(pwrdm_for_each+0x30/0x80) from [<c000e79c>] (pm_dbg_init+0x7c/0x14c)
(pm_dbg_init+0x7c/0x14c) from [<c00232b4>] (do_one_initcall+0x5c/0x1b8)
(do_one_initcall+0x5c/0x1b8) from [<c00083f8>] (kernel_init+0x90/0x10c)
(kernel_init+0x90/0x10c) from [<c00242c4>] (kernel_thread_exit+0x0/0x8)
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
arch/arm/mach-omap2/pm-debug.c | 4 +-
arch/arm/mach-omap2/powerdomain.c | 39 +++++++++++++++++-------
arch/arm/plat-omap/include/mach/powerdomain.h | 2 +
3 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c
index 1b4c160..2fc4d6a 100644
--- a/arch/arm/mach-omap2/pm-debug.c
+++ b/arch/arm/mach-omap2/pm-debug.c
@@ -541,7 +541,7 @@ static int __init pm_dbg_init(void)
printk(KERN_ERR "%s: only OMAP3 supported\n", __func__);
return -ENODEV;
}
-
+
d = debugfs_create_dir("pm_debug", NULL);
if (IS_ERR(d))
return PTR_ERR(d);
@@ -551,7 +551,7 @@ static int __init pm_dbg_init(void)
(void) debugfs_create_file("time", S_IRUGO,
d, (void *)DEBUG_FILE_TIMERS, &debug_fops);
- pwrdm_for_each(pwrdms_setup, (void *)d);
+ pwrdm_for_each_nolock(pwrdms_setup, (void *)d);
pm_dbg_dir = debugfs_create_dir("registers", d);
if (IS_ERR(pm_dbg_dir))
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index 2594cbf..f00289a 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -273,35 +273,50 @@ struct powerdomain *pwrdm_lookup(const char *name)
}
/**
- * pwrdm_for_each - call function on each registered clockdomain
+ * pwrdm_for_each_nolock - call function on each registered clockdomain
* @fn: callback function *
*
* Call the supplied function for each registered powerdomain. The
* callback function can return anything but 0 to bail out early from
- * the iterator. The callback function is called with the pwrdm_rwlock
- * held for reading, so no powerdomain structure manipulation
- * functions should be called from the callback, although hardware
- * powerdomain control functions are fine. Returns the last return
- * value of the callback function, which should be 0 for success or
- * anything else to indicate failure; or -EINVAL if the function
- * pointer is null.
+ * the iterator. Returns the last return value of the callback function, which
+ * should be 0 for success or anything else to indicate failure; or -EINVAL if
+ * the function pointer is null.
*/
-int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user),
- void *user)
+int pwrdm_for_each_nolock(int (*fn)(struct powerdomain *pwrdm, void *user),
+ void *user)
{
struct powerdomain *temp_pwrdm;
- unsigned long flags;
int ret = 0;
if (!fn)
return -EINVAL;
- read_lock_irqsave(&pwrdm_rwlock, flags);
list_for_each_entry(temp_pwrdm, &pwrdm_list, node) {
ret = (*fn)(temp_pwrdm, user);
if (ret)
break;
}
+
+ return ret;
+}
+
+/**
+ * pwrdm_for_each - call function on each registered clockdomain
+ * @fn: callback function *
+ *
+ * This function is the same as 'pwrdm_for_each_nolock()', but keeps the
+ * &pwrdm_rwlock locked for reading, so no powerdomain structure manipulation
+ * functions should be called from the callback, although hardware powerdomain
+ * control functions are fine.
+ */
+int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user),
+ void *user)
+{
+ unsigned long flags;
+ int ret;
+
+ read_lock_irqsave(&pwrdm_rwlock, flags);
+ ret = pwrdm_for_each_nolock(fn, user);
read_unlock_irqrestore(&pwrdm_rwlock, flags);
return ret;
diff --git a/arch/arm/plat-omap/include/mach/powerdomain.h b/arch/arm/plat-omap/include/mach/powerdomain.h
index 6271d85..fa64614 100644
--- a/arch/arm/plat-omap/include/mach/powerdomain.h
+++ b/arch/arm/plat-omap/include/mach/powerdomain.h
@@ -135,6 +135,8 @@ struct powerdomain *pwrdm_lookup(const char *name);
int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user),
void *user);
+int pwrdm_for_each_nolock(int (*fn)(struct powerdomain *pwrdm, void *user),
+ void *user);
int pwrdm_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
--
1.6.4.3
WARNING: multiple messages have this Message-ID (diff)
From: khilman@deeprootsystems.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/5] OMAP PM fixes for 2.6.32
Date: Mon, 05 Oct 2009 10:57:10 -0700 [thread overview]
Message-ID: <877hv9yb9l.fsf@deeprootsystems.com> (raw)
In-Reply-To: <1254507295-11381-1-git-send-email-khilman@deeprootsystems.com> (Kevin Hilman's message of "Fri\, 2 Oct 2009 11\:14\:50 -0700")
Kevin Hilman <khilman@deeprootsystems.com> writes:
> These fixes are primarily for PRCM interrupt handler bugs
> and GPIO wakeup support.
>
> Jon Hunter (1):
> OMAP3: PM: Prevent hang in prcm_interrupt_handler
>
> Kevin Hilman (1):
> OMAP3: PM: Enable GPIO module-level wakeups
>
> Paul Walmsley (2):
> OMAP3: PM: PRCM interrupt: check MPUGRPSEL register
> OMAP3: PM: PRCM interrupt: only handle selected PRCM interrupts
>
> Vikram Pandita (1):
> OMAP3: PM: USBHOST: clear wakeup events on both hosts
>
Here's one more for the PM fixes queue from Atrem.
Kevin
next prev parent reply other threads:[~2009-10-05 17:57 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-02 18:14 [PATCH 0/5] OMAP PM fixes for 2.6.32 Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-02 18:14 ` [PATCH 1/5] OMAP3: PM: Prevent hang in prcm_interrupt_handler Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-02 18:14 ` [PATCH 2/5] OMAP3: PM: PRCM interrupt: check MPUGRPSEL register Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-02 18:14 ` [PATCH 3/5] OMAP3: PM: PRCM interrupt: only handle selected PRCM interrupts Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-02 18:14 ` [PATCH 4/5] OMAP3: PM: USBHOST: clear wakeup events on both hosts Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-02 18:14 ` [PATCH 5/5] OMAP3: PM: Enable GPIO module-level wakeups Kevin Hilman
2009-10-02 18:14 ` Kevin Hilman
2009-10-05 17:57 ` Kevin Hilman [this message]
2009-10-05 17:57 ` [PATCH 0/5] OMAP PM fixes for 2.6.32 Kevin Hilman
2009-10-05 18:02 ` Kevin Hilman
2009-10-05 18:02 ` Kevin Hilman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877hv9yb9l.fsf@deeprootsystems.com \
--to=khilman@deeprootsystems.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.