mmc: msm_sdcc: Extend the spin lock to cover all register reads
In PIO IRQ handler, currently the STATUS and MASK registers are
read without the host lock being grabbed. Fix this by extending
the scope of the lock.
CRs-Fixed: 304791
Signed-off-by: Murali Palnati <palnatim@codeaurora.org>
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index dec8f431..c6fab3c 100644
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -1135,18 +1135,20 @@
void __iomem *base = host->base;
uint32_t status;
+ spin_lock(&host->lock);
+
status = readl_relaxed(base + MMCISTATUS);
if (((readl_relaxed(host->base + MMCIMASK0) & status) &
- (MCI_IRQ_PIO)) == 0)
+ (MCI_IRQ_PIO)) == 0) {
+ spin_unlock(&host->lock);
return IRQ_NONE;
+ }
#if IRQ_DEBUG
msmsdcc_print_status(host, "irq1-r", status);
#endif
- spin_lock(&host->lock);
-
do {
unsigned long flags;
unsigned int remain, len;