• Julia Lawall's avatar
    of/irq: add missing of_node_put · 8363ccb9
    Julia Lawall authored
    for_each_matching_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>
    @@
    local idexpression n;
    expression e;
    identifier l;
    @@
    
     for_each_matching_node(n,...) {
       ...
    (
       of_node_put(n);
    |
       e = n
    |
    +  of_node_put(n);
    ?  goto l;
    )
       ...
     }
    ...
    l: ... when != n
    // </smpl>
    
    Besides the issue found by the semantic patch, this code also stores the
    device_node value in a list, which requires an of_node_get, and then cleans
    up the list on exit from the function, which requires an of_node_put.
    Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: default avatarRob Herring <robh@kernel.org>
    8363ccb9
irq.c 16.5 KB