lkml.org 
[lkml]   [2015]   [Oct]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 4/5] regulator: of: add missing of_node_put


    On Mon, 12 Oct 2015, Krzysztof Kozlowski wrote:

    > 2015-10-10 21:30 GMT+09:00 Julia Lawall <Julia.Lawall@lip6.fr>:
    > >
    > > 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@lip6.fr>
    > >
    > > ---
    > > 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

    > 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@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html
    >


    \
     
     \ /
      Last update: 2015-10-12 15:01    [W:2.280 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site