[PATCH v2 14/64] dmaengine: nbpfaxi: switch callbacks to dma_chan BH
Allen Pais <[email protected]> Mon, 27 Jul 2026 13:28:42 -0700
| Newsgroups | org.kernel.vger.dmaengine,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <0ca89b05c6c34edde9745324b832f37f8a12922b.1785183549.git.allen.lkml@gmail.com> |
Replace the per-channel tasklet with the shared dma_chan BH helper. The handler continues to run in softirq context while dmaengine owns the common scheduling and teardown mechanism. Signed-off-by: Allen Pais <[email protected]> --- drivers/dma/nbpfaxi.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c index 05d7321629cc..aea94451258a 100644 --- a/drivers/dma/nbpfaxi.c +++ b/drivers/dma/nbpfaxi.c @@ -174,7 +174,6 @@ struct nbpf_desc_page { /** * struct nbpf_channel - one DMAC channel * @dma_chan: standard dmaengine channel object - * @tasklet: channel specific tasklet used for callbacks * @base: register address base * @nbpf: DMAC * @name: IRQ name @@ -200,7 +199,6 @@ struct nbpf_desc_page { */ struct nbpf_channel { struct dma_chan dma_chan; - struct tasklet_struct tasklet; void __iomem *base; struct nbpf_device *nbpf; char name[16]; @@ -1125,9 +1123,10 @@ static struct dma_chan *nbpf_of_xlate(struct of_phandle_args *dma_spec, return dchan; } -static void nbpf_chan_tasklet(struct tasklet_struct *t) +static void nbpf_chan_tasklet(struct dma_chan *c) { - struct nbpf_channel *chan = from_tasklet(chan, t, tasklet); + struct nbpf_channel *chan = container_of(c, struct nbpf_channel, + dma_chan); struct nbpf_desc *desc, *tmp; struct dmaengine_desc_callback cb; @@ -1228,7 +1227,7 @@ static irqreturn_t nbpf_chan_irq(int irq, void *dev) spin_unlock(&chan->lock); if (bh) - tasklet_schedule(&chan->tasklet); + dma_chan_schedule_bh(&chan->dma_chan); return ret; } @@ -1272,7 +1271,7 @@ static int nbpf_chan_probe(struct nbpf_device *nbpf, int n) snprintf(chan->name, sizeof(chan->name), "nbpf %d", n); - tasklet_setup(&chan->tasklet, nbpf_chan_tasklet); + dma_chan_init_bh(&chan->dma_chan, nbpf_chan_tasklet); ret = devm_request_irq(dma_dev->dev, chan->irq, nbpf_chan_irq, IRQF_SHARED, chan->name, chan); @@ -1478,7 +1477,7 @@ static void nbpf_remove(struct platform_device *pdev) devm_free_irq(&pdev->dev, chan->irq, chan); - tasklet_kill(&chan->tasklet); + dma_chan_kill_bh(&chan->dma_chan); } of_dma_controller_free(pdev->dev.of_node); -- 2.43.0