Skip to content

Commit a20a40a

Browse files
dinghaoliugeertu
authored andcommitted
clk: renesas: rcar-usb2-clock-sel: Fix error handling in .probe()
The error handling paths after pm_runtime_get_sync() have no refcount decrement, which leads to refcount leak. Signed-off-by: Dinghao Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected] [geert: Remove now unused variable priv] Signed-off-by: Geert Uytterhoeven <[email protected]>
1 parent 1692740 commit a20a40a

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

drivers/clk/renesas/rcar-usb2-clock-sel.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,8 @@ static int rcar_usb2_clock_sel_resume(struct device *dev)
128128
static int rcar_usb2_clock_sel_remove(struct platform_device *pdev)
129129
{
130130
struct device *dev = &pdev->dev;
131-
struct usb2_clock_sel_priv *priv = platform_get_drvdata(pdev);
132131

133132
of_clk_del_provider(dev->of_node);
134-
clk_hw_unregister(&priv->hw);
135133
pm_runtime_put(dev);
136134
pm_runtime_disable(dev);
137135

@@ -164,9 +162,6 @@ static int rcar_usb2_clock_sel_probe(struct platform_device *pdev)
164162
if (IS_ERR(priv->rsts))
165163
return PTR_ERR(priv->rsts);
166164

167-
pm_runtime_enable(dev);
168-
pm_runtime_get_sync(dev);
169-
170165
clk = devm_clk_get(dev, "usb_extal");
171166
if (!IS_ERR(clk) && !clk_prepare_enable(clk)) {
172167
priv->extal = !!clk_get_rate(clk);
@@ -183,18 +178,29 @@ static int rcar_usb2_clock_sel_probe(struct platform_device *pdev)
183178
return -ENOENT;
184179
}
185180

181+
pm_runtime_enable(dev);
182+
pm_runtime_get_sync(dev);
186183
platform_set_drvdata(pdev, priv);
187184
dev_set_drvdata(dev, priv);
188185

189186
init.name = "rcar_usb2_clock_sel";
190187
init.ops = &usb2_clock_sel_clock_ops;
191188
priv->hw.init = &init;
192189

193-
clk = clk_register(NULL, &priv->hw);
194-
if (IS_ERR(clk))
195-
return PTR_ERR(clk);
190+
ret = devm_clk_hw_register(NULL, &priv->hw);
191+
if (ret)
192+
goto pm_put;
193+
194+
ret = of_clk_add_hw_provider(np, of_clk_hw_simple_get, &priv->hw);
195+
if (ret)
196+
goto pm_put;
197+
198+
return 0;
196199

197-
return of_clk_add_hw_provider(np, of_clk_hw_simple_get, &priv->hw);
200+
pm_put:
201+
pm_runtime_put(dev);
202+
pm_runtime_disable(dev);
203+
return ret;
198204
}
199205

200206
static const struct dev_pm_ops rcar_usb2_clock_sel_pm_ops = {

0 commit comments

Comments
 (0)