platform-drivers: msm: sps: use spin_lock_irqsave for SPS driver
Use spin_lock_irqsave to prevent the deadlock caused by SoftIRQ
Signed-off-by: Yan He <yanhe@codeaurora.org>
diff --git a/drivers/platform/msm/sps/sps.c b/drivers/platform/msm/sps/sps.c
index 7bf393a..15c8402 100644
--- a/drivers/platform/msm/sps/sps.c
+++ b/drivers/platform/msm/sps/sps.c
@@ -473,7 +473,7 @@
return NULL;
}
- spin_lock(&bam->connection_lock);
+ spin_lock_irqsave(&bam->connection_lock, bam->irqsave_flags);
/* Verify client owns this pipe */
pipe_index = pipe->pipe_index;
@@ -482,7 +482,8 @@
SPS_ERR("Client not owner of BAM 0x%x pipe: %d (max %d)",
bam->props.phys_addr, pipe_index,
bam->props.num_pipes);
- spin_unlock(&bam->connection_lock);
+ spin_unlock_irqrestore(&bam->connection_lock,
+ bam->irqsave_flags);
return NULL;
}
@@ -499,7 +500,7 @@
*/
static inline void sps_bam_unlock(struct sps_bam *bam)
{
- spin_unlock(&bam->connection_lock);
+ spin_unlock_irqrestore(&bam->connection_lock, bam->irqsave_flags);
}
/**
diff --git a/drivers/platform/msm/sps/sps_bam.h b/drivers/platform/msm/sps/sps_bam.h
index 6d8177c..3af891e 100644
--- a/drivers/platform/msm/sps/sps_bam.h
+++ b/drivers/platform/msm/sps/sps_bam.h
@@ -196,6 +196,7 @@
u32 version;
spinlock_t isr_lock;
spinlock_t connection_lock;
+ unsigned long irqsave_flags;
/* Pipe state */
u32 pipe_active_mask;