diff options
author | Zhang Qilong <zhangqilong3@huawei.com> | 2021-06-07 14:46:39 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-08-12 13:22:04 +0200 |
commit | 281514da66a4ce121bd071240ce7c5aa4e9f6bdf (patch) | |
tree | d9b6b39ad30eb0ffd8a921cc61b35b229ab30a18 | |
parent | bbce3c99f6226b2aafe21ce29b3cb186ae9ade29 (diff) | |
download | kernel_replicant_linux-281514da66a4ce121bd071240ce7c5aa4e9f6bdf.tar.gz kernel_replicant_linux-281514da66a4ce121bd071240ce7c5aa4e9f6bdf.tar.bz2 kernel_replicant_linux-281514da66a4ce121bd071240ce7c5aa4e9f6bdf.zip |
dmaengine: stm32-dmamux: Fix PM usage counter unbalance in stm32 dmamux ops
[ Upstream commit baa16371c9525f24d508508e4d296c031e1de29c ]
pm_runtime_get_sync will increment pm usage counter
even it failed. Forgetting to putting operation will
result in reference leak here. We fix it by replacing
it with pm_runtime_resume_and_get to keep usage counter
balanced.
Fixes: 4f3ceca254e0f ("dmaengine: stm32-dmamux: Add PM Runtime support")
Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
Link: https://lore.kernel.org/r/20210607064640.121394-3-zhangqilong3@huawei.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | drivers/dma/stm32-dmamux.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/dma/stm32-dmamux.c b/drivers/dma/stm32-dmamux.c index a10ccd964376..bddd3b23f33f 100644 --- a/drivers/dma/stm32-dmamux.c +++ b/drivers/dma/stm32-dmamux.c @@ -137,7 +137,7 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec, /* Set dma request */ spin_lock_irqsave(&dmamux->lock, flags); - ret = pm_runtime_get_sync(&pdev->dev); + ret = pm_runtime_resume_and_get(&pdev->dev); if (ret < 0) { spin_unlock_irqrestore(&dmamux->lock, flags); goto error; @@ -336,7 +336,7 @@ static int stm32_dmamux_suspend(struct device *dev) struct stm32_dmamux_data *stm32_dmamux = platform_get_drvdata(pdev); int i, ret; - ret = pm_runtime_get_sync(dev); + ret = pm_runtime_resume_and_get(dev); if (ret < 0) return ret; @@ -361,7 +361,7 @@ static int stm32_dmamux_resume(struct device *dev) if (ret < 0) return ret; - ret = pm_runtime_get_sync(dev); + ret = pm_runtime_resume_and_get(dev); if (ret < 0) return ret; |