FAILED: patch "[PATCH] dmaengine: at_hdmac: Fix concurrency over descriptor" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
06988949df8c ("dmaengine: at_hdmac: Fix concurrency over descriptor") 078a6506141a ("dmaengine: at_hdmac: Fix deadlocks")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 06988949df8c3007ad82036d3606d8ae72ed9000 Mon Sep 17 00:00:00 2001
From: Tudor Ambarus <[email protected]>
Date: Tue, 25 Oct 2022 12:02:42 +0300
Subject: [PATCH] dmaengine: at_hdmac: Fix concurrency over descriptor
The descriptor was added to the free_list before calling the callback, which could result in reissuing of the same descriptor and calling of a single callback for both. Move the decriptor to the free list after the callback is invoked.
drivers/dma/at_hdmac.c +9 -5
@@ -469,11 +469,8 @@ atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc) desc->memset_buffer = false; } -/* move children to free_list */ -list_splice_init (&desc->tx_list, &atchan->free_list); -/* move myself to free_list */ -list_move (&desc->desc_node, &atchan->free_list); - +/* Remove transfer node from the active list. */ +list_del_init (&desc->desc_node);spin_unlock_irqrestore (&atchan->lock, flags);dma_descriptor_unmap (txd);
@@ -483,6 +480,13 @@ atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc)dmaengine_desc_get_callback_invoke (txd,NULL );dma_run_dependencies (txd); + +spin_lock_irqsave (&atchan->lock, flags); +/* move children to free_list */ +list_splice_init (&desc->tx_list, &atchan->free_list); +/* add myself to free_list */ +list_add (&desc->desc_node, &atchan->free_list); +spin_unlock_irqrestore (&atchan->lock, flags); }/**