]> rtime.felk.cvut.cz Git - zynq/linux.git/commitdiff
dma: zynqmp: Avoid early return from irq
authorPunnaiah Choudary Kalluri <punnaiah.choudary.kalluri@xilinx.com>
Thu, 28 May 2015 09:26:49 +0000 (14:56 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 29 May 2015 07:26:25 +0000 (09:26 +0200)
Process all the irq events instead of early return

Signed-off-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/dma/xilinx/zynqmp_dma.c

index 346cc723e0ef230231623d86617c82f488a739cc..4f9154ff59fd005338c5b82813fb28a9aa0bf233 100644 (file)
@@ -752,6 +752,7 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, void *data)
 {
        struct zynqmp_dma_chan *chan = (struct zynqmp_dma_chan *)data;
        u32 isr, imr, status;
+       irqreturn_t ret = IRQ_NONE;
 
        isr = readl(chan->regs + ISR);
        imr = readl(chan->regs + IMR);
@@ -766,7 +767,7 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, void *data)
                zynqmp_dma_start_transfer(chan);
                spin_unlock(&chan->lock);
                tasklet_schedule(&chan->tasklet);
-               return IRQ_HANDLED;
+               ret = IRQ_HANDLED;
        }
 
        if (status & INT_ERR) {
@@ -774,17 +775,17 @@ static irqreturn_t zynqmp_dma_irq_handler(int irq, void *data)
                writel(INT_ERR, chan->regs + IDS);
                tasklet_schedule(&chan->tasklet);
                dev_err(chan->dev, "Channel %p has has errors\n", chan);
-               return IRQ_HANDLED;
+               ret = IRQ_HANDLED;
        }
 
        if (status & INT_OVRFL) {
                writel(INT_OVRFL, chan->regs + IDS);
                zynqmp_dma_handle_ovfl_int(chan, status);
                dev_dbg(chan->dev, "Channel %p overflow interrupt\n", chan);
-               return IRQ_HANDLED;
+               ret = IRQ_HANDLED;
        }
 
-       return IRQ_NONE;
+       return ret;
 }
 
 /**