rtc: alarm: Proper handling of spinlock

In alarm_shutdown hook, taking interruptible mutex
lock in interrupt disabled context. This patch fixes
alarm_shutdown function to call rtc_read_time and
rtc_set_alarm APIs in interrupt enabled context.

Change-Id: I9392d8908c19365993dccc22504f4b6f83ae8f72
CRs-Fixed: 619657
Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
This commit is contained in:
Mohit Aggarwal
2014-03-05 18:30:47 +05:30
parent 4fd8be7e17
commit 6a5881bcb1
+4 -3
View File
@@ -520,8 +520,11 @@ static void alarm_shutdown(struct platform_device *dev)
spin_lock_irqsave(&alarm_slock, flags);
if (!power_on_alarm)
if (!power_on_alarm) {
spin_unlock_irqrestore(&alarm_slock, flags);
goto disable_alarm;
}
spin_unlock_irqrestore(&alarm_slock, flags);
rtc_read_time(alarm_rtc_dev, &rtc_time);
getnstimeofday(&wall_time);
@@ -549,11 +552,9 @@ static void alarm_shutdown(struct platform_device *dev)
pr_alarm(FLOW, "Power-on alarm set to %lu\n",
alarm_time);
spin_unlock_irqrestore(&alarm_slock, flags);
return;
disable_alarm:
spin_unlock_irqrestore(&alarm_slock, flags);
rtc_alarm_irq_enable(alarm_rtc_dev, 0);
}