summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuoyu Wang <ruoyuw560@gmail.com>2026-08-13 23:31:43 +0800
committerVinod Koul <vkoul@kernel.org>2026-09-09 19:06:49 +0530
commit4a1a2d8b8529cc569b769b92fcd71c53805cbeb2 (patch)
treeacd5f863cdaa0b3a0c181a5540819c5ffd6f8237
parentf10d96b1c549a2f43506e9bf847196839808b8dc (diff)
downloadlinux-next-4a1a2d8b8529cc569b769b92fcd71c53805cbeb2.tar.gz
linux-next-4a1a2d8b8529cc569b769b92fcd71c53805cbeb2.zip
dmaengine: img-mdc: Fix runtime PM usage counter leak
pm_runtime_get_sync() leaves the IMG MDC device's usage counter incremented when runtime resume fails. mdc_alloc_chan_resources() returns that error to the DMA core, so the channel's client count is not incremented and mdc_free_chan_resources() is not called to drop the reference. Repeated allocation attempts can therefore accumulate usage references and prevent runtime suspend. Use pm_runtime_resume_and_get() so a failed resume does not retain a usage reference while successful allocations remain paired with mdc_free_chan_resources(). DMA core only treats negative return values as allocation failures, so the helper's zero success return preserves behavior. This issue was found by a static analysis checker and confirmed by manual source review. Fixes: 56d355e6f586 ("dmaengine: img-mdc: Add runtime PM") Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260813153143.3953303-1-ruoyuw560@gmail.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
-rw-r--r--drivers/dma/img-mdc-dma.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/dma/img-mdc-dma.c b/drivers/dma/img-mdc-dma.c
index b3765ba15803..a3192d49b6c8 100644
--- a/drivers/dma/img-mdc-dma.c
+++ b/drivers/dma/img-mdc-dma.c
@@ -738,7 +738,7 @@ static int mdc_alloc_chan_resources(struct dma_chan *chan)
struct mdc_chan *mchan = to_mdc_chan(chan);
struct device *dev = mdma2dev(mchan->mdma);
- return pm_runtime_get_sync(dev);
+ return pm_runtime_resume_and_get(dev);
}
static void mdc_free_chan_resources(struct dma_chan *chan)