提交 0b25ff86 编写于 作者: J Julia Lawall 提交者: Kishon Vijay Abraham I

phy: brcmstb-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: NJulia Lawall <Julia.Lawall@lip6.fr>
Acked-by: NBrian Norris <computersforpeace@gmail.com>
Signed-off-by: NKishon Vijay Abraham I <kishon@ti.com>
上级 97dc5bf8
...@@ -140,7 +140,7 @@ static int brcm_sata_phy_probe(struct platform_device *pdev) ...@@ -140,7 +140,7 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
struct brcm_sata_phy *priv; struct brcm_sata_phy *priv;
struct resource *res; struct resource *res;
struct phy_provider *provider; struct phy_provider *provider;
int count = 0; int ret, count = 0;
if (of_get_child_count(dn) == 0) if (of_get_child_count(dn) == 0)
return -ENODEV; return -ENODEV;
...@@ -163,16 +163,19 @@ static int brcm_sata_phy_probe(struct platform_device *pdev) ...@@ -163,16 +163,19 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
if (of_property_read_u32(child, "reg", &id)) { if (of_property_read_u32(child, "reg", &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 (id >= MAX_PORTS) { if (id >= MAX_PORTS) {
dev_err(dev, "invalid reg: %u\n", id); dev_err(dev, "invalid reg: %u\n", id);
return -EINVAL; ret = -EINVAL;
goto put_child;
} }
if (priv->phys[id].phy) { if (priv->phys[id].phy) {
dev_err(dev, "already registered port %u\n", id); dev_err(dev, "already registered port %u\n", id);
return -EINVAL; ret = -EINVAL;
goto put_child;
} }
port = &priv->phys[id]; port = &priv->phys[id];
...@@ -182,7 +185,8 @@ static int brcm_sata_phy_probe(struct platform_device *pdev) ...@@ -182,7 +185,8 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
port->ssc_en = of_property_read_bool(child, "brcm,enable-ssc"); port->ssc_en = of_property_read_bool(child, "brcm,enable-ssc");
if (IS_ERR(port->phy)) { if (IS_ERR(port->phy)) {
dev_err(dev, "failed to create PHY\n"); dev_err(dev, "failed to create PHY\n");
return PTR_ERR(port->phy); ret = PTR_ERR(port->phy);
goto put_child;
} }
phy_set_drvdata(port->phy, port); phy_set_drvdata(port->phy, port);
...@@ -198,6 +202,9 @@ static int brcm_sata_phy_probe(struct platform_device *pdev) ...@@ -198,6 +202,9 @@ static int brcm_sata_phy_probe(struct platform_device *pdev)
dev_info(dev, "registered %d port(s)\n", count); dev_info(dev, "registered %d port(s)\n", count);
return 0; return 0;
put_child:
of_node_put(child);
return ret;
} }
static struct platform_driver brcm_sata_phy_driver = { static struct platform_driver brcm_sata_phy_driver = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册