Re: [PATCH v3 11/34] dmaengine: mmp_tdma: hook completions to dmaengine BH

From: Frank Li

Date: Wed Sep 02 2026 - 12:11:09 EST


On Mon, Aug 10, 2026 at 11:09:12AM -0700, Allen Pais wrote:
> Replace the per-channel tasklet with the shared dmaengine BH helper.
> The handler continues to run in softirq context while dmaengine owns
> the common scheduling and teardown mechanism.
>
> Signed-off-by: Allen Pais <allen.lkml@xxxxxxxxx>
> ---

Reviewed-by: Frank Li <Frank.Li@xxxxxxx>

> drivers/dma/mmp_tdma.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
> index ba03321eeff7..d20aaa7567a6 100644
> --- a/drivers/dma/mmp_tdma.c
> +++ b/drivers/dma/mmp_tdma.c
> @@ -102,7 +102,6 @@ struct mmp_tdma_chan {
> struct device *dev;
> struct dma_chan chan;
> struct dma_async_tx_descriptor desc;
> - struct tasklet_struct tasklet;
>
> struct mmp_tdma_desc *desc_arr;
> dma_addr_t desc_arr_phys;
> @@ -320,7 +319,7 @@ static irqreturn_t mmp_tdma_chan_handler(int irq, void *dev_id)
> struct mmp_tdma_chan *tdmac = dev_id;
>
> if (mmp_tdma_clear_chan_irq(tdmac) == 0) {
> - tasklet_schedule(&tdmac->tasklet);
> + dmaengine_schedule_bh(&tdmac->chan);
> return IRQ_HANDLED;
> } else
> return IRQ_NONE;
> @@ -346,9 +345,9 @@ static irqreturn_t mmp_tdma_int_handler(int irq, void *dev_id)
> return IRQ_NONE;
> }
>
> -static void dma_do_tasklet(struct tasklet_struct *t)
> +static void dma_do_tasklet(struct dma_chan *c)
> {
> - struct mmp_tdma_chan *tdmac = from_tasklet(tdmac, t, tasklet);
> + struct mmp_tdma_chan *tdmac = container_of(c, struct mmp_tdma_chan, chan);
>
> dmaengine_desc_get_callback_invoke(&tdmac->desc, NULL);
> }
> @@ -583,7 +582,7 @@ static int mmp_tdma_chan_init(struct mmp_tdma_device *tdev,
> tdmac->pool = pool;
> tdmac->status = DMA_COMPLETE;
> tdev->tdmac[tdmac->idx] = tdmac;
> - tasklet_setup(&tdmac->tasklet, dma_do_tasklet);
> + dmaengine_init_bh(&tdmac->chan, dma_do_tasklet);
>
> /* add the channel to tdma_chan list */
> list_add_tail(&tdmac->chan.device_node,
> --
> 2.43.0
>