From: "Arnd Bergmann" <arnd@arndb.de>
To: Allen <allen.lkml@gmail.com>
Cc: "Vinod Koul" <vkoul@kernel.org>, "Kees Cook" <kees@kernel.org>,
dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/1] dmaengine: introduce dmaengine_bh_wq and bh helpers
Date: Fri, 09 Jan 2026 17:42:54 +0100 [thread overview]
Message-ID: <7a557097-5dca-4c44-a48f-21dfa2659abc@app.fastmail.com> (raw)
In-Reply-To: <CAOMdWSLX07i_-NjUB6TTXbWVmeFLSNoaTBhvOs0WX6Ad=A6PDA@mail.gmail.com>
On Thu, Jan 8, 2026, at 20:22, Allen wrote:
>
> Thanks for the feedback. My intent with WQ_BH was to keep callbacks in
> softirq/BH context, but I agree the scheduling overhead and existing tasklet
> assumptions are valid concerns.
Hi Allen,
Sorry about missing the bit about WQ_BH, I forgot about the details
of or previous discussion and this is pretty much what I had
suggested last time,
> I can re-spin the RFC to drop the workqueue entirely and keep
> tasklet semantics,
> while still abstracting tasklet handling into dmaengine helpers so drivers no
> longer directly manipulate tasklets. That keeps
> dmaengine_desc_callback_invoke()
> in tasklet context and avoids breaking DMA users that rely on that behavior.
It's probably fine to do both, but a series of two patches (first introduce
the per-channel API, then move it over to WQ_BH) may be slightly
clearer here.
I'm not sure why the dmaengine_*_bh_wq() functions are exported
interfaces, as far as I can tell, you use them only internally
in the dma_chan_*_bh() functions, so making them static would
let the compiler inline them where possible.
There are of course dmaengine drivers that use tasklets for other
purposes than the channel callback. Was your idea here to use
the same workqueue for these? I would perhaps hold off on that for
the moment and see if there is a better alternative for those,
possibly hardirq context, threaded irq or a regular workqueue
depending on the driver.
> A hardirq callback path feels like a larger API change, so I’d
> prefer to handle that as a separate follow‑up (e.g. explicit hardirq
> callback/flag + user migration where safe). Thoughts?
Yes, definitely keep that separate. I still think that this is
what we want eventually for a bigger improvement, but your
patch seems valuable on its own as well.
Some more thoughts on where that later change could take us:
> /*
> - * This tasklet handles the completion of a DMA descriptor by
> - * calling its callback and freeing it.
> + * This bottom-half handler completes a DMA descriptor by invoking its
> + * callback and freeing it.
> */
> -static void vchan_complete(struct tasklet_struct *t)
> +static void vchan_complete(struct dma_chan *chan)
> {
> - struct virt_dma_chan *vc = from_tasklet(vc, t, task);
> + struct virt_dma_chan *vc = to_virt_chan(chan);
> struct virt_dma_desc *vd, *_vd;
> struct dmaengine_desc_callback cb;
> LIST_HEAD(head);
> @@ -131,7 +131,7 @@ void vchan_init(struct virt_dma_chan *vc, struct
> dma_device *dmadev)
> INIT_LIST_HEAD(&vc->desc_completed);
> INIT_LIST_HEAD(&vc->desc_terminated);
>
> - tasklet_setup(&vc->task, vchan_complete);
> + dma_chan_init_bh(&vc->chan, vchan_complete);
This is where I think it makes sense to start, again for
the vchan imlmenentation. What the dmaengine drivers have
is a per-driver tasklet (or WQ_BH) with a single complete()
function that directly calls into the client drivers for
each completion that has happened.
Since the context we want depends on the type of client
driver, I think a good approach would be to start
by modifying vchan_cookie_complete() to allow it to
call the callback function directly from hardirq context
when the client asks for that, and avoid the round trip
through the tasklet where possible.
A new bit in the dma_ctrl_flags word could be used
to ask for hardirq vs softirq context, and the existing
drivers just fall back to using a tasklet for softirq
context.
Arnd
next prev parent reply other threads:[~2026-01-09 16:43 UTC|newest]
Thread overview: 160+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-08 8:03 [RFC PATCH 0/1] " Allen Pais
2026-01-08 8:03 ` [RFC PATCH 1/1] " Allen Pais
2026-01-08 10:26 ` Arnd Bergmann
2026-01-08 19:22 ` Allen
2026-01-09 16:42 ` Arnd Bergmann [this message]
2026-01-12 22:20 ` Allen
2026-01-13 7:33 ` Arnd Bergmann
2026-01-13 19:31 ` Allen
2026-07-27 20:28 ` [PATCH v2 00/64] dmaengine: migrate channel tasklets to WQ_BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 01/64] dmaengine: add tasklet-backed channel BH helpers Allen Pais
2026-07-29 12:48 ` Vinod Koul
2026-08-04 3:32 ` Allen
2026-07-27 20:28 ` [PATCH v2 02/64] dmaengine: back channel BH helpers with WQ_BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 03/64] dmaengine: apple-admac: use dma_chan BH callback Allen Pais
2026-07-27 20:28 ` [PATCH v2 04/64] dmaengine: at_xdmac: move irq bottom half to dma_chan BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 05/64] dmaengine: ep93xx: hook callbacks via " Allen Pais
2026-07-27 20:28 ` [PATCH v2 06/64] dmaengine: fsldma: migrate tasklet to " Allen Pais
2026-07-27 20:28 ` [PATCH v2 07/64] dmaengine: fsl_raid: run completions via " Allen Pais
2026-07-27 20:28 ` [PATCH v2 08/64] dmaengine: imx-dma: flip per-chan tasklet to " Allen Pais
2026-07-27 20:28 ` [PATCH v2 09/64] dmaengine: ioat: convert cleanup " Allen Pais
2026-07-27 20:38 ` Dave Jiang
2026-07-27 20:28 ` [PATCH v2 10/64] dmaengine: mmp_pdma: replace per-chan tasklet with " Allen Pais
2026-07-27 20:28 ` [PATCH v2 11/64] dmaengine: mmp_tdma: hook completions to " Allen Pais
2026-07-27 20:28 ` [PATCH v2 12/64] dmaengine: mv_xor: convert irq tasklet " Allen Pais
2026-07-27 20:28 ` [PATCH v2 13/64] dmaengine: mxs-dma: use dma_chan BH scheduling Allen Pais
2026-07-27 20:28 ` [PATCH v2 14/64] dmaengine: nbpfaxi: switch callbacks to dma_chan BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 15/64] dmaengine: pch_dma: convert tasklet " Allen Pais
2026-07-27 20:28 ` [PATCH v2 16/64] dmaengine: ppc4xx: replace irq tasklet with " Allen Pais
2026-07-27 20:28 ` [PATCH v2 17/64] dmaengine: ste_dma40: convert per-channel tasklet to " Allen Pais
2026-07-28 19:33 ` Linus Walleij
2026-07-27 20:28 ` [PATCH v2 18/64] dmaengine: xgene-dma: wire descriptor cleanup " Allen Pais
2026-07-27 20:28 ` [PATCH v2 19/64] dmaengine: xilinx-dma: use dma_chan BH instead of tasklets Allen Pais
2026-07-27 20:28 ` [PATCH v2 20/64] dmaengine: xilinx-dpdma: kill vchan BH on remove Allen Pais
2026-07-27 20:28 ` [PATCH v2 21/64] dmaengine: zynqmp-dma: switch completion tasklet to dma_chan BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 22/64] dmaengine: tegra20-apb: use channel BH helpers Allen Pais
2026-07-27 20:28 ` [PATCH v2 23/64] dmaengine: timb_dma: route callbacks via channel BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 24/64] dmaengine: txx9dmac: " Allen Pais
2026-07-27 20:28 ` [PATCH v2 25/64] dmaengine: mv_xor_v2: use channel BH helpers Allen Pais
2026-07-27 20:28 ` [PATCH v2 26/64] dmaengine: mpc512x: route callbacks via channel BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 27/64] dmaengine: k3dma: kill vchan BH on remove Allen Pais
2026-07-27 20:28 ` [PATCH v2 28/64] dmaengine: plx_dma: use channel BH helpers Allen Pais
2026-07-27 20:38 ` Logan Gunthorpe
2026-07-27 20:28 ` [PATCH v2 29/64] dmaengine: sf-pdma: route error callbacks through channel BH Allen Pais
2026-07-27 20:28 ` [PATCH v2 30/64] dmaengine: sa11x0-dma: kill vchan BH on remove Allen Pais
2026-07-27 20:28 ` [PATCH v2 31/64] dmaengine: pl330: route callbacks via channel BH Allen Pais
2026-07-27 20:34 ` Allen Pais
2026-07-27 20:34 ` [PATCH v2 32/64] dmaengine: k3-udma: use channel BH for vchan completions Allen Pais
2026-07-27 20:36 ` [PATCH v2 33/64] dmaengine: sun6i: kill vchan BH on teardown Allen Pais
2026-07-27 20:37 ` [PATCH v2 34/64] dmaengine: mtk-cqdma: " Allen Pais
2026-07-27 20:38 ` [PATCH v2 35/64] dmaengine: altera-msgdma: use channel BH helpers Allen Pais
2026-07-27 20:38 ` [PATCH v2 36/64] dmaengine: sprd-dma: kill vchan BH on teardown Allen Pais
2026-07-27 20:38 ` [PATCH v2 37/64] dmaengine: idma64: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 38/64] dmaengine: img-mdc-dma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 39/64] dmaengine: fsl-edma-common: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 40/64] dmaengine: dw-axi-dmac: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 41/64] dmaengine: hsu: " Allen Pais
2026-07-28 8:47 ` Andy Shevchenko
2026-07-27 20:39 ` [PATCH v2 42/64] dmaengine: jz4780: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 43/64] dmaengine: pxa_dma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 44/64] dmaengine: mtk-hsdma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 45/64] dmaengine: mtk-uart-apdma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 46/64] dmaengine: imx-sdma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 47/64] dmaengine: loongson1-apb: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 48/64] dmaengine: owl-dma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 49/64] dmaengine: hisi: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 50/64] dmaengine: dw-edma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 51/64] dmaengine: bcm2835: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 52/64] dmaengine: tegra210-adma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 53/64] dmaengine: fsl-qdma: use dma_chan_kill_bh Allen Pais
2026-07-27 20:39 ` [PATCH v2 54/64] dmaengine: st_fdma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 55/64] dmaengine: dma-axi-dmac: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 56/64] dmaengine: omap-dma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 57/64] dmaengine: edma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 58/64] dmaengine: qcom-adm: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 59/64] dmaengine: tegra186-gpc: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 60/64] dmaengine: bam-dma: " Allen Pais
2026-07-28 8:38 ` Bartosz Golaszewski
2026-07-27 20:39 ` [PATCH v2 61/64] dmaengine: dw: defer callbacks via channel BH Allen Pais
2026-07-27 20:39 ` [PATCH v2 62/64] dmaengine: hidma: " Allen Pais
2026-07-27 20:39 ` [PATCH v2 63/64] dmaengine: qcom-gpi: defer callbacks via vchan Allen Pais
2026-07-27 20:39 ` [PATCH v2 64/64] dmaengine: switchtec: use channel BH helpers Allen Pais
2026-07-27 21:08 ` Logan Gunthorpe
2026-07-28 20:39 ` [PATCH v2 00/64] dmaengine: migrate channel tasklets to WQ_BH Arnd Bergmann
2026-08-04 3:29 ` Allen
2026-08-10 18:09 ` [PATCH v3 00/34] " Allen Pais
2026-08-10 18:09 ` [PATCH v3 01/34] dmaengine: add tasklet-backed channel BH helpers Allen Pais
2026-09-01 22:13 ` Frank Li
2026-09-02 15:16 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 02/34] dmaengine: back channel BH helpers with WQ_BH Allen Pais
2026-08-11 17:49 ` Vinod Koul
2026-09-01 22:17 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 03/34] dmaengine: apple-admac: use dmaengine BH callback Allen Pais
2026-09-02 15:33 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 04/34] dmaengine: at_xdmac: move irq bottom half to dmaengine BH Allen Pais
2026-09-01 22:32 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 05/34] dmaengine: ep93xx: hook callbacks via " Allen Pais
2026-09-02 15:35 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 06/34] dmaengine: fsldma: migrate tasklet to " Allen Pais
2026-09-02 14:52 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 07/34] dmaengine: fsl_raid: run completions via " Allen Pais
2026-08-10 18:09 ` [PATCH v3 08/34] dmaengine: imx-dma: flip per-chan tasklet to " Allen Pais
2026-09-02 15:17 ` Frank Li
2026-09-02 15:28 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 09/34] dmaengine: ioat: convert cleanup " Allen Pais
2026-09-02 14:44 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 10/34] dmaengine: mmp_pdma: replace per-chan tasklet with " Allen Pais
2026-09-02 14:52 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 11/34] dmaengine: mmp_tdma: hook completions to " Allen Pais
2026-09-02 15:30 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 12/34] dmaengine: mv_xor: convert irq tasklet " Allen Pais
2026-09-02 14:42 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 13/34] dmaengine: mxs-dma: use dmaengine BH scheduling Allen Pais
2026-09-02 15:33 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 14/34] dmaengine: nbpfaxi: switch callbacks to dmaengine BH Allen Pais
2026-08-10 18:09 ` [PATCH v3 15/34] dmaengine: pch_dma: convert tasklet " Allen Pais
2026-09-02 14:55 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 16/34] dmaengine: ppc4xx: replace irq tasklet with " Allen Pais
2026-09-02 15:29 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 17/34] dmaengine: ste_dma40: convert per-channel tasklet to " Allen Pais
2026-09-02 14:43 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 18/34] dmaengine: xgene-dma: wire descriptor cleanup " Allen Pais
2026-09-02 15:29 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 19/34] dmaengine: xilinx-dma: use dmaengine BH instead of tasklets Allen Pais
2026-09-02 15:35 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 20/34] dmaengine: xilinx-dpdma: kill vchan BH on remove Allen Pais
2026-09-02 15:31 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 21/34] dmaengine: zynqmp-dma: switch completion tasklet to dmaengine BH Allen Pais
2026-09-02 15:30 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 22/34] dmaengine: tegra20-apb: use channel BH helpers Allen Pais
2026-08-10 18:09 ` [PATCH v3 23/34] dmaengine: timb_dma: route callbacks via channel BH Allen Pais
2026-09-01 22:22 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 24/34] dmaengine: txx9dmac: " Allen Pais
2026-09-02 14:51 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 25/34] dmaengine: mv_xor_v2: use channel BH helpers Allen Pais
2026-09-02 15:32 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 26/34] dmaengine: mpc512x: route callbacks via channel BH Allen Pais
2026-09-02 14:48 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 27/34] dmaengine: plx_dma: use channel BH helpers Allen Pais
2026-09-02 14:44 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 28/34] dmaengine: sf-pdma: route error callbacks through channel BH Allen Pais
2026-09-02 15:39 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 29/34] dmaengine: pl330: route callbacks via " Allen Pais
2026-09-02 15:40 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 30/34] dmaengine: altera-msgdma: use channel BH helpers Allen Pais
2026-09-01 22:31 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 31/34] dmaengine: dw: defer callbacks via channel BH Allen Pais
2026-08-11 10:51 ` Andy Shevchenko
2026-09-02 14:55 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 32/34] dmaengine: hidma: " Allen Pais
2026-09-02 15:47 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 33/34] dmaengine: qcom-gpi: defer callbacks via vchan Allen Pais
2026-09-01 22:30 ` Frank Li
2026-08-10 18:09 ` [PATCH v3 34/34] dmaengine: switchtec: use channel BH helpers Allen Pais
2026-09-02 15:35 ` Frank Li
2026-08-11 10:30 ` [PATCH v3 00/34] dmaengine: migrate channel tasklets to WQ_BH Andy Shevchenko
2026-08-11 10:50 ` Andy Shevchenko
2026-08-11 20:44 ` Allen
2026-08-12 7:24 ` Andy Shevchenko
2026-09-02 15:49 ` Frank Li
2026-10-18 21:16 ` Allen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7a557097-5dca-4c44-a48f-21dfa2659abc@app.fastmail.com \
--to=arnd@arndb.de \
--cc=allen.lkml@gmail.com \
--cc=dmaengine@vger.kernel.org \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®