All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Sai Sree Kartheek Adivi" <s-adivi@ti.com>
Cc: vkoul@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org,
	devicetree@vger.kernel.org, robh@kernel.org,
	dmaengine@vger.kernel.org
Subject: Re: [PATCH v10 16/19] dmaengine: ti: k3-udma-v2: New driver for K3 BCDMA_V2
Date: Mon, 28 Sep 2026 03:26:51 +0000	[thread overview]
Message-ID: <20260928032652.120051F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260928025749.1055383-17-s-adivi@ti.com>

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Critical] dmaengine: ti: kernel panic due to double descriptor completion
- [High] dmaengine: ti: descriptor memory leak on autopair timeout
- [Medium] kconfig: TI_K3_UDMA_V2 selects TI_K3_RINGACC without inheriting dependencies
- [Medium] dmaengine: ti: code contradicts commit message regarding PEER registers
--

commit d73848739c5384bf6614c47a767d4ef7e89a8626
Author: Sai Sree Kartheek Adivi <s-adivi@ti.com>

    dmaengine: ti: k3-udma-v2: New driver for K3 BCDMA_V2
    
    Add support for BCDMA_V2.
    
    The BCDMA_V2 is different than the existing BCDMA supported by the
    k3-udma driver.

> diff --git a/drivers/dma/ti/Kconfig b/drivers/dma/ti/Kconfig
> --- a/drivers/dma/ti/Kconfig
> +++ b/drivers/dma/ti/Kconfig
[ ... ]
> @@ -49,6 +49,18 @@ config TI_K3_UDMA
>  	  Enable support for the TI UDMA (Unified DMA) controller. This
>  	  DMA engine is used in AM65x and j721e.
>  
> +config TI_K3_UDMA_V2
> +	tristate "Texas Instruments K3 UDMA v2 support"
> +	depends on ARCH_K3
> +	select DMA_ENGINE
> +	select DMA_VIRTUAL_CHANNELS
> +	select TI_K3_UDMA_COMMON
> +	select TI_K3_RINGACC

[Severity: Medium]
Is this select missing a dependency? Enabling TI_K3_UDMA_V2 selects
TI_K3_RINGACC, but omits TI_SCI_INTA_IRQCHIP which is required by
TI_K3_RINGACC. Could this cause unmet dependency warnings or build failures
during configuration?

> +	select TI_K3_PSIL
> +        help
> +	  Enable support for the TI UDMA (Unified DMA) v2 controller. This
> +	  DMA engine is used in AM62L.
> +
>  config TI_K3_UDMA_COMMON
>  	tristate
>  
> diff --git a/drivers/dma/ti/k3-udma-v2.c b/drivers/dma/ti/k3-udma-v2.c
> new file mode 100644
> --- /dev/null
> +++ b/drivers/dma/ti/k3-udma-v2.c
[ ... ]
> +static int udma_v2_start(struct udma_chan *uc)
> +{
[ ... ]
> +		udma_chanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
> +				  UDMA_CHAN_RT_CTL_EN | UDMA_CHAN_RT_CTL_AUTOPAIR);
> +
> +		/* Poll for autopair completion */
> +		read_poll_timeout_atomic(udma_v2_check_chan_autopair_completion,
> +					 status, status != 0, 100, 500, false, uc);
> +
> +		if (status <= 0) {
> +			udma_chanrt_write(uc, UDMA_CHAN_RT_CTL_REG, 0);
> +			return -ETIMEDOUT;
> +		}

[Severity: High]
What happens to the DMA descriptor if udma_v2_start() times out and returns
-ETIMEDOUT here? The caller, udma_issue_pending(), ignores the return value,
leaving the descriptor assigned to uc->desc and pushed to the hardware ring.
Since the channel is disabled, no completion interrupt will fire to free
uc->terminated_desc. It looks like this might lead to a permanent memory
leak.

[ ... ]
> +static int udma_v2_stop(struct udma_chan *uc)
> +{
> +	uc->state = UDMA_CHAN_IS_TERMINATING;
> +	reinit_completion(&uc->teardown_completed);
> +
> +	if (uc->config.dir == DMA_DEV_TO_MEM) {
> +		if (!uc->cyclic && !uc->desc)
> +			udma_push_to_ring(uc, -1);
> +	}
> +
> +	if (uc->config.dir != DMA_MEM_TO_MEM)
> +		udma_chanrt_write(uc, UDMA_CHAN_RT_PEER_REG(8), UDMA_CHAN_RT_PEER_REG8_FLUSH);

[Severity: Medium]
The commit message states there is "no need to write to PEER registers",
but this code explicitly writes a flush command to UDMA_CHAN_RT_PEER_REG(8)
during teardown. Are there certain cases where writing to the PEER register
is still required for this hardware?

> +
> +	udma_chanrt_update_bits(uc, UDMA_CHAN_RT_CTL_REG,
> +				UDMA_CHAN_RT_CTL_EN | UDMA_CHAN_RT_CTL_TDOWN,
> +				UDMA_CHAN_RT_CTL_EN | UDMA_CHAN_RT_CTL_TDOWN);
> +
> +	return 0;
> +}
[ ... ]
> +static irqreturn_t udma_v2_ring_irq_handler(int irq, void *data)
> +{
[ ... ]
> +	if (intr_status & K3_RINGACC_RT_INT_STATUS_TR) {
> +		reg = udma_chanrt_read(uc, UDMA_CHAN_RT_CTL_REG);
> +
> +		/* check teardown status */
> +		if ((reg & UDMA_CHAN_RT_CTL_TDOWN) && !(reg & UDMA_CHAN_RT_CTL_EN))
> +			complete_all(&uc->teardown_completed);
> +		udma_v2_udma_irq_handler(irq, data);
> +		tr_handled = true;
> +
> +		if (!(intr_status & K3_RINGACC_RT_INT_STATUS_COMPLETE))
> +			return IRQ_HANDLED;
> +	}
> +
> +	if (udma_pop_from_ring(uc, &paddr) || !paddr)
> +		return tr_handled ? IRQ_HANDLED : IRQ_NONE;
> +
> +	spin_lock(&uc->vc.lock);
> +
> +	/* Teardown completion message */
> +	if (cppi5_desc_is_tdcm(paddr)) {
[ ... ]
> +	d = udma_udma_desc_from_paddr(uc, paddr);
> +
> +	if (d) {
> +		dma_addr_t desc_paddr = udma_curr_cppi5_desc_paddr(d,
> +								   d->desc_idx);
[ ... ]
> +		if (d == uc->desc) {
[ ... ]
> +		} else {
> +			/*
> +			 * terminated descriptor, mark the descriptor as
> +			 * completed to update the channel's cookie marker
> +			 */
> +			dma_cookie_complete(&d->vd.tx);
> +		}

[Severity: Critical]
Is it possible for this interrupt handler to complete the same descriptor
twice and cause a kernel panic?

If intr_status has both the K3_RINGACC_RT_INT_STATUS_TR and
K3_RINGACC_RT_INT_STATUS_COMPLETE bits set, the handler processes the TR
event and completes the descriptor via udma_v2_udma_irq_handler(), which
zeroes its cookie.

Because K3_RINGACC_RT_INT_STATUS_COMPLETE is also set, the handler does
not return early. It falls through to the completion handling branch below,
completing the descriptor a second time and potentially triggering a BUG_ON
in dma_cookie_complete() because the cookie is now less than
DMA_MIN_COOKIE.

[ ... ]
> +static struct platform_driver bcdma_v2_driver = {
> +	.driver = {
> +		.name	= "ti-udma-v2",
> +		.of_match_table = udma_of_match,
> +		.suppress_bind_attrs = true,
> +		.pm = &udma_pm_ops,
> +	},
> +	.probe		= udma_v2_probe,
> +};

[Severity: High]
This is a pre-existing issue, but this platform driver lacks a .remove
callback. Because dma_async_device_register() is used without being managed
by devres, unloading the module leaves the DMA engine registered while the
underlying devm structures are freed. Might this lead to a use-after-free
if the module is unloaded?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260928025749.1055383-1-s-adivi@ti.com?part=16

  reply	other threads:[~2026-09-28  3:26 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-28  2:56 [PATCH v10 00/19] dmaengine: ti: Add support for BCDMA v2 and PKTDMA v2 Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 01/19] dmaengine: ti: k3-udma: Fix sporadic crash on AM62x Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 02/19] dmaengine: ti: k3-udma: move macros to header file Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 03/19] dmaengine: ti: k3-udma: move structs and enums " Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 04/19] dmaengine: ti: k3-udma: move static inline helper functions " Sai Sree Kartheek Adivi
2026-09-28  3:12   ` sashiko-bot
2026-09-28  2:56 ` [PATCH v10 05/19] dmaengine: ti: k3-udma: move descriptor management to k3-udma-common.c Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 06/19] dmaengine: ti: k3-udma: move ring management functions " Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 07/19] dmaengine: ti: k3-udma: Add variant-specific function pointers to udma_dev Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 08/19] dmaengine: ti: k3-udma: move udma utility functions to k3-udma-common.c Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 09/19] dmaengine: ti: k3-udma: move resource management " Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 10/19] dmaengine: ti: k3-udma: refactor resource setup functions Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 11/19] dmaengine: ti: k3-udma: move inclusion of k3-udma-private.c to k3-udma-common.c Sai Sree Kartheek Adivi
2026-09-28  3:13   ` sashiko-bot
2026-09-28  2:56 ` [PATCH v10 12/19] drivers: soc: ti: k3-ringacc: handle absence of tisci Sai Sree Kartheek Adivi
2026-09-28  3:15   ` sashiko-bot
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 13/19] dt-bindings: dma: ti: Add K3 BCDMA V2 Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 14/19] dt-bindings: dma: ti: Add K3 PKTDMA V2 Sai Sree Kartheek Adivi
2026-09-30 10:22   ` Krzysztof Kozlowski
2026-09-28  2:56 ` [PATCH v10 15/19] dmaengine: ti: k3-psil-am62l: Add AM62Lx PSIL and PDMA data Sai Sree Kartheek Adivi
2026-09-28  3:18   ` sashiko-bot
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 16/19] dmaengine: ti: k3-udma-v2: New driver for K3 BCDMA_V2 Sai Sree Kartheek Adivi
2026-09-28  3:26   ` sashiko-bot [this message]
2026-09-28  8:39   ` Vignesh Raghavendra
2026-09-28  2:56 ` [PATCH v10 17/19] dmaengine: ti: k3-udma-v2: Add support for PKTDMA V2 Sai Sree Kartheek Adivi
2026-09-28  3:21   ` sashiko-bot
2026-09-28  8:39   ` Vignesh Raghavendra
2026-10-01  7:17     ` Sai Sree Kartheek Adivi
2026-09-28  2:56 ` [PATCH v10 18/19] dmaengine: ti: k3-udma-v2: Update glue layer to support " Sai Sree Kartheek Adivi
2026-09-28  3:17   ` sashiko-bot
2026-09-28  2:56 ` [PATCH v10 19/19] dmaengine: ti: k3-udma: Validate resource ID and fix logging in reservation Sai Sree Kartheek Adivi
2026-09-28  8:39   ` Vignesh Raghavendra

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=20260928032652.120051F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmaengine@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=s-adivi@ti.com \
    --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.