summaryrefslogtreecommitdiffstats
path: root/drivers/dma/dma-axi-dmac.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2016-07-01 17:45:58 +0200
committerVinod Koul <vinod.koul@intel.com>2016-07-01 19:26:41 +0200
commit71831f652968f05270ace83a0bfd607bfed20760 (patch)
tree7d47c528405f2714ef630a41ee16a46f2bd745cf /drivers/dma/dma-axi-dmac.c
parentdmaengine: axi-dmac: Propagate errors from platform_get_irq() (diff)
downloadlinux-71831f652968f05270ace83a0bfd607bfed20760.tar.xz
linux-71831f652968f05270ace83a0bfd607bfed20760.zip
dmaengine: axi-dmac: Return IRQ_NONE if no IRQs are pending
Return IRQ_NONE in the interrupt handler when it is called but no IRQs are pending. This allows the system to recover in case of an interrupt storm e.g. due to a wrong interrupt configuration setup. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/dma-axi-dmac.c')
-rw-r--r--drivers/dma/dma-axi-dmac.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c
index 0e0dfc0890ac..7f0b9aa15867 100644
--- a/drivers/dma/dma-axi-dmac.c
+++ b/drivers/dma/dma-axi-dmac.c
@@ -270,6 +270,9 @@ static irqreturn_t axi_dmac_interrupt_handler(int irq, void *devid)
unsigned int pending;
pending = axi_dmac_read(dmac, AXI_DMAC_REG_IRQ_PENDING);
+ if (!pending)
+ return IRQ_NONE;
+
axi_dmac_write(dmac, AXI_DMAC_REG_IRQ_PENDING, pending);
spin_lock(&dmac->chan.vchan.lock);