net/mlx5: Keep autogroups list ordered
[cascardo/linux.git] / drivers / dma / fsldma.c
index 911b717..51c75bf 100644 (file)
@@ -516,13 +516,9 @@ static dma_cookie_t fsldma_run_tx_complete_actions(struct fsldma_chan *chan,
        if (txd->cookie > 0) {
                ret = txd->cookie;
 
-               /* Run the link descriptor callback function */
-               if (txd->callback) {
-                       chan_dbg(chan, "LD %p callback\n", desc);
-                       txd->callback(txd->callback_param);
-               }
-
                dma_descriptor_unmap(txd);
+               /* Run the link descriptor callback function */
+               dmaengine_desc_get_callback_invoke(txd, NULL);
        }
 
        /* Run any dependencies */
@@ -1153,7 +1149,7 @@ static void fsldma_free_irqs(struct fsldma_device *fdev)
        struct fsldma_chan *chan;
        int i;
 
-       if (fdev->irq != NO_IRQ) {
+       if (fdev->irq) {
                dev_dbg(fdev->dev, "free per-controller IRQ\n");
                free_irq(fdev->irq, fdev);
                return;
@@ -1161,7 +1157,7 @@ static void fsldma_free_irqs(struct fsldma_device *fdev)
 
        for (i = 0; i < FSL_DMA_MAX_CHANS_PER_DEVICE; i++) {
                chan = fdev->chan[i];
-               if (chan && chan->irq != NO_IRQ) {
+               if (chan && chan->irq) {
                        chan_dbg(chan, "free per-channel IRQ\n");
                        free_irq(chan->irq, chan);
                }
@@ -1175,7 +1171,7 @@ static int fsldma_request_irqs(struct fsldma_device *fdev)
        int i;
 
        /* if we have a per-controller IRQ, use that */
-       if (fdev->irq != NO_IRQ) {
+       if (fdev->irq) {
                dev_dbg(fdev->dev, "request per-controller IRQ\n");
                ret = request_irq(fdev->irq, fsldma_ctrl_irq, IRQF_SHARED,
                                  "fsldma-controller", fdev);
@@ -1188,7 +1184,7 @@ static int fsldma_request_irqs(struct fsldma_device *fdev)
                if (!chan)
                        continue;
 
-               if (chan->irq == NO_IRQ) {
+               if (!chan->irq) {
                        chan_err(chan, "interrupts property missing in device tree\n");
                        ret = -ENODEV;
                        goto out_unwind;
@@ -1211,7 +1207,7 @@ out_unwind:
                if (!chan)
                        continue;
 
-               if (chan->irq == NO_IRQ)
+               if (!chan->irq)
                        continue;
 
                free_irq(chan->irq, chan);
@@ -1311,7 +1307,7 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev,
        list_add_tail(&chan->common.device_node, &fdev->common.channels);
 
        dev_info(fdev->dev, "#%d (%s), irq %d\n", chan->id, compatible,
-                chan->irq != NO_IRQ ? chan->irq : fdev->irq);
+                chan->irq ? chan->irq : fdev->irq);
 
        return 0;
 
@@ -1351,7 +1347,7 @@ static int fsldma_of_probe(struct platform_device *op)
        if (!fdev->regs) {
                dev_err(&op->dev, "unable to ioremap registers\n");
                err = -ENOMEM;
-               goto out_free_fdev;
+               goto out_free;
        }
 
        /* map the channel IRQ if it exists, but don't hookup the handler yet */
@@ -1416,6 +1412,8 @@ static int fsldma_of_probe(struct platform_device *op)
 
 out_free_fdev:
        irq_dispose_mapping(fdev->irq);
+       iounmap(fdev->regs);
+out_free:
        kfree(fdev);
 out_return:
        return err;