Commit dde4afe7 authored by Julia Lawall's avatar Julia Lawall Committed by Jacek Anaszewski

powerpc/powernv: add missing of_node_put

for_each_child_of_node performs an of_node_get on each iteration, so
a break out of the loop requires an of_node_put.

A simplified version of the semantic patch that fixes this problem is as
follows (http://coccinelle.lip6.fr):

// <smpl>
@@
expression root,e;
local idexpression child;
@@

 for_each_child_of_node(root, child) {
   ... when != of_node_put(child)
       when != e = child
(
   return child;
|
+  of_node_put(child);
?  return ...;
)
   ...
 }
// </smpl>
Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
parent e9aadb86
...@@ -262,15 +262,19 @@ static int powernv_led_classdev(struct platform_device *pdev, ...@@ -262,15 +262,19 @@ static int powernv_led_classdev(struct platform_device *pdev,
while ((cur = of_prop_next_string(p, cur)) != NULL) { while ((cur = of_prop_next_string(p, cur)) != NULL) {
powernv_led = devm_kzalloc(dev, sizeof(*powernv_led), powernv_led = devm_kzalloc(dev, sizeof(*powernv_led),
GFP_KERNEL); GFP_KERNEL);
if (!powernv_led) if (!powernv_led) {
of_node_put(np);
return -ENOMEM; return -ENOMEM;
}
powernv_led->common = powernv_led_common; powernv_led->common = powernv_led_common;
powernv_led->loc_code = (char *)np->name; powernv_led->loc_code = (char *)np->name;
rc = powernv_led_create(dev, powernv_led, cur); rc = powernv_led_create(dev, powernv_led, cur);
if (rc) if (rc) {
of_node_put(np);
return rc; return rc;
}
} /* while end */ } /* while end */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment