From 16ed0ef3e931f49b06d73afbe1fb41737bee86b6 Mon Sep 17 00:00:00 2001 From: Michael Tretter Date: Thu, 26 Aug 2021 11:47:40 +0200 Subject: 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 --- drivers/dma/xilinx/zynqmp_dma.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c index 2a57d7c38d35..aa1374c24498 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); -- cgit v1.2.3-70-g09d2