phy: berlin-sata: add missing of_node_put
for_each_available_child_of_node performs an of_node_get on each iteration, so a return from the middle of the loop requires an of_node_put. A simplified version of the semantic patch that finds this problem is as follows (http://coccinelle.lip6.fr): // <smpl> @@ expression root,e; local idexpression child; @@ for_each_available_child_of_node(root, child) { ... when != of_node_put(child) when != e = child ( return child; | * return ...; ) ... } // </smpl> Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
Родитель
2bb80ccda1
Коммит
d0ca576af2
|
@ -195,7 +195,7 @@ static int phy_berlin_sata_probe(struct platform_device *pdev)
|
||||||
struct phy_provider *phy_provider;
|
struct phy_provider *phy_provider;
|
||||||
struct phy_berlin_priv *priv;
|
struct phy_berlin_priv *priv;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int i = 0;
|
int ret, i = 0;
|
||||||
u32 phy_id;
|
u32 phy_id;
|
||||||
|
|
||||||
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||||
|
@ -237,22 +237,27 @@ static int phy_berlin_sata_probe(struct platform_device *pdev)
|
||||||
if (of_property_read_u32(child, "reg", &phy_id)) {
|
if (of_property_read_u32(child, "reg", &phy_id)) {
|
||||||
dev_err(dev, "missing reg property in node %s\n",
|
dev_err(dev, "missing reg property in node %s\n",
|
||||||
child->name);
|
child->name);
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto put_child;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phy_id >= ARRAY_SIZE(phy_berlin_power_down_bits)) {
|
if (phy_id >= ARRAY_SIZE(phy_berlin_power_down_bits)) {
|
||||||
dev_err(dev, "invalid reg in node %s\n", child->name);
|
dev_err(dev, "invalid reg in node %s\n", child->name);
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto put_child;
|
||||||
}
|
}
|
||||||
|
|
||||||
phy_desc = devm_kzalloc(dev, sizeof(*phy_desc), GFP_KERNEL);
|
phy_desc = devm_kzalloc(dev, sizeof(*phy_desc), GFP_KERNEL);
|
||||||
if (!phy_desc)
|
if (!phy_desc) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto put_child;
|
||||||
|
}
|
||||||
|
|
||||||
phy = devm_phy_create(dev, NULL, &phy_berlin_sata_ops);
|
phy = devm_phy_create(dev, NULL, &phy_berlin_sata_ops);
|
||||||
if (IS_ERR(phy)) {
|
if (IS_ERR(phy)) {
|
||||||
dev_err(dev, "failed to create PHY %d\n", phy_id);
|
dev_err(dev, "failed to create PHY %d\n", phy_id);
|
||||||
return PTR_ERR(phy);
|
ret = PTR_ERR(phy);
|
||||||
|
goto put_child;
|
||||||
}
|
}
|
||||||
|
|
||||||
phy_desc->phy = phy;
|
phy_desc->phy = phy;
|
||||||
|
@ -269,6 +274,9 @@ static int phy_berlin_sata_probe(struct platform_device *pdev)
|
||||||
phy_provider =
|
phy_provider =
|
||||||
devm_of_phy_provider_register(dev, phy_berlin_sata_phy_xlate);
|
devm_of_phy_provider_register(dev, phy_berlin_sata_phy_xlate);
|
||||||
return PTR_ERR_OR_ZERO(phy_provider);
|
return PTR_ERR_OR_ZERO(phy_provider);
|
||||||
|
put_child:
|
||||||
|
of_node_put(child);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id phy_berlin_sata_of_match[] = {
|
static const struct of_device_id phy_berlin_sata_of_match[] = {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче