Skip to content

Commit b255ef4

Browse files
vmordankuba-moo
authored andcommitted
eth: bcmsysport: fix call balance of priv->clk handling routines
Check the return value of clk_prepare_enable to ensure that priv->clk has been successfully enabled. If priv->clk was not enabled during bcm_sysport_probe, bcm_sysport_resume, or bcm_sysport_open, it must not be disabled in any subsequent execution paths. Fixes: 31bc72d ("net: systemport: fetch and use clock resources") Signed-off-by: Vitalii Mordan <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent a024e37 commit b255ef4

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

drivers/net/ethernet/broadcom/bcmsysport.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,7 +1933,11 @@ static int bcm_sysport_open(struct net_device *dev)
19331933
unsigned int i;
19341934
int ret;
19351935

1936-
clk_prepare_enable(priv->clk);
1936+
ret = clk_prepare_enable(priv->clk);
1937+
if (ret) {
1938+
netdev_err(dev, "could not enable priv clock\n");
1939+
return ret;
1940+
}
19371941

19381942
/* Reset UniMAC */
19391943
umac_reset(priv);
@@ -2591,7 +2595,11 @@ static int bcm_sysport_probe(struct platform_device *pdev)
25912595
goto err_deregister_notifier;
25922596
}
25932597

2594-
clk_prepare_enable(priv->clk);
2598+
ret = clk_prepare_enable(priv->clk);
2599+
if (ret) {
2600+
dev_err(&pdev->dev, "could not enable priv clock\n");
2601+
goto err_deregister_netdev;
2602+
}
25952603

25962604
priv->rev = topctrl_readl(priv, REV_CNTL) & REV_MASK;
25972605
dev_info(&pdev->dev,
@@ -2605,6 +2613,8 @@ static int bcm_sysport_probe(struct platform_device *pdev)
26052613

26062614
return 0;
26072615

2616+
err_deregister_netdev:
2617+
unregister_netdev(dev);
26082618
err_deregister_notifier:
26092619
unregister_netdevice_notifier(&priv->netdev_notifier);
26102620
err_deregister_fixed_link:
@@ -2774,7 +2784,12 @@ static int __maybe_unused bcm_sysport_resume(struct device *d)
27742784
if (!netif_running(dev))
27752785
return 0;
27762786

2777-
clk_prepare_enable(priv->clk);
2787+
ret = clk_prepare_enable(priv->clk);
2788+
if (ret) {
2789+
netdev_err(dev, "could not enable priv clock\n");
2790+
return ret;
2791+
}
2792+
27782793
if (priv->wolopts)
27792794
clk_disable_unprepare(priv->wol_clk);
27802795

0 commit comments

Comments
 (0)