Re: [PATCH v3 10/34] dmaengine: mmp_pdma: replace per-chan tasklet with dmaengine BH

From: Frank Li

Date: Wed Sep 02 2026 - 10:59:13 EST


On Mon, Aug 10, 2026 at 11:09:11AM -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_pdma.c | 13 +++++--------
> 1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c
> index 386e85cd4882..4f7d3193d7a3 100644
> --- a/drivers/dma/mmp_pdma.c
> +++ b/drivers/dma/mmp_pdma.c
> @@ -116,7 +116,6 @@ struct mmp_pdma_chan {
> * is in cyclic mode */
>
> /* channel's basic info */
> - struct tasklet_struct tasklet;
> u32 dcmd;
> u32 drcmr;
> u32 dev_addr;
> @@ -374,7 +373,7 @@ static irqreturn_t mmp_pdma_chan_handler(int irq, void *dev_id)
> if (clear_chan_irq(phy) != 0)
> return IRQ_NONE;
>
> - tasklet_schedule(&phy->vchan->tasklet);
> + dmaengine_schedule_bh(&phy->vchan->chan);
> return IRQ_HANDLED;
> }
>
> @@ -1047,13 +1046,11 @@ static void mmp_pdma_issue_pending(struct dma_chan *dchan)
> }
>
> /*
> - * dma_do_tasklet
> - * Do call back
> - * Start pending list
> + * dma_do_tasklet - BH worker to process completions and kick pending work
> */
> -static void dma_do_tasklet(struct tasklet_struct *t)
> +static void dma_do_tasklet(struct dma_chan *c)
> {
> - struct mmp_pdma_chan *chan = from_tasklet(chan, t, tasklet);
> + struct mmp_pdma_chan *chan = container_of(c, struct mmp_pdma_chan, chan);
> struct mmp_pdma_desc_sw *desc, *_desc;
> LIST_HEAD(chain_cleanup);
> unsigned long flags;
> @@ -1170,7 +1167,7 @@ static int mmp_pdma_chan_init(struct mmp_pdma_device *pdev, int idx, int irq)
> spin_lock_init(&chan->desc_lock);
> chan->dev = pdev->dev;
> chan->chan.device = &pdev->device;
> - tasklet_setup(&chan->tasklet, dma_do_tasklet);
> + dmaengine_init_bh(&chan->chan, dma_do_tasklet);
> INIT_LIST_HEAD(&chan->chain_pending);
> INIT_LIST_HEAD(&chan->chain_running);
>
> --
> 2.43.0
>