Unverified Commit aa2ad192 authored by Haotian Zhang's avatar Haotian Zhang Committed by Stephen Boyd
Browse files

clk: mediatek: Fix error handling in runtime PM setup



devm_pm_runtime_enable() can fail due to memory allocation. The current
code ignores its return value, and when pm_runtime_resume_and_get() fails,
it returns directly without unmapping the shared_io region.

Add error handling for devm_pm_runtime_enable(). Reorder cleanup labels
to properly unmap shared_io on pm_runtime_resume_and_get() failure.

Fixes: 2f7b1d8b ("clk: mediatek: Do a runtime PM get on controllers during probe")
Signed-off-by: default avatarHaotian Zhang <vulab@iscas.ac.cn>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent 963bb186
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -497,14 +497,16 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,


	if (mcd->need_runtime_pm) {
		devm_pm_runtime_enable(&pdev->dev);
		r = devm_pm_runtime_enable(&pdev->dev);
		if (r)
			goto unmap_io;
		/*
		 * Do a pm_runtime_resume_and_get() to workaround a possible
		 * deadlock between clk_register() and the genpd framework.
		 */
		r = pm_runtime_resume_and_get(&pdev->dev);
		if (r)
			return r;
			goto unmap_io;
	}

	/* Calculate how many clk_hw_onecell_data entries to allocate */
@@ -618,11 +620,11 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev,
free_data:
	mtk_free_clk_data(clk_data);
free_base:
	if (mcd->shared_io && base)
		iounmap(base);

	if (mcd->need_runtime_pm)
		pm_runtime_put(&pdev->dev);
unmap_io:
	if (mcd->shared_io && base)
		iounmap(base);
	return r;
}