msm: bam_dmux: fix scheduling while atomic warnings
Change-Id: I403f018782beeba9bca49b67e39ee5202bda8fef
Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
diff --git a/arch/arm/mach-msm/bam_dmux.c b/arch/arm/mach-msm/bam_dmux.c
index 304a687..59503e1 100644
--- a/arch/arm/mach-msm/bam_dmux.c
+++ b/arch/arm/mach-msm/bam_dmux.c
@@ -389,8 +389,11 @@
spin_unlock_irqrestore(&bam_ch[id].lock, flags);
read_lock(&ul_wakeup_lock);
- if (!bam_is_connected)
+ if (!bam_is_connected) {
+ read_unlock(&ul_wakeup_lock);
ul_wakeup();
+ read_lock(&ul_wakeup_lock);
+ }
/* if skb do not have any tailroom for padding,
copy the skb into a new expanded skb */
@@ -494,8 +497,11 @@
spin_unlock_irqrestore(&bam_ch[id].lock, flags);
read_lock(&ul_wakeup_lock);
- if (!bam_is_connected)
+ if (!bam_is_connected) {
+ read_unlock(&ul_wakeup_lock);
ul_wakeup();
+ read_lock(&ul_wakeup_lock);
+ }
hdr->magic_num = BAM_MUX_HDR_MAGIC_NO;
hdr->cmd = BAM_MUX_HDR_CMD_OPEN;
@@ -523,12 +529,15 @@
DBG("%s: closing ch %d\n", __func__, id);
if (!bam_mux_initialized)
return -ENODEV;
- spin_lock_irqsave(&bam_ch[id].lock, flags);
read_lock(&ul_wakeup_lock);
- if (!bam_is_connected)
+ if (!bam_is_connected) {
+ read_unlock(&ul_wakeup_lock);
ul_wakeup();
+ read_lock(&ul_wakeup_lock);
+ }
+ spin_lock_irqsave(&bam_ch[id].lock, flags);
bam_ch[id].notify = NULL;
bam_ch[id].priv = NULL;
bam_ch[id].status &= ~BAM_CH_LOCAL_OPEN;