linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@deeprootsystems.com>
To: linux-omap@vger.kernel.org
Cc: paul@pwsan.com
Subject: [PATCH 06/13] OMAP: hwmod: add non-locking versions of enable and idle functions
Date: Wed, 23 Jun 2010 16:42:36 -0700	[thread overview]
Message-ID: <1277336563-24988-7-git-send-email-khilman@deeprootsystems.com> (raw)
In-Reply-To: <1277336563-24988-1-git-send-email-khilman@deeprootsystems.com>

Some hwmods may need to be idled/enabled in atomic context, so
non-locking versions of these functions are required.

Most users should not need these and usage of theses should be
controlled to understand why access is being done in atomic context.
For this reason, the non-locking functions are only exposed at the
hwmod level and not at the omap-device level.

The use-case that led to the need for the non-locking versions is
hwmods that are enabled/idled from within the core idle/suspend path.
Since interrupts are already disabled here, the mutex-based locking in
hwmod can sleep and will cause potential deadlocks.

Cc: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/omap_hwmod.c             |   32 ++++++++++++++++++++++---
 arch/arm/plat-omap/include/plat/omap_hwmod.h |    2 +
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index 3d11523..8b2b44a 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -1287,6 +1287,18 @@ int omap_hwmod_unregister(struct omap_hwmod *oh)
 }
 
 /**
+ * __omap_hwmod_enable - enable an omap_hwmod (non-locking version)
+ * @oh: struct omap_hwmod *
+ *
+ * Enable an omap_hwomd @oh.  Intended to be called in rare cases
+ * where usage is required in atomic context.
+ */
+int __omap_hwmod_enable(struct omap_hwmod *oh)
+{
+	return _enable(oh);
+}
+
+/**
  * omap_hwmod_enable - enable an omap_hwmod
  * @oh: struct omap_hwmod *
  *
@@ -1301,12 +1313,26 @@ int omap_hwmod_enable(struct omap_hwmod *oh)
 		return -EINVAL;
 
 	mutex_lock(&omap_hwmod_mutex);
-	r = _enable(oh);
+	r = __omap_hwmod_enable(oh);
 	mutex_unlock(&omap_hwmod_mutex);
 
 	return r;
 }
 
+
+/**
+ * __omap_hwmod_idle - idle an omap_hwmod (non-locking)
+ * @oh: struct omap_hwmod *
+ *
+ * Idle an omap_hwomd @oh.  Intended to be called in rare instances where
+ * used in atomic context.
+ */
+int __omap_hwmod_idle(struct omap_hwmod *oh)
+{
+	_idle(oh);
+	return 0;
+}
+
 /**
  * omap_hwmod_idle - idle an omap_hwmod
  * @oh: struct omap_hwmod *
@@ -1319,9 +1345,7 @@ int omap_hwmod_idle(struct omap_hwmod *oh)
 	if (!oh)
 		return -EINVAL;
 
-	mutex_lock(&omap_hwmod_mutex);
-	_idle(oh);
-	mutex_unlock(&omap_hwmod_mutex);
+	__omap_hwmod_idle(oh);
 
 	return 0;
 }
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h
index 0eccc09..9a3f4dc 100644
--- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
+++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
@@ -486,7 +486,9 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh));
 int omap_hwmod_late_init(void);
 
 int omap_hwmod_enable(struct omap_hwmod *oh);
+int __omap_hwmod_enable(struct omap_hwmod *oh);
 int omap_hwmod_idle(struct omap_hwmod *oh);
+int __omap_hwmod_idle(struct omap_hwmod *oh);
 int omap_hwmod_shutdown(struct omap_hwmod *oh);
 
 int omap_hwmod_enable_clocks(struct omap_hwmod *oh);
-- 
1.7.0.2


  parent reply	other threads:[~2010-06-23 23:42 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-23 23:42 [PATCH 00/13] OMAP: CM, hwmod, omap_device fixes and updates Kevin Hilman
2010-06-23 23:42 ` [PATCH 01/13] OMAP24xx: CM: fix mask used for checking IDLEST status Kevin Hilman
2010-06-23 23:42 ` [PATCH 02/13] OMAP: hwmod: allow idle after HWMOD_INIT_NO_IDLE Kevin Hilman
2010-06-24  5:02   ` Paul Walmsley
2010-06-24 17:48     ` Kevin Hilman
2010-06-29 21:47       ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 03/13] OMAP2/3: hwmod: L3 and L4 CORE/PER/WKUP hwmods don't have IDLEST Kevin Hilman
2010-06-23 23:42 ` [PATCH 04/13] OMAP: hwmod: Fix the missing braces Kevin Hilman
2010-06-23 23:46   ` Gadiyar, Anand
2010-06-24  0:19     ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 05/13] OMAP2&3: hwmod: Remove _hwmod prefix in name string Kevin Hilman
2010-06-24  5:04   ` Paul Walmsley
2010-06-24 11:53     ` Cousson, Benoit
2010-07-02 11:47   ` Paul Walmsley
2010-06-23 23:42 ` Kevin Hilman [this message]
2010-06-24  5:08   ` [PATCH 06/13] OMAP: hwmod: add non-locking versions of enable and idle functions Paul Walmsley
2010-06-24 12:59     ` Basak, Partha
2010-06-24 17:55       ` Kevin Hilman
2010-06-24 17:55     ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 07/13] OMAP: hwmod: don't auto-disable hwmod when !CONFIG_PM_RUNTIME Kevin Hilman
2010-07-02 11:38   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 08/13] OMAP4: hwmod: Enable omap_device build for OMAP4 Kevin Hilman
2010-06-24  5:11   ` Paul Walmsley
2010-06-24 14:23     ` Nayak, Rajendra
2010-06-24 17:52       ` Kevin Hilman
2010-06-24 19:29         ` Nayak, Rajendra
2010-06-24 21:47           ` Kevin Hilman
2010-07-02 11:46   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 09/13] OMAP: omap_device: ensure hwmod tracks attached omap_device pointer Kevin Hilman
2010-07-02 11:40   ` Paul Walmsley
2010-06-23 23:42 ` [PATCH 10/13] OMAP: omap_device: add flag to disable automatic bus-level suspend/resume Kevin Hilman
2010-06-24  3:40   ` Paul Walmsley
2010-06-24 17:39     ` Kevin Hilman
2010-06-24 18:06       ` Paul Walmsley
2010-06-24 18:28         ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 11/13] OMAP: create omap_devices for MPU, DSP, L3 Kevin Hilman
2010-06-24  6:26   ` Paul Walmsley
2010-06-24  6:55     ` Paul Walmsley
2010-06-24 17:59       ` Kevin Hilman
2010-06-24  6:58     ` Shilimkar, Santosh
2010-06-24  7:19       ` Paul Walmsley
2010-06-24  7:27         ` Shilimkar, Santosh
2010-06-23 23:42 ` [PATCH 12/13] OMAP: hwmod data: add class for DSP hwmods Kevin Hilman
2010-06-24 18:44   ` Paul Walmsley
2010-06-24 20:35     ` Kevin Hilman
2010-06-24 21:26       ` Kevin Hilman
2010-06-24 21:34         ` Kevin Hilman
2010-06-23 23:42 ` [PATCH 13/13] OMAP3: hwmod data: add data for OMAP3 IVA2 Kevin Hilman
2010-06-24 20:43   ` Kevin Hilman
2010-06-24 21:36     ` Cousson, Benoit

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=1277336563-24988-7-git-send-email-khilman@deeprootsystems.com \
    --to=khilman@deeprootsystems.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=paul@pwsan.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).