aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2012-09-18 02:42:42 -0400
committerChris Ball <cjb@laptop.org>2012-10-03 10:05:28 -0400
commit8464dd52d3198dd05cafb005371d76e5339eb842 (patch)
tree71faa28ff4aea73dcb473a120ed4eecfd7368998
parent7a7eb3286b8e078d6f5de56a2e26a3bb248085eb (diff)
mmc: sh-mmcif: avoid oops on spurious interrupts
On some systems, e.g., kzm9g, MMCIF interfaces can produce spurious interrupts without any active request. To prevent the Oops, that results in such cases, don't dereference the mmc request pointer until we make sure, that we are indeed processing such a request. Reported-by: Tetsuyuki Kobayashi <koba@kmckk.co.jp> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Cc: stable <stable@vger.kernel.org> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/host/sh_mmcif.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index 6df3dc3164f7..11d2bc3b51d5 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -1231,6 +1231,10 @@ static irqreturn_t sh_mmcif_intr(int irq, void *dev_id)
1231 host->sd_error = true; 1231 host->sd_error = true;
1232 dev_dbg(&host->pd->dev, "int err state = %08x\n", state); 1232 dev_dbg(&host->pd->dev, "int err state = %08x\n", state);
1233 } 1233 }
1234 if (host->state == STATE_IDLE) {
1235 dev_info(&host->pd->dev, "Spurious IRQ status 0x%x", state);
1236 return IRQ_HANDLED;
1237 }
1234 if (state & ~(INT_CMD12RBE | INT_CMD12CRE)) { 1238 if (state & ~(INT_CMD12RBE | INT_CMD12CRE)) {
1235 if (!host->dma_active) 1239 if (!host->dma_active)
1236 return IRQ_WAKE_THREAD; 1240 return IRQ_WAKE_THREAD;