From: sashiko-bot@kernel.org
To: Frank.Li@oss.nxp.com
Cc: Frank.Li@kernel.org, linux-pci@vger.kernel.org,
imx@lists.linux.dev, dmaengine@vger.kernel.org, vkoul@kernel.org
Subject: Re: [PATCH v4 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step
Date: Wed, 08 Jul 2026 18:47:21 +0000 [thread overview]
Message-ID: <20260708184721.925E81F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260708-edma_ll-v4-1-cc128f0afb61@nxp.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The lockless update to the `control` field in the local DMA descriptor is vulnerable to compiler tearing due to the `__packed` attribute, undermining the hardware synchronization intended by this patch.
--
--- Patch [1]: [PATCH v4 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step ---
commit baf2c8f9cfe7a0520e9aa385d467515afdd0b585
Author: Frank Li <Frank.Li@nxp.com>
dmaengine: dw-edma: Move control field update of DMA link to the last step
This commit modifies the initialization order of DMA link list entries
so that the control field, which includes the ready bit, is written last
after a dma_wmb(). This prepares the driver to support updating link
entries while the DMA is actively running.
> diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw-edma-v0-core.c
> index cfdd6463252e6..ee5c3c317557b 100644
> --- a/drivers/dma/dw-edma/dw-edma-v0-core.c
> +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c
> @@ -284,17 +284,18 @@ static void dw_edma_v0_write_ll_data(struct dw_edma_chunk *chunk, int i,
> if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) {
> struct dw_edma_v0_lli *lli = chunk->ll_region.vaddr.mem + ofs;
>
> - lli->control = control;
> lli->transfer_size = size;
> lli->sar.reg = sar;
> lli->dar.reg = dar;
> + dma_wmb();
> + lli->control = control;
[Severity: Medium]
Since struct dw_edma_v0_lli is marked as __packed, is it possible for the
compiler to tear this lli->control assignment into multiple byte-sized
stores on some architectures with strict alignment rules?
If the DMA engine is running and observes a torn write, it could read a
partially updated control word. While the commit message notes concurrent
updates aren't enabled yet, would using WRITE_ONCE() (along with any
necessary casting to avoid packed-member warnings) ensure this
synchronization flag is written indivisibly once concurrent hardware access
is enabled?
[ ... ]
> @@ -306,13 +307,14 @@ static void dw_edma_v0_write_ll_link(struct dw_edma_chunk *chunk,
> if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) {
> struct dw_edma_v0_llp *llp = chunk->ll_region.vaddr.mem + ofs;
>
> - llp->control = control;
> llp->llp.reg = pointer;
> + dma_wmb();
> + llp->control = control;
[Severity: Medium]
Does this llp->control assignment have the same tearing vulnerability
due to struct dw_edma_v0_llp being __packed?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260708-edma_ll-v4-0-cc128f0afb61@nxp.com?part=1
next prev parent reply other threads:[~2026-07-08 18:47 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 18:35 [PATCH v4 00/10] dmaengine: dw-edma: flatten desc structions and simple code Frank.Li
2026-07-08 18:35 ` [PATCH v4 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step Frank.Li
2026-07-08 18:47 ` sashiko-bot [this message]
2026-07-08 18:35 ` [PATCH v4 02/10] dmaengine: dw-edma: Add xfer_sz field to struct dw_edma_chunk Frank.Li
2026-07-08 18:49 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 03/10] dmaengine: dw-edma: Move ll_region from struct dw_edma_chunk to struct dw_edma_chan Frank.Li
2026-07-08 18:46 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection Frank.Li
2026-07-08 18:44 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable() Frank.Li
2026-07-08 18:40 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 06/10] dmaengine: dw-edma: Add callbacks to fill link list entries Frank.Li
2026-07-08 18:51 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 07/10] dmaengine: dw-edma: Add non_ll_start() callback Frank.Li
2026-07-08 18:49 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 08/10] dmaengine: dw-edma: Use common dw_edma_core_start() for both eDMA and HDMA Frank.Li
2026-07-08 18:56 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 09/10] dmaengine: dw-edma: Use burst array instead of linked list Frank.Li
2026-07-08 18:49 ` sashiko-bot
2026-07-08 18:35 ` [PATCH v4 10/10] dmaengine: dw-edma: Remove struct dw_edma_chunk Frank.Li
2026-07-08 18:47 ` sashiko-bot
2026-07-09 11:33 ` [PATCH v4 00/10] dmaengine: dw-edma: flatten desc structions and simple code Markus Elfring
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=20260708184721.925E81F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=Frank.Li@oss.nxp.com \
--cc=dmaengine@vger.kernel.org \
--cc=imx@lists.linux.dev \
--cc=linux-pci@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--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