All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudiu Beznea <claudiu.beznea@kernel.org>
To: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>,
	vkoul@kernel.org, Frank.Li@kernel.org, lgirdwood@gmail.com,
	broonie@kernel.org, perex@perex.cz, tiwai@suse.com,
	biju.das.jz@bp.renesas.com,
	prabhakar.mahadev-lad.rj@bp.renesas.com, p.zabel@pengutronix.de,
	geert+renesas@glider.be, fabrizio.castro.jz@renesas.com,
	kuninori.morimoto.gx@renesas.com, long.luu.ur@renesas.com
Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Subject: sashiko review (Re: [PATCH v5 13/17] dmaengine: sh: rz-dmac: Add runtime PM support)
Date: Mon, 25 May 2026 10:30:37 +0300	[thread overview]
Message-ID: <cd75b429-3259-456d-9551-272fe32780c0@kernel.org> (raw)
In-Reply-To: <20260512121219.216159-14-claudiu.beznea.uj@bp.renesas.com>

 >commit 537bc713380d43d1dfa0d61269accb53a834436d
 >Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
 >dmaengine: sh: rz-dmac: Add runtime PM support
 >This commit protects driver exposed APIs with runtime PM suspend/resume
 >calls before accessing HW registers. The changes avoid accessing HW
 >registers after a failed system suspend leaves the runtime PM state
 >improperly reinitialized, preparing the driver for suspend-to-RAM support.
 >> diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c
 >> index d6ad070be705c..df91657fd5e3d 100644
 >> --- a/drivers/dma/sh/rz-dmac.c
 >> +++ b/drivers/dma/sh/rz-dmac.c
 >> @@ -488,7 +488,15 @@ static void rz_dmac_prepare_descs_for_cyclic(struct 
rz_dmac_chan *channel)
 >>
 >>  static void rz_dmac_xfer_desc(struct rz_dmac_chan *chan)
 >>  {
 >> +    struct dma_chan *ch = &chan->vc.chan;
 >> +    struct rz_dmac *dmac = to_rz_dmac(ch->device);
 >>      struct virt_dma_desc *vd;
 >> +    int ret;
 >> +
 >> +    PM_RUNTIME_ACQUIRE_IF_ENABLED(dmac->dev, pm);
 >> +    ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
 >> +    if (ret)
 >> +            return;
 >Does this return early without pulling the descriptor from the queue? If PM
 >acquisition fails, it seems the descriptor is left permanently stranded on the
 >virtual channel's issued list, and the channel queue could silently stall.

The rz_dmac_xfer_desc() is called dma_async_issue_pending() or after each 
descriptor is completed. The documentation of dma_async_issue_pending states:

/**
  * dma_async_issue_pending - flush pending transactions to HW
  * @chan: target DMA channel
  *
  * This allows drivers to push copies to HW in batches,
  * reducing MMIO writes where possible.
  */

Thus, I'm not sure we should free the descriptors on this path. I think that's 
the scope of ->device_terminate_all() and ->device_free_chan_resources()

 >[ ... ]
 >> @@ -549,6 +557,12 @@ static void rz_dmac_free_chan_resources(struct dma_chan 
*chan)
 >>      struct rz_dmac *dmac = to_rz_dmac(chan->device);
 >>      struct rz_dmac_desc *desc, *_desc;
 >>      unsigned long flags;
 >> +    int ret;
 >> +
 >> +    PM_RUNTIME_ACQUIRE_IF_ENABLED(dmac->dev, pm);
 >> +    ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
 >> +    if (ret)
 >> +            return;
 >If the runtime PM acquisition fails, does returning early bypass all subsequent
 >software state cleanup like vchan_free_chan_resources() and freeing allocated
 >DMA descriptors? Even if the hardware cannot be accessed, shouldn't the
 >software-allocated resources still be freed to avoid memory leaks?

I'll adjust it like this.

 >[ ... ]
 >> @@ -697,8 +711,15 @@ rz_dmac_prep_dma_cyclic(struct dma_chan *chan, 
dma_addr_t buf_addr,
 >>  static int rz_dmac_terminate_all(struct dma_chan *chan)
 >>  {
 >>      struct rz_dmac_chan *channel = to_rz_dmac_chan(chan);
 >> +    struct rz_dmac *dmac = to_rz_dmac(chan->device);
 >>      unsigned long flags;
 >>      LIST_HEAD(head);
 >> +    int ret;
 >> +
 >> +    PM_RUNTIME_ACQUIRE_IF_ENABLED(dmac->dev, pm);
 >> +    ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
 >> +    if (ret)
 >> +            return ret;
 >Similarly, does returning early here skip clearing the virt-dma lists? Failing
 >to do so could leave orphaned descriptors active, which might lead to
 >use-after-free issues when the client subsequently frees its DMA buffers.

I'll adjust it.

 >[ ... ]
 >> @@ -909,8 +935,15 @@ static enum dma_status rz_dmac_tx_status(struct 
dma_chan *chan,
 >>                                       struct dma_tx_state *txstate)
 >>  {
 >>      struct rz_dmac_chan *channel = to_rz_dmac_chan(chan);
 >> +    struct rz_dmac *dmac = to_rz_dmac(chan->device);
 >>      enum dma_status status;
 >>      u32 residue;
 >> +    int ret;
 >> +
 >> +    PM_RUNTIME_ACQUIRE_IF_ENABLED(dmac->dev, pm);
 >> +    ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
 >> +    if (ret)
 >> +            return ret;
 >Is it valid to return a negative integer error code directly as an
 >enum dma_status? Client drivers might check the status against specific
 >enumeration constants like DMA_ERROR, and could fail to recognize this
 >raw error code.

Indeed, I'll adjust it.

 >Also, does this add unnecessary PM locking overhead on the hot path for
 >software-only status queries? Since dma_cookie_status() might resolve the
 >status entirely in software, and hardware residue is only queried if the
 >status is DMA_IN_PROGRESS and txstate is not NULL, could the PM acquisition
 >be deferred until after verifying that reading the hardware residue is
 >actually necessary?

This will be adjusted as well.

  parent reply	other threads:[~2026-05-25  7:30 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 12:12 [PATCH v5 00/17] Renesas: dmaengine and ASoC fixes Claudiu Beznea
2026-05-12 12:12 ` [PATCH v5 01/17] dmaengine: sh: rz-dmac: Move interrupt request after everything is set up Claudiu Beznea
2026-05-12 20:28   ` Frank Li
2026-05-13 21:44   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 02/17] dmaengine: sh: rz-dmac: Fix incorrect NULL check on list_first_entry() Claudiu Beznea
2026-05-12 20:35   ` Frank Li
2026-05-13 13:31     ` Claudiu Beznea
2026-05-13 22:00   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 03/17] dmaengine: sh: rz-dmac: Use list_first_entry_or_null() Claudiu Beznea
2026-05-12 20:38   ` Frank Li
2026-05-13 22:18   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 04/17] dmaengine: sh: rz-dmac: Use rz_dmac_disable_hw() Claudiu Beznea
2026-05-12 20:42   ` Frank Li
2026-05-12 12:12 ` [PATCH v5 05/17] dmaengine: sh: rz-dmac: Add helper to compute the lmdesc address Claudiu Beznea
2026-05-12 20:44   ` Frank Li
2026-05-12 12:12 ` [PATCH v5 06/17] dmaengine: sh: rz-dmac: Save the start LM descriptor Claudiu Beznea
2026-05-12 20:48   ` Frank Li
2026-05-13 13:33     ` Claudiu Beznea
2026-05-13 23:52   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 07/17] dmaengine: sh: rz-dmac: Add helper to check if the channel is enabled Claudiu Beznea
2026-05-12 20:49   ` Frank Li
2026-05-13 23:59   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 08/17] dmaengine: sh: rz-dmac: Add helper to check if the channel is paused Claudiu Beznea
2026-05-12 20:57   ` Frank Li
2026-05-12 12:12 ` [PATCH v5 09/17] dmaengine: sh: rz-dmac: Use virt-dma APIs for channel descriptor processing Claudiu Beznea
2026-05-12 21:38   ` Frank Li
2026-05-13 13:34     ` Claudiu Beznea
2026-05-14  0:42   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 10/17] dmaengine: sh: rz-dmac: Refactor pause/resume code Claudiu Beznea
2026-05-12 21:43   ` Frank Li
2026-05-13 13:35     ` Claudiu Beznea
2026-05-14  0:57   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 11/17] dmaengine: sh: rz-dmac: Drop the update of channel->chctrl with CHCTRL_SETEN Claudiu Beznea
2026-05-12 21:55   ` Frank Li
2026-05-12 12:12 ` [PATCH v5 12/17] dmaengine: sh: rz-dmac: Add cyclic DMA support Claudiu Beznea
2026-05-12 22:00   ` Frank Li
2026-05-13 13:38     ` Claudiu Beznea
2026-05-14  1:43   ` sashiko-bot
2026-05-25  7:28   ` sashiko review (Re: [PATCH v5 12/17] dmaengine: sh: rz-dmac: Add cyclic DMA support) Claudiu Beznea
2026-05-12 12:12 ` [PATCH v5 13/17] dmaengine: sh: rz-dmac: Add runtime PM support Claudiu Beznea
2026-05-12 22:03   ` Frank Li
2026-05-13 13:39     ` Claudiu Beznea
2026-05-13 19:56       ` Frank Li
2026-05-14  9:20         ` Claudiu Beznea
2026-05-14  2:08   ` sashiko-bot
2026-05-25  7:30   ` Claudiu Beznea [this message]
2026-05-12 12:12 ` [PATCH v5 14/17] dmaengine: sh: rz-dmac: Add suspend to RAM support Claudiu Beznea
2026-05-14  3:04   ` sashiko-bot
2026-05-25  7:33   ` sashiko review (Re: [PATCH v5 14/17] dmaengine: sh: rz-dmac: Add suspend to RAM support) Claudiu Beznea
2026-05-12 12:12 ` [PATCH v5 15/17] ASoC: renesas: rz-ssi: Add pause support Claudiu Beznea
2026-05-14  3:54   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 16/17] ASoC: renesas: rz-ssi: Use generic PCM dmaengine APIs Claudiu Beznea
2026-05-14  4:52   ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 17/17] dmaengine: sh: rz-dmac: Set the Link End (LE) bit on the last descriptor Claudiu Beznea
2026-05-14  5:22   ` sashiko-bot
2026-05-15  8:44 ` [PATCH v5 00/17] Renesas: dmaengine and ASoC fixes John Madieu

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=cd75b429-3259-456d-9551-272fe32780c0@kernel.org \
    --to=claudiu.beznea@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=broonie@kernel.org \
    --cc=claudiu.beznea.uj@bp.renesas.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=fabrizio.castro.jz@renesas.com \
    --cc=geert+renesas@glider.be \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=long.luu.ur@renesas.com \
    --cc=p.zabel@pengutronix.de \
    --cc=perex@perex.cz \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
    --cc=tiwai@suse.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.