From: Michael Tretter Date: Thu, 26 Aug 2021 09:47:40 +0000 (+0200) Subject: dmaengine: zynqmp_dma: cleanup after completing all descriptors X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=16ed0ef3e931f49b06d73afbe1fb41737bee86b6;p=linux.git dmaengine: zynqmp_dma: cleanup after completing all descriptors 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 Link: https://lore.kernel.org/r/20210826094742.1302009-6-m.tretter@pengutronix.de Signed-off-by: Vinod Koul --- diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c index 2a57d7c38d35c..aa1374c244981 100644 --- a/drivers/dma/xilinx/zynqmp_dma.c +++ b/drivers/dma/xilinx/zynqmp_dma.c @@ -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);