From: Wen Yang wenyang@linux.alibaba.com
[ Upstream commit d2c50b1cd94528aea8c8e9abb4cce81590f32cc4 ]
of_node_put needs to be called when the device node which is got from of_get_child_by_name finished using. In both cases of success and failure, we need to release 'ports', so clean up the code using goto.
fixes: a556c76adc05 ("net: mscc: Add initial Ocelot switch support") Signed-off-by: Wen Yang wenyang@linux.alibaba.com Cc: Alexandre Belloni alexandre.belloni@bootlin.com Cc: Microchip Linux Driver Support UNGLinuxDriver@microchip.com Cc: "David S. Miller" davem@davemloft.net Cc: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: David S. Miller davem@davemloft.net Signed-off-by: Sasha Levin sashal@kernel.org --- drivers/net/ethernet/mscc/ocelot_board.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c index 2451d4a96490b..041fb9f38ecaa 100644 --- a/drivers/net/ethernet/mscc/ocelot_board.c +++ b/drivers/net/ethernet/mscc/ocelot_board.c @@ -287,13 +287,14 @@ static int mscc_ocelot_probe(struct platform_device *pdev) continue;
phy = of_phy_find_device(phy_node); + of_node_put(phy_node); if (!phy) continue;
err = ocelot_probe_port(ocelot, port, regs, phy); if (err) { of_node_put(portnp); - return err; + goto out_put_ports; }
phy_mode = of_get_phy_mode(portnp); @@ -321,7 +322,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) "invalid phy mode for port%d, (Q)SGMII only\n", port); of_node_put(portnp); - return -EINVAL; + err = -EINVAL; + goto out_put_ports; }
serdes = devm_of_phy_get(ocelot->dev, portnp, NULL); @@ -334,7 +336,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) "missing SerDes phys for port%d\n", port);
- goto err_probe_ports; + of_node_put(portnp); + goto out_put_ports; }
ocelot->ports[port]->serdes = serdes; @@ -346,9 +349,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "Ocelot switch probed\n");
- return 0; - -err_probe_ports: +out_put_ports: + of_node_put(ports); return err; }