Since the spinlock is not used in any interrupt context we can replace it with mutex instead. Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@xxxxxx> --- arch/arm/plat-omap/dmtimer.c | 27 +++++++++++---------------- 1 files changed, 11 insertions(+), 16 deletions(-) diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index b61edc2..0716fdb 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c @@ -44,7 +44,7 @@ #include <plat/dmtimer.h> static LIST_HEAD(omap_timer_list); -static DEFINE_SPINLOCK(dm_timer_lock); +static DEFINE_MUTEX(dm_timer_mutex); /** * omap_dm_timer_read_reg - read timer registers in posted and non-posted mode @@ -157,9 +157,8 @@ void omap_dm_timer_prepare(struct omap_dm_timer *timer) struct omap_dm_timer *omap_dm_timer_request(void) { struct omap_dm_timer *timer = NULL, *t; - unsigned long flags; - spin_lock_irqsave(&dm_timer_lock, flags); + mutex_lock(&dm_timer_mutex); list_for_each_entry(t, &omap_timer_list, node) { if (t->reserved) continue; @@ -168,7 +167,7 @@ struct omap_dm_timer *omap_dm_timer_request(void) timer->reserved = 1; break; } - spin_unlock_irqrestore(&dm_timer_lock, flags); + mutex_unlock(&dm_timer_mutex); if (timer) omap_dm_timer_prepare(timer); @@ -182,9 +181,8 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_request); struct omap_dm_timer *omap_dm_timer_request_specific(int id) { struct omap_dm_timer *timer = NULL, *t; - unsigned long flags; - spin_lock_irqsave(&dm_timer_lock, flags); + mutex_lock(&dm_timer_mutex); list_for_each_entry(t, &omap_timer_list, node) { if (t->pdev->id == id && !t->reserved) { timer = t; @@ -192,7 +190,7 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id) break; } } - spin_unlock_irqrestore(&dm_timer_lock, flags); + mutex_unlock(&dm_timer_mutex); if (timer) omap_dm_timer_prepare(timer); @@ -252,14 +250,13 @@ __u32 omap_dm_timer_modify_idlect_mask(__u32 inputmask) { int i = 0; struct omap_dm_timer *timer = NULL; - unsigned long flags; /* If ARMXOR cannot be idled this function call is unnecessary */ if (!(inputmask & (1 << 1))) return inputmask; /* If any active timer is using ARMXOR return modified mask */ - spin_lock_irqsave(&dm_timer_lock, flags); + mutex_lock(&dm_timer_mutex); list_for_each_entry(timer, &omap_timer_list, node) { u32 l; @@ -273,7 +270,7 @@ __u32 omap_dm_timer_modify_idlect_mask(__u32 inputmask) } i++; } - spin_unlock_irqrestore(&dm_timer_lock, flags); + mutex_unlock(&dm_timer_mutex); return inputmask; } @@ -500,7 +497,6 @@ EXPORT_SYMBOL_GPL(omap_dm_timers_active); static int __devinit omap_dm_timer_probe(struct platform_device *pdev) { int ret; - unsigned long flags; struct omap_dm_timer *timer; struct resource *mem, *irq, *ioarea; struct dmtimer_platform_data *pdata = pdev->dev.platform_data; @@ -565,9 +561,9 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev) pm_runtime_enable(&pdev->dev); /* add the timer element to the list */ - spin_lock_irqsave(&dm_timer_lock, flags); + mutex_lock(&dm_timer_mutex); list_add_tail(&timer->node, &omap_timer_list); - spin_unlock_irqrestore(&dm_timer_lock, flags); + mutex_unlock(&dm_timer_mutex); dev_dbg(&pdev->dev, "Device Probed.\n"); @@ -597,10 +593,9 @@ err_free_pdev: static int __devexit omap_dm_timer_remove(struct platform_device *pdev) { struct omap_dm_timer *timer, *tmp; - unsigned long flags; int ret = -EINVAL; - spin_lock_irqsave(&dm_timer_lock, flags); + mutex_lock(&dm_timer_mutex); list_for_each_entry_safe(timer, tmp, &omap_timer_list, node) { if (timer->pdev->id == pdev->id) { kfree(timer->pdev->dev.platform_data); @@ -611,7 +606,7 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev) break; } } - spin_unlock_irqrestore(&dm_timer_lock, flags); + mutex_unlock(&dm_timer_mutex); return ret; } -- 1.6.0.4 -- 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