DMA Engine development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Benoît Monin" <benoit.monin@bootlin.com>
Cc: Frank.Li@kernel.org, vkoul@kernel.org, imx@lists.linux.dev,
	dmaengine@vger.kernel.org
Subject: Re: [PATCH v8 2/2] dmaengine: fsl-edma: Support dynamic scatter/gather chaining
Date: Mon, 03 Aug 2026 16:28:20 +0000	[thread overview]
Message-ID: <20260803162821.70BF31F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260803-fsl-edma-dyn-sg-v8-2-dc2b0317206d@bootlin.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] O(N^2) algorithmic complexity inside a spinlock during scatter-gather descriptor submission can cause severe IRQ latency.
--

--- Patch [2]: [PATCH v8 2/2] dmaengine: fsl-edma: Support dynamic scatter/gather chaining ---
commit f4efa8f669813b67983a5bf98e40939bbc5e00b4
Author: Benoît Monin <benoit.monin@bootlin.com>

dmaengine: fsl-edma: Support dynamic scatter/gather chaining

This commit implements dynamic linking of scatter/gather transfers to enable
chaining multiple DMA descriptors without stopping the channel. It adds
fsl_edma_link_sg() to dynamically link the last TCD of a previously issued
descriptor to the first TCD of a new descriptor.

> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
> index c5f5951c988be..189eb9d1269ea 100644
> --- a/drivers/dma/fsl-edma-common.c
> +++ b/drivers/dma/fsl-edma-common.c
[ ... ]
> @@ -931,14 +958,93 @@ void fsl_edma_xfer_desc(struct fsl_edma_chan *fsl_chan)
[ ... ]
> +static void fsl_edma_link_sg(struct fsl_edma_chan *fsl_chan, struct fsl_edma_desc *fsl_desc)
> +{
[ ... ]
> +	if (!(last_csr & EDMA_TCD_CSR_D_REQ) ||
> +	    last_csr & EDMA_TCD_CSR_E_LINK ||
> +	    list_count_nodes(&fsl_chan->vchan.desc_issued) >= FIELD_MAX(EDMA_TCD_CSR_LINKCH))
> +		return;

[Severity: High]
Could this list_count_nodes() call cause severe IRQ latency spikes?

list_count_nodes() unconditionally iterates over the entire list to compute
its length. If the list contains hundreds or thousands of nodes, it will
traverse all of them, well past the limit of 31 checked here.

[ ... ]
> @@ -949,7 +1055,12 @@ void fsl_edma_issue_pending(struct dma_chan *chan)
[ ... ]
> -	if (vchan_issue_pending(&fsl_chan->vchan) && !fsl_chan->edesc)
> +	list_for_each_entry_safe(vdesc, tmp, &fsl_chan->vchan.desc_submitted, node) {
> +		fsl_edma_link_sg(fsl_chan, to_fsl_edma_desc(vdesc));
> +		list_move_tail(&vdesc->node, &fsl_chan->vchan.desc_issued);
> +	}

Since fsl_edma_link_sg() is called here in a loop over desc_submitted, while
holding the vchan.lock spinlock with interrupts disabled, submitting a large
batch of N descriptors (e.g., from network or ALSA drivers) could result in
O(N^2) list node traversals. 

Could this heavily stall the CPU and potentially cause soft lockups?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260803-fsl-edma-dyn-sg-v8-0-dc2b0317206d@bootlin.com?part=2

  reply	other threads:[~2026-08-03 16:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-03 16:01 [PATCH v8 0/2] dmaengine: fsl-edma: Scatter/gather improvements Benoît Monin
2026-08-03 16:02 ` [PATCH v8 1/2] dmaengine: fsl-edma: Implement device_prep_peripheral_dma_vec Benoît Monin
2026-08-03 16:23   ` sashiko-bot
2026-08-03 16:02 ` [PATCH v8 2/2] dmaengine: fsl-edma: Support dynamic scatter/gather chaining Benoît Monin
2026-08-03 16:28   ` sashiko-bot [this message]
2026-08-04 22:06     ` Frank Li
2026-08-04 21:47   ` 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=20260803162821.70BF31F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=benoit.monin@bootlin.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=imx@lists.linux.dev \
    --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