• Julia Lawall's avatar
    clk: add missing of_node_put · 6bc9d9d6
    Julia Lawall authored
    for_each_matching_node_and_match 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 e1,e2,e;
    local idexpression np;
    @@
    
     for_each_matching_node_and_match(np, e1, e2) {
       ... when != of_node_put(np)
           when != e = np
    (
       return np;
    |
    +  of_node_put(np);
    ?  return ...;
    )
       ...
     }
    // </smpl>
    
    Besides the problem identified by the semantic patch, this patch adds an
    of_node_get in front of saving np in a field of parent, to account for the
    fact that this value will be put on going on to the next element in the
    iteration, and then adds of_node_puts in the two loops where the parent
    pointer can be freed.
    Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
    6bc9d9d6
clk.c 78.1 KB