From: sashiko-bot@kernel.org
To: Frank.Li@oss.nxp.com
Cc: imx@lists.linux.dev, Frank.Li@kernel.org, vkoul@kernel.org,
linux-pci@vger.kernel.org, dmaengine@vger.kernel.org
Subject: Re: [PATCH v5 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable()
Date: Thu, 09 Jul 2026 15:44:52 +0000 [thread overview]
Message-ID: <20260709154453.34D151F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709-edma_ll-v5-5-e199053d4300@nxp.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Multiple dmaengine control functions (resume, pause, terminate_all) modify channel state flags and access descriptor lists without holding the required virt-dma lock (`chan->vc.lock`).
--
--- Patch [5]: [PATCH v5 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable() ---
commit def5321a113246514770ebf2362c6bd5549dc443
Author: Frank Li <Frank.Li@nxp.com>
dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable()
Move the channel-enable logic into a new helper function,
dw_(edma|hdma)_v0_core_ch_enable(), in preparation for supporting dynamic
link entry additions. No functional changes.
> diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw-edma-v0-core.c
> index c341aa5343417..8d38867cd9983 100644
> --- a/drivers/dma/dw-edma/dw-edma-v0-core.c
> +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c
[ ... ]
> @@ -366,74 +427,11 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
> {
> struct dw_edma_chan *chan = chunk->chan;
> struct dw_edma *dw = chan->dw;
> - unsigned long flags;
> - u32 tmp;
>
> dw_edma_v0_core_write_chunk(chunk);
>
> - if (first) {
> - /* Enable engine */
> - SET_RW_32(dw, chan->dir, engine_en, BIT(0));
[Severity: High]
This isn't a bug introduced by this patch, but it appears multiple dmaengine
control functions (resume, pause, terminate_all) modify channel state flags
and access descriptor lists without holding the required virt-dma lock
(chan->vc.lock).
For example, dw_edma_start_transfer() (which ends up calling
dw_edma_v0_core_start()) is called locklessly from
drivers/dma/dw-edma/dw-edma-core.c:dw_edma_device_resume():
chan->status = EDMA_ST_BUSY;
dw_edma_start_transfer(chan);
Could calling dw_edma_start_transfer() locklessly here lead to list
corruption, use-after-free, or a kernel oops?
This function evaluates vchan_next_desc(&chan->vc) to inspect vc->desc_issued
and modifies desc->chunk->list via list_del():
drivers/dma/dw-edma/dw-edma-core.c:dw_edma_start_transfer() {
...
vd = vchan_next_desc(&chan->vc);
if (!vd)
return 0;
desc = vd2dw_edma_desc(vd);
...
list_del(&child->list);
...
}
Concurrently, dw_edma_done_interrupt() or dw_edma_device_issue_pending()
on another CPU can acquire chan->vc.lock and execute list updates. Modifying
and iterating these lists without holding the protecting vc.lock during
concurrent modification structurally leads to list corruption.
A similar lockless state modification happens in dw_edma_device_pause():
else
chan->request = EDMA_REQ_PAUSE;
And also in dw_edma_device_terminate_all():
else {
chan->request = EDMA_REQ_STOP;
}
Should these state updates and list accesses be protected by the virt-dma lock?
> - if (dw->chip->mf == EDMA_MF_HDMA_COMPAT) {
> - switch (chan->id) {
> - case 0:
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260709-edma_ll-v5-0-e199053d4300@nxp.com?part=5
next prev parent reply other threads:[~2026-07-09 15:44 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 15:33 [PATCH v5 00/10] dmaengine: dw-edma: flatten desc structions and simplify code Frank.Li
2026-07-09 15:33 ` [PATCH v5 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step Frank.Li
2026-07-09 15:44 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 02/10] dmaengine: dw-edma: Add xfer_sz field to struct dw_edma_chunk Frank.Li
2026-07-09 15:46 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 03/10] dmaengine: dw-edma: Move ll_region from struct dw_edma_chunk to struct dw_edma_chan Frank.Li
2026-07-09 15:45 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection Frank.Li
2026-07-09 15:39 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable() Frank.Li
2026-07-09 15:44 ` sashiko-bot [this message]
2026-07-09 15:33 ` [PATCH v5 06/10] dmaengine: dw-edma: Add callbacks to fill link list entries Frank.Li
2026-07-09 15:42 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 07/10] dmaengine: dw-edma: Add non_ll_start() callback Frank.Li
2026-07-09 15:50 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 08/10] dmaengine: dw-edma: Use common dw_edma_core_start() for both eDMA and HDMA Frank.Li
2026-07-09 15:46 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 09/10] dmaengine: dw-edma: Use burst array instead of linked list Frank.Li
2026-07-09 15:46 ` sashiko-bot
2026-07-09 15:33 ` [PATCH v5 10/10] dmaengine: dw-edma: Remove struct dw_edma_chunk Frank.Li
2026-07-09 15:53 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v5 00/10] dmaengine: dw-edma: flatten desc structions and simplify code Verma, Devendra
2026-07-10 16:50 ` Frank Li
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=20260709154453.34D151F000E9@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.