Skip to content

Commit 3f1bb6a

Browse files
jhovolddavem330
authored andcommitted
net: dsa: realtek-smi: fix OF child-node lookup
Use the new of_get_compatible_child() helper to look up child nodes to avoid ever matching non-child nodes elsewhere in the tree. Also fix up the related struct device_node leaks. Fixes: d865295 ("net: dsa: realtek-smi: Add Realtek SMI driver") Cc: stable <stable@vger.kernel.org> # 4.19: 36156f9 Cc: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Johan Hovold <johan@kernel.org> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent cb12d72 commit 3f1bb6a

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

drivers/net/dsa/realtek-smi.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,16 +347,17 @@ int realtek_smi_setup_mdio(struct realtek_smi *smi)
347347
struct device_node *mdio_np;
348348
int ret;
349349

350-
mdio_np = of_find_compatible_node(smi->dev->of_node, NULL,
351-
"realtek,smi-mdio");
350+
mdio_np = of_get_compatible_child(smi->dev->of_node, "realtek,smi-mdio");
352351
if (!mdio_np) {
353352
dev_err(smi->dev, "no MDIO bus node\n");
354353
return -ENODEV;
355354
}
356355

357356
smi->slave_mii_bus = devm_mdiobus_alloc(smi->dev);
358-
if (!smi->slave_mii_bus)
359-
return -ENOMEM;
357+
if (!smi->slave_mii_bus) {
358+
ret = -ENOMEM;
359+
goto err_put_node;
360+
}
360361
smi->slave_mii_bus->priv = smi;
361362
smi->slave_mii_bus->name = "SMI slave MII";
362363
smi->slave_mii_bus->read = realtek_smi_mdio_read;
@@ -371,10 +372,15 @@ int realtek_smi_setup_mdio(struct realtek_smi *smi)
371372
if (ret) {
372373
dev_err(smi->dev, "unable to register MDIO bus %s\n",
373374
smi->slave_mii_bus->id);
374-
of_node_put(mdio_np);
375+
goto err_put_node;
375376
}
376377

377378
return 0;
379+
380+
err_put_node:
381+
of_node_put(mdio_np);
382+
383+
return ret;
378384
}
379385

380386
static int realtek_smi_probe(struct platform_device *pdev)
@@ -457,6 +463,8 @@ static int realtek_smi_remove(struct platform_device *pdev)
457463
struct realtek_smi *smi = dev_get_drvdata(&pdev->dev);
458464

459465
dsa_unregister_switch(smi->ds);
466+
if (smi->slave_mii_bus)
467+
of_node_put(smi->slave_mii_bus->dev.of_node);
460468
gpiod_set_value(smi->reset, 1);
461469

462470
return 0;

0 commit comments

Comments
 (0)