]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dmaengine: at_xdmac: Fix concurrency over chan's completed_cookie
authorTudor Ambarus <tudor.ambarus@microchip.com>
Wed, 15 Dec 2021 11:01:07 +0000 (13:01 +0200)
committerVinod Koul <vkoul@kernel.org>
Wed, 5 Jan 2022 10:20:03 +0000 (15:50 +0530)
Caller of dma_cookie_complete is expected to hold a lock to prevent
concurrency over the channel's completed cookie marker. Call
dma_cookie_complete() with the lock held.

Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver")
Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Link: https://lore.kernel.org/r/20211215110115.191749-5-tudor.ambarus@microchip.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/at_xdmac.c

index 7d3560acedbb9260d5ca41174c68bd2b42809297..83c031207530df7c3b0e587bd0e206363b8f7856 100644 (file)
@@ -1703,11 +1703,10 @@ static void at_xdmac_tasklet(struct tasklet_struct *t)
                }
 
                txd = &desc->tx_dma_desc;
-
+               dma_cookie_complete(txd);
                at_xdmac_remove_xfer(atchan, desc);
                spin_unlock_irq(&atchan->lock);
 
-               dma_cookie_complete(txd);
                if (txd->flags & DMA_PREP_INTERRUPT)
                        dmaengine_desc_get_callback_invoke(txd, NULL);