Message ID | d224865a16b50498279b044a819e1e187d01bb28.1743231856.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mfd: exynos-lpass: Fix some error handling paths | expand |
On 29/03/2025 08:45, Christophe JAILLET wrote: > lpass = devm_kzalloc(dev, sizeof(*lpass), GFP_KERNEL); > if (!lpass) > @@ -143,7 +144,15 @@ static int exynos_lpass_probe(struct platform_device *pdev) > pm_runtime_enable(dev); > exynos_lpass_enable(lpass); > > - return devm_of_platform_populate(dev); > + ret = devm_of_platform_populate(dev); > + if (ret) > + goto err_remove_exynos_lpass; > + > + return 0; > + > +err_remove_exynos_lpass: > + exynos_lpass_remove(pdev); You should have here standard unwinding, not calling remove. Or better just convert everything to devm, because mixing devm and non-devm is error prone. Best regards, Krzysztof
diff --git a/drivers/mfd/exynos-lpass.c b/drivers/mfd/exynos-lpass.c index 7fd8585ba35a..9f2601e4e583 100644 --- a/drivers/mfd/exynos-lpass.c +++ b/drivers/mfd/exynos-lpass.c @@ -118,6 +118,7 @@ static int exynos_lpass_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct exynos_lpass *lpass; void __iomem *base_top; + int ret; lpass = devm_kzalloc(dev, sizeof(*lpass), GFP_KERNEL); if (!lpass) @@ -143,7 +144,15 @@ static int exynos_lpass_probe(struct platform_device *pdev) pm_runtime_enable(dev); exynos_lpass_enable(lpass); - return devm_of_platform_populate(dev); + ret = devm_of_platform_populate(dev); + if (ret) + goto err_remove_exynos_lpass; + + return 0; + +err_remove_exynos_lpass: + exynos_lpass_remove(pdev); + return ret; } static int __maybe_unused exynos_lpass_suspend(struct device *dev)
If devm_of_platform_populate() fails, some clean-up needs to be done, as already done in the remove function. Add the needed error handling path. Fixes: c695abab2429 ("mfd: Add Samsung Exynos Low Power Audio Subsystem driver") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- Compile tested only. --- drivers/mfd/exynos-lpass.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)