]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dmaengine: xilinx: xdma: Fix data synchronisation in xdma_channel_isr()
authorLouis Chauvet <louis.chauvet@bootlin.com>
Fri, 7 Jun 2024 08:34:38 +0000 (10:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2024 11:52:29 +0000 (13:52 +0200)
commit 462237d2d93fc9e9221d1cf9f773954d27da83c0 upstream.

Requests the vchan lock before using xdma->stop_request.

Fixes: 6a40fb824596 ("dmaengine: xilinx: xdma: Fix synchronization issue")
Cc: stable@vger.kernel.org
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
Link: https://lore.kernel.org/r/20240607-xdma-fixes-v2-1-0282319ce345@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/dma/xilinx/xdma.c

index 313b217388fe95e2fd539d53c5542ce858cc25a6..ae6e06057aa1dacb0c8f581c3a0c25b7725d64d7 100644 (file)
@@ -885,11 +885,11 @@ static irqreturn_t xdma_channel_isr(int irq, void *dev_id)
        u32 st;
        bool repeat_tx;
 
+       spin_lock(&xchan->vchan.lock);
+
        if (xchan->stop_requested)
                complete(&xchan->last_interrupt);
 
-       spin_lock(&xchan->vchan.lock);
-
        /* get submitted request */
        vd = vchan_next_desc(&xchan->vchan);
        if (!vd)