FAILED: patch "[PATCH] dmaengine: at_hdmac: Do not call the complete callback on" 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:
f645f85ae110 ("dmaengine: at_hdmac: Do not call the complete callback on device_terminate_all") 078a6506141a ("dmaengine: at_hdmac: Fix deadlocks")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f645f85ae1104f8bd882f962ac0a69a1070076dd Mon Sep 17 00:00:00 2001
From: Tudor Ambarus <[email protected]>
Date: Tue, 25 Oct 2022 12:02:39 +0300
Subject: [PATCH] dmaengine: at_hdmac: Do not call the complete callback on
device_terminate_all
The method was wrong because it violated the dmaengine API. For aborted transfers the complete callback should not be called. Fix the behavior and do not call the complete callback on device_terminate_all.
drivers/dma/at_hdmac.c +2 -9
@@ -1437,11 +1437,8 @@ static int atc_terminate_all(struct dma_chan *chan)struct at_dma_chan *atchan =to_at_dma_chan (chan);struct at_dma *atdma =to_at_dma (chan->device);int chan_id = atchan->chan_common.chan_id; -struct at_desc *desc, *_desc;unsigned long flags; -LIST_HEAD (list); -dev_vdbg (chan2dev (chan),"%s\n" , __func__);/*
@@ -1460,15 +1457,11 @@ static int atc_terminate_all(struct dma_chan *chan)cpu_relax ();/* active_list entries will end up before queued entries */ -list_splice_init (&atchan->queue, &list); -list_splice_init (&atchan->active_list, &list); +list_splice_tail_init (&atchan->queue, &atchan->free_list); +list_splice_tail_init (&atchan->active_list, &atchan->free_list);spin_unlock_irqrestore (&atchan->lock, flags); -/* Flush all pending and queued descriptors */ -list_for_each_entry_safe (desc, _desc, &list, desc_node) -atc_chain_complete (atchan, desc); -clear_bit (ATC_IS_PAUSED , &atchan->status);/* if channel dedicated to cyclic operations, free it */ clear_bit (ATC_IS_CYCLIC , &atchan->status);