All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Srinivas Neeli" <srinivas.neeli@amd.com>
Cc: Frank.Li@kernel.org, vkoul@kernel.org, dmaengine@vger.kernel.org
Subject: Re: [PATCH V6 2/4] dmaengine: xilinx_dma: Move descriptors to done list based on completion bit
Date: Wed, 19 Aug 2026 17:47:18 +0000	[thread overview]
Message-ID: <20260819174718.892A91F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260818174151.1608971-3-srinivas.neeli@amd.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Unconditional transition to `chan->idle = true` while `active_list` is not empty causes a permanent DMA stall and unsafe writes to active hardware registers.
- [High] Missing `dma_rmb()` after reading the hardware descriptor completion bit allows speculative reads of stale descriptor fields.
--

--- Patch [2]: [PATCH V6 2/4] dmaengine: xilinx_dma: Move descriptors to done list based on completion bit ---
commit f3afd1d99816a230e330fe49141913c537fd8bc9
Author: Srinivas Neeli <srinivas.neeli@amd.com>

dmaengine: xilinx_dma: Move descriptors to done list based on completion bit

This commit updates the descriptor completion logic to check the completion
bit before moving MCDMA descriptors from the active list to the done list.
This addresses an issue where interrupt coalescing could cause uncompleted
descriptors to be erroneously reported as complete.

> diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
> index 965fb69a2a3ad..9b8b6f1acd4ea 100644
> --- a/drivers/dma/xilinx/xilinx_dma.c
> +++ b/drivers/dma/xilinx/xilinx_dma.c
> @@ -1773,6 +1773,17 @@ static void xilinx_dma_complete_descriptor(struct xilinx_dma_chan *chan)
>  					      struct xilinx_axidma_tx_segment, node);
>  			if (!(seg->hw.status & XILINX_DMA_BD_COMP_MASK) && chan->has_sg)
>  				break;
> +		} else if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIMCDMA) {
> +			struct xilinx_aximcdma_tx_segment *seg;
> +			u32 status;
> +
> +			seg = list_last_entry(&desc->segments,
> +					      struct xilinx_aximcdma_tx_segment,
> +					      node);
> +			status = (chan->direction == DMA_DEV_TO_MEM) ?
> +				seg->hw.s2mm_status : seg->hw.mm2s_status;
> +			if (!(status & XILINX_DMA_BD_COMP_MASK))
> +				break;

[Severity: High]
If this breaks early and leaves uncompleted descriptors in the active list, does
it cause issues with the interrupt handler?

Looking at xilinx_mcdma_irq_handler(), it unconditionally calls
start_transfer():

	xilinx_dma_complete_descriptor(chan);
	chan->idle = true;
	chan->start_transfer(chan);

If xilinx_mcdma_start_transfer() is called while the DMA is still actively
processing the old chain, it will write the new descriptor chain to the CDESC
register:

	/* Program current descriptor */
	xilinx_write(chan, XILINX_MCDMA_CHAN_CDESC_OFFSET(chan->tdest),
		     head_desc->async_tx.phys);

Could writing to the CDESC register while the channel is still running cause a
permanent DMA stall or corrupt the hardware state?

[Severity: High]
Is a read memory barrier needed after reading the hardware descriptor
completion bit?

If the completion mask is set, the code may proceed to calculate the transfer
residue in xilinx_dma_get_residue():

	residue -= aximcdma_hw->s2mm_status & chan->xdev->max_buffer_len;

Without a dma_rmb() between checking the completion bit and reading the
preceding segments' status fields, is it possible for weakly ordered
architectures to speculatively read stale values, leading to incorrect
residue calculations?

>  		}
>  		if (chan->has_sg && chan->xdev->dma_config->dmatype !=
>  		    XDMA_TYPE_VDMA)

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260818174151.1608971-1-srinivas.neeli@amd.com?part=2

  parent reply	other threads:[~2026-08-19 17:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-18 17:41 [PATCH V6 0/4] dmaengine: xilinx_dma: MCDMA descriptor and metadata handling improvements Srinivas Neeli
2026-08-18 17:41 ` [PATCH V6 1/4] dmaengine: xilinx_dma: Fix MCDMA descriptor fields based on DMA direction Srinivas Neeli
2026-08-18 18:57   ` Frank Li
2026-08-19 17:47   ` sashiko-bot
2026-08-18 17:41 ` [PATCH V6 2/4] dmaengine: xilinx_dma: Move descriptors to done list based on completion bit Srinivas Neeli
2026-08-18 19:05   ` Frank Li
2026-08-19 17:47   ` sashiko-bot [this message]
2026-08-18 17:41 ` [PATCH V6 3/4] net: xilinx: axienet: Derive RX frame length from residue in dmaengine path Srinivas Neeli
2026-08-19 17:47   ` sashiko-bot
2026-08-18 17:41 ` [PATCH V6 4/4] dmaengine: xilinx_dma: Extend metadata handling for AXI DMA and MCDMA Srinivas Neeli
2026-08-18 19:15   ` 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=20260819174718.892A91F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=dmaengine@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=srinivas.neeli@amd.com \
    --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.