All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: Frank.Li@oss.nxp.com
Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org,
	Frank.Li@kernel.org, imx@lists.linux.dev, vkoul@kernel.org
Subject: Re: [PATCH v6 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection
Date: Fri, 10 Jul 2026 16:56:40 +0000	[thread overview]
Message-ID: <20260710165640.C58E61F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260710-edma_ll-v6-4-1471d278b73a@nxp.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but there is a preexisting endianness bug in local DMA descriptor initialization for big-endian architectures, leading to memory corruption.
--

--- Patch [4]: [PATCH v6 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection ---
commit 8719a22bd4ff9eee44469b7d4192520551bd05a3
Author: Frank Li <Frank.Li@nxp.com>

    dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection
    
    Some helper functions do not use any information from dw_edma_chunk, so
    passing a dw_edma_chan pointer directly avoids an unnecessary level of
    pointer dereferencing and simplifies data access.

> diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw-edma-v0-core.c
> index 51e50f1fdcac4..c341aa5343417 100644
> --- a/drivers/dma/dw-edma/dw-edma-v0-core.c
> +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c
> @@ -276,13 +276,12 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq, enum dw_edma_dir dir,
>  	return ret;
>  }
>  
> -static void dw_edma_v0_write_ll_data(struct dw_edma_chunk *chunk, int i,
> +static void dw_edma_v0_write_ll_data(struct dw_edma_chan *chan, int i,
>  				     u32 control, u32 size, u64 sar, u64 dar)
>  {
>  	ptrdiff_t ofs = i * sizeof(struct dw_edma_v0_lli);
> -	struct dw_edma_chan *chan = chunk->chan;
>  
> -	if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) {
> +	if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) {
>  		struct dw_edma_v0_lli *lli = chan->ll_region.vaddr.mem + ofs;
>  
>  		lli->transfer_size = size;

[Severity: High]
This problem wasn't introduced by this patch, but there is a preexisting
endianness bug in local DMA descriptor initialization for big-endian
architectures here.

Since the hardware expects little-endian values, does assigning native CPU
values directly to the memory-mapped descriptor structs in the local path
corrupt the DMA layout on big-endian CPUs?

The non-local path correctly uses writel() and writeq() which perform
implicit CPU-to-LE conversions, but writing 64-bit values natively to the
reg union member places the most-significant bits into the lsb field on
big-endian systems:

dw_edma_v0_write_ll_data() {
    ...
    if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) {
        ...
        lli->transfer_size = size;
        lli->sar.reg = sar;
        lli->dar.reg = dar;
        dma_wmb();
        lli->control = control;
    ...
}

This could cause the DMA controller to read mangled addresses and swapped
transfer sizes, potentially leading to memory corruption.

The same pattern appears to be present in dw_edma_v0_write_ll_link(),
dw_hdma_v0_write_ll_data(), and dw_hdma_v0_write_ll_link().

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260710-edma_ll-v6-0-1471d278b73a@nxp.com?part=4

  reply	other threads:[~2026-07-10 16:56 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 16:47 [PATCH v6 00/10] dmaengine: dw-edma: flatten desc structions and simplify code Frank.Li
2026-07-10 16:47 ` [PATCH v6 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step Frank.Li
2026-07-10 16:57   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 02/10] dmaengine: dw-edma: Add xfer_sz field to struct dw_edma_chunk Frank.Li
2026-07-10 16:56   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 03/10] dmaengine: dw-edma: Move ll_region from struct dw_edma_chunk to struct dw_edma_chan Frank.Li
2026-07-10 17:05   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection Frank.Li
2026-07-10 16:56   ` sashiko-bot [this message]
2026-07-10 16:47 ` [PATCH v6 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable() Frank.Li
2026-07-10 16:56   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 06/10] dmaengine: dw-edma: Add callbacks to fill link list entries Frank.Li
2026-07-10 16:59   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 07/10] dmaengine: dw-edma: Add non_ll_start() callback Frank.Li
2026-07-10 17:04   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 08/10] dmaengine: dw-edma: Use common dw_edma_core_start() for both eDMA and HDMA Frank.Li
2026-07-10 17:03   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 09/10] dmaengine: dw-edma: Use burst array instead of linked list Frank.Li
2026-07-10 17:07   ` sashiko-bot
2026-07-10 16:47 ` [PATCH v6 10/10] dmaengine: dw-edma: Remove struct dw_edma_chunk Frank.Li
2026-07-10 17:08   ` sashiko-bot
2026-07-10 17:23 ` [PATCH v6 00/10] dmaengine: dw-edma: flatten desc structions and simplify code Verma, Devendra
2026-07-10 17:28 ` Verma, Devendra

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=20260710165640.C58E61F000E9@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.