• Julia Lawall's avatar
    arm: add missing of_node_put · a4283e41
    Julia Lawall authored
    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 of_node_put is duplicated in front of each error return, because the
    function contains a later error return that is beyond the end of the
    for_each_child_of_node and thus doesn't need of_node_put.
    
    The semantic patch that fixes this problem is as follows
    (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    expression root,e;
    local idexpression child;
    iterator name for_each_child_of_node;
    @@
    
     for_each_child_of_node(root, child) {
       ... when != of_node_put(child)
           when != e = child
    (
       return child;
    |
    +  of_node_put(child);
    ?  return ...;
    )
       ...
     }
    
    @@
    expression root,e;
    local idexpression child;
    @@
    
     for_each_child_of_node(root, child) {
       ... when != of_node_put(child)
           when != e = child
    +  of_node_put(child);
    ?  break;
       ...
    }
    ... when != child
    // </smpl>
    
    Additionally, concatenated a string in an affected line to avoid introducing
    a checkpatch warning.
    Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    a4283e41
devtree.c 6.28 KB