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;