* [PATCH] regmap: Make regmap-mmio usable from atomic contexts
@ 2013-05-24 8:29 Lars-Peter Clausen
2013-05-24 15:40 ` Stephen Warren
2013-05-25 15:15 ` Mark Brown
0 siblings, 2 replies; 3+ messages in thread
From: Lars-Peter Clausen @ 2013-05-24 8:29 UTC (permalink / raw)
To: Mark Brown, Stephen Warren; +Cc: linux-kernel, Lars-Peter Clausen
regmap-mmio uses a spinlock with spin_lock() and spin_unlock() for locking.
To be able to use the regmap API from different contexts (atomic vs non-atomic),
without the risk of race conditions, we need to use spin_lock_irqsave() and
spin_lock_irqrestore() instead. A new field, the spinlock_flags field, is added
to regmap struct to store the flags between regmap_{,un}lock_spinlock(). The
spinlock_flags field itself is also protected by the spinlock.
Thanks to Stephen Warren for the suggestion of this particular solution.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
drivers/base/regmap/internal.h | 1 +
drivers/base/regmap/regmap.c | 7 +++++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index b33a4ff..ae23d83 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -52,6 +52,7 @@ struct regmap_async {
struct regmap {
struct mutex mutex;
spinlock_t spinlock;
+ unsigned long spinlock_flags;
regmap_lock lock;
regmap_unlock unlock;
void *lock_arg; /* This is passed to lock/unlock functions */
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 307f5a1..1a01553 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -302,13 +302,16 @@ static void regmap_unlock_mutex(void *__map)
static void regmap_lock_spinlock(void *__map)
{
struct regmap *map = __map;
- spin_lock(&map->spinlock);
+ unsigned long flags;
+
+ spin_lock_irqsave(&map->spinlock, flags);
+ map->spinlock_flags = flags;
}
static void regmap_unlock_spinlock(void *__map)
{
struct regmap *map = __map;
- spin_unlock(&map->spinlock);
+ spin_unlock_irqrestore(&map->spinlock, map->spinlock_flags);
}
static void dev_get_regmap_release(struct device *dev, void *res)
--
1.8.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] regmap: Make regmap-mmio usable from atomic contexts
2013-05-24 8:29 [PATCH] regmap: Make regmap-mmio usable from atomic contexts Lars-Peter Clausen
@ 2013-05-24 15:40 ` Stephen Warren
2013-05-25 15:15 ` Mark Brown
1 sibling, 0 replies; 3+ messages in thread
From: Stephen Warren @ 2013-05-24 15:40 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: Mark Brown, linux-kernel
On 05/24/2013 02:29 AM, Lars-Peter Clausen wrote:
> regmap-mmio uses a spinlock with spin_lock() and spin_unlock() for locking.
> To be able to use the regmap API from different contexts (atomic vs non-atomic),
> without the risk of race conditions, we need to use spin_lock_irqsave() and
> spin_lock_irqrestore() instead. A new field, the spinlock_flags field, is added
> to regmap struct to store the flags between regmap_{,un}lock_spinlock(). The
> spinlock_flags field itself is also protected by the spinlock.
Reviewed-by: Stephen Warren <swarren@nvidia.com>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] regmap: Make regmap-mmio usable from atomic contexts
2013-05-24 8:29 [PATCH] regmap: Make regmap-mmio usable from atomic contexts Lars-Peter Clausen
2013-05-24 15:40 ` Stephen Warren
@ 2013-05-25 15:15 ` Mark Brown
1 sibling, 0 replies; 3+ messages in thread
From: Mark Brown @ 2013-05-25 15:15 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: Stephen Warren, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 164 bytes --]
On Fri, May 24, 2013 at 10:29:22AM +0200, Lars-Peter Clausen wrote:
> regmap-mmio uses a spinlock with spin_lock() and spin_unlock() for locking.
Applied, thanks.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-05-25 15:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-24 8:29 [PATCH] regmap: Make regmap-mmio usable from atomic contexts Lars-Peter Clausen
2013-05-24 15:40 ` Stephen Warren
2013-05-25 15:15 ` Mark Brown
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.