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 <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>
This commit is contained in:
Michael Tretter 2021-08-26 11:47:40 +02:00 committed by Vinod Koul
parent 85997fdfd1
commit 16ed0ef3e9

View 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);