[PATCH 1/1] omap: dmtimers: Fix locking issue in omap_dm_timer_request*()

2012-08-12 Thread Timo Kokkonen
Calling omap_dm_timer_prepare while the spinlock is held is not
allowed as sleeping functions are called later on during the
preparation (namely within clk_get()).

dm_timer_lock is only required for protecting the
omap_timer_list. After the timer is marked as reserved, the lock is no
longer needed and should be freed.

Signed-off-by: Timo Kokkonen 
Cc: Tony Lindgren 
Cc: Tarun Kanti DebBarma 
---
 arch/arm/plat-omap/dmtimer.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 626ad8c..1f66cac 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -189,6 +189,7 @@ struct omap_dm_timer *omap_dm_timer_request(void)
timer->reserved = 1;
break;
}
+   spin_unlock_irqrestore(&dm_timer_lock, flags);
 
if (timer) {
ret = omap_dm_timer_prepare(timer);
@@ -197,7 +198,6 @@ struct omap_dm_timer *omap_dm_timer_request(void)
timer = NULL;
}
}
-   spin_unlock_irqrestore(&dm_timer_lock, flags);
 
if (!timer)
pr_debug("%s: timer request failed!\n", __func__);
@@ -220,6 +220,7 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)
break;
}
}
+   spin_unlock_irqrestore(&dm_timer_lock, flags);
 
if (timer) {
ret = omap_dm_timer_prepare(timer);
@@ -228,7 +229,6 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)
timer = NULL;
}
}
-   spin_unlock_irqrestore(&dm_timer_lock, flags);
 
if (!timer)
pr_debug("%s: timer%d request failed!\n", __func__, id);
-- 
1.7.8.6

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/1] omap: dmtimers: Fix locking issue in omap_dm_timer_request*()

2012-08-13 Thread Tony Lindgren
* Timo Kokkonen  [120812 03:46]:
> Calling omap_dm_timer_prepare while the spinlock is held is not
> allowed as sleeping functions are called later on during the
> preparation (namely within clk_get()).
> 
> dm_timer_lock is only required for protecting the
> omap_timer_list. After the timer is marked as reserved, the lock is no
> longer needed and should be freed.

Thanks applying into fixes.

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html