W dniu 12.10.2015 o 21:44, Julia Lawall pisze: > > > On Mon, 12 Oct 2015, Krzysztof Kozlowski wrote: > >> 2015-10-10 21:30 GMT+09:00 Julia Lawall <Julia.Lawall@xxxxxxx>: >>> >>> 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. >>> >>> 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: Julia Lawall <Julia.Lawall@xxxxxxx> >>> >>> --- >>> drivers/regulator/of_regulator.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c >>> index 499e437..f9d77b4 100644 >>> --- a/drivers/regulator/of_regulator.c >>> +++ b/drivers/regulator/of_regulator.c >>> @@ -274,6 +274,7 @@ int of_regulator_match(struct device *dev, struct device_node *node, >>> dev_err(dev, >>> "failed to parse DT for regulator %s\n", >>> child->name); >>> + of_node_put(child); >> >> This looks good. >> >>> return -EINVAL; >>> } >>> match->of_node = of_node_get(child); >> >> But what about 'break' few lines below? The reference from last >> of_get_next_child() should be also dropped because... or we should >> remove this of_node_get() call. > > Actually, the break is OK. It's on the inner for loop, not the > for_each_child_of_node loop. The for_each_child_of_node will still > decrement the reference count in the normal way. > > julia Yes, you're right. The patch looks good: Reviewed-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> Best regards, Krzysztof >> How about fixing also usage of for_each_available_child_of_node() in >> regulator_of_get_init_data()? >> >> Best regards, >> Krzysztof >> -- >> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html