[PATCH v2 01/12] async_tx: replace direct ->device_prep*() calls with standard DMA engine API
From: Frank . Li
Date: Wed Sep 23 2026 - 12:27:05 EST
From: Frank Li <Frank.Li@xxxxxxx>
DMA engine consumers must not call the channel's device_prep_*() function
pointers directly. Use the standard dmaengine wrapper APIs instead.
Assisted-by: LLM
Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
---
crypto/async_tx/async_memcpy.c | 6 +++---
crypto/async_tx/async_tx.c | 4 ++--
include/linux/async_tx.h | 8 ++------
3 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/crypto/async_tx/async_memcpy.c b/crypto/async_tx/async_memcpy.c
index c538e30e99094..627b6ad9313e0 100644
--- a/crypto/async_tx/async_memcpy.c
+++ b/crypto/async_tx/async_memcpy.c
@@ -58,9 +58,9 @@ async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset,
DMA_FROM_DEVICE);
unmap->len = len;
- tx = device->device_prep_dma_memcpy(chan, unmap->addr[1],
- unmap->addr[0], len,
- dma_prep_flags);
+ tx = dmaengine_prep_dma_memcpy(chan, unmap->addr[1],
+ unmap->addr[0], len,
+ dma_prep_flags);
}
if (tx) {
diff --git a/crypto/async_tx/async_tx.c b/crypto/async_tx/async_tx.c
index ad72057a5e0d7..01ef830675574 100644
--- a/crypto/async_tx/async_tx.c
+++ b/crypto/async_tx/async_tx.c
@@ -79,7 +79,7 @@ async_tx_channel_switch(struct dma_async_tx_descriptor *depend_tx,
/* attached dependency, flush the parent channel */
if (!intr_tx) {
- device->device_issue_pending(chan);
+ dma_async_issue_pending(chan);
return;
}
@@ -113,7 +113,7 @@ async_tx_channel_switch(struct dma_async_tx_descriptor *depend_tx,
intr_tx->tx_submit(intr_tx);
async_tx_ack(intr_tx);
}
- device->device_issue_pending(chan);
+ dma_async_issue_pending(chan);
} else {
if (dma_wait_for_async_tx(depend_tx) != DMA_COMPLETE)
panic("%s: DMA error waiting for depend_tx\n",
diff --git a/include/linux/async_tx.h b/include/linux/async_tx.h
index 1ca9f9e05f4f1..9f7fef19f2142 100644
--- a/include/linux/async_tx.h
+++ b/include/linux/async_tx.h
@@ -87,12 +87,8 @@ struct async_submit_ctl {
*/
static inline void async_tx_issue_pending(struct dma_async_tx_descriptor *tx)
{
- if (likely(tx)) {
- struct dma_chan *chan = tx->chan;
- struct dma_device *dma = chan->device;
-
- dma->device_issue_pending(chan);
- }
+ if (likely(tx))
+ dma_async_issue_pending(tx->chan);
}
#ifdef CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL
#include <asm/async_tx.h>
--
2.43.0