Make sure to drop the reference taken when looking up the ICU device during probe also on probe failures (e.g. probe deferral).
Fixes: 7de873201c44 ("dmaengine: sh: rz-dmac: Add RZ/V2H(P) support") Cc: stable@vger.kernel.org # 6.16 Cc: Fabrizio Castro fabrizio.castro.jz@renesas.com Signed-off-by: Johan Hovold johan@kernel.org --- drivers/dma/sh/rz-dmac.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c index 1f687b08d6b8..38137e8d80b9 100644 --- a/drivers/dma/sh/rz-dmac.c +++ b/drivers/dma/sh/rz-dmac.c @@ -854,6 +854,13 @@ static int rz_dmac_chan_probe(struct rz_dmac *dmac, return 0; }
+static void rz_dmac_put_device(void *_dev) +{ + struct device *dev = _dev; + + put_device(dev); +} + static int rz_dmac_parse_of_icu(struct device *dev, struct rz_dmac *dmac) { struct device_node *np = dev->of_node; @@ -876,6 +883,10 @@ static int rz_dmac_parse_of_icu(struct device *dev, struct rz_dmac *dmac) return -ENODEV; }
+ ret = devm_add_action_or_reset(dev, rz_dmac_put_device, &dmac->icu.pdev->dev); + if (ret) + return ret; + dmac_index = args.args[0]; if (dmac_index > RZV2H_MAX_DMAC_INDEX) { dev_err(dev, "DMAC index %u invalid.\n", dmac_index); @@ -1055,8 +1066,6 @@ static void rz_dmac_remove(struct platform_device *pdev) reset_control_assert(dmac->rstc); pm_runtime_put(&pdev->dev); pm_runtime_disable(&pdev->dev); - - platform_device_put(dmac->icu.pdev); }
static const struct of_device_id of_rz_dmac_match[] = {
From: Johan Hovold johan@kernel.org Sent: 17 November 2025 16:13 To: Vinod Koul vkoul@kernel.org Cc: Ludovic Desroches ludovic.desroches@microchip.com; Viresh Kumar vireshk@kernel.org; Andy Shevchenko andriy.shevchenko@linux.intel.com; Vinicius Costa Gomes vinicius.gomes@intel.com; Dave Jiang dave.jiang@intel.com; Vladimir Zapolskiy vz@mleia.com; Piotr Wojtaszczyk piotr.wojtaszczyk@timesys.com; Amélie Delaunay amelie.delaunay@foss.st.com; Maxime Coquelin mcoquelin.stm32@gmail.com; Alexandre Torgue alexandre.torgue@foss.st.com; Peter Ujfalusi peter.ujfalusi@gmail.com; dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org; Johan Hovold johan@kernel.org; stable@vger.kernel.org; Fabrizio Castro fabrizio.castro.jz@renesas.com Subject: [PATCH 08/15] dmaengine: sh: rz-dmac: fix device leak on probe failure
Make sure to drop the reference taken when looking up the ICU device during probe also on probe failures (e.g. probe deferral).
Fixes: 7de873201c44 ("dmaengine: sh: rz-dmac: Add RZ/V2H(P) support") Cc: stable@vger.kernel.org # 6.16 Cc: Fabrizio Castro fabrizio.castro.jz@renesas.com Signed-off-by: Johan Hovold johan@kernel.org
Reviewed-by: Fabrizio Castro fabrizio.castro.jz@renesas.com
drivers/dma/sh/rz-dmac.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c index 1f687b08d6b8..38137e8d80b9 100644 --- a/drivers/dma/sh/rz-dmac.c +++ b/drivers/dma/sh/rz-dmac.c @@ -854,6 +854,13 @@ static int rz_dmac_chan_probe(struct rz_dmac *dmac, return 0; }
+static void rz_dmac_put_device(void *_dev) +{
- struct device *dev = _dev;
- put_device(dev);
+}
static int rz_dmac_parse_of_icu(struct device *dev, struct rz_dmac *dmac) { struct device_node *np = dev->of_node; @@ -876,6 +883,10 @@ static int rz_dmac_parse_of_icu(struct device *dev, struct rz_dmac *dmac) return -ENODEV; }
- ret = devm_add_action_or_reset(dev, rz_dmac_put_device, &dmac->icu.pdev->dev);
- if (ret)
return ret;- dmac_index = args.args[0]; if (dmac_index > RZV2H_MAX_DMAC_INDEX) { dev_err(dev, "DMAC index %u invalid.\n", dmac_index);
@@ -1055,8 +1066,6 @@ static void rz_dmac_remove(struct platform_device *pdev) reset_control_assert(dmac->rstc); pm_runtime_put(&pdev->dev); pm_runtime_disable(&pdev->dev);
- platform_device_put(dmac->icu.pdev);
}
static const struct of_device_id of_rz_dmac_match[] = {
2.51.0
linux-stable-mirror@lists.linaro.org