dmaengine: zynqmp_dma: cleanup after completing all descriptors
authorMichael Tretter <m.tretter@pengutronix.de>
Thu, 26 Aug 2021 09:47:40 +0000 (11:47 +0200)
committerVinod Koul <vkoul@kernel.org>
Fri, 1 Oct 2021 11:56:30 +0000 (17:26 +0530)
The current implementation iterates the entire done list for each
completed dma descriptor even if there are multiple completed
descriptors.

Avoid this by first moving all completed descriptors to the done list
and afterwards iterating the done list and finishing the descriptors.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Link: https://lore.kernel.org/r/20210826094742.1302009-6-m.tretter@pengutronix.de
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/xilinx/zynqmp_dma.c

index 2a57d7c38d35c706d16421800be96262ec362449..aa1374c244981a9da41b02633e634a97cfd95c71 100644 (file)
@@ -758,10 +758,11 @@ static void zynqmp_dma_do_tasklet(struct tasklet_struct *t)
 
        while (count) {
                zynqmp_dma_complete_descriptor(chan);
-               zynqmp_dma_chan_desc_cleanup(chan);
                count--;
        }
 
+       zynqmp_dma_chan_desc_cleanup(chan);
+
        if (chan->idle)
                zynqmp_dma_start_transfer(chan);