Skip to content

Commit 1825ecc

Browse files
larsclausenvinodkoul
authored andcommitted
dmaengine: zynqmp_dma: Correctly handle descriptor callbacks
DMA clients can provide one of two types of callbacks. For this reason dmaengine drivers should not directly invoke `callback`, but always use `dmaengine_desc_callback_invoke()`. This makes sure that both types of callbacks are handled correctly. The zynqmp_dma driver currently doesn't do this and only handles the `callback` type callback. If the client used the `callback_result` type callback it will not be called. Fix this by switching to `dmaengine_desc_callback_valid()` and `dmaengine_desc_callback_invoke()`. Signed-off-by: Lars-Peter Clausen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent a63ddc3 commit 1825ecc

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/dma/xilinx/zynqmp_dma.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -605,14 +605,12 @@ static void zynqmp_dma_chan_desc_cleanup(struct zynqmp_dma_chan *chan)
605605
spin_lock_irqsave(&chan->lock, irqflags);
606606

607607
list_for_each_entry_safe(desc, next, &chan->done_list, node) {
608-
dma_async_tx_callback callback;
609-
void *callback_param;
608+
struct dmaengine_desc_callback cb;
610609

611-
callback = desc->async_tx.callback;
612-
callback_param = desc->async_tx.callback_param;
613-
if (callback) {
610+
dmaengine_desc_get_callback(&desc->async_tx, &cb);
611+
if (dmaengine_desc_callback_valid(&cb)) {
614612
spin_unlock_irqrestore(&chan->lock, irqflags);
615-
callback(callback_param);
613+
dmaengine_desc_callback_invoke(&cb, NULL);
616614
spin_lock_irqsave(&chan->lock, irqflags);
617615
}
618616

0 commit comments

Comments
 (0)