• Julia Lawall's avatar
    workqueue: replace call_rcu by kfree_rcu for simple kmem_cache_free callback · 37c2277f
    Julia Lawall authored
    Since SLOB was removed, it is not necessary to use call_rcu
    when the callback only performs kmem_cache_free. Use
    kfree_rcu() directly.
    
    The changes were done using the following Coccinelle semantic patch.
    This semantic patch is designed to ignore cases where the callback
    function is used in another way.
    
    // <smpl>
    @r@
    expression e;
    local idexpression e2;
    identifier cb,f;
    position p;
    @@
    
    (
    call_rcu(...,e2)
    |
    call_rcu(&e->f,cb@p)
    )
    
    @r1@
    type T;
    identifier x,r.cb;
    @@
    
     cb(...) {
    (
       kmem_cache_free(...);
    |
       T x = ...;
       kmem_cache_free(...,x);
    |
       T x;
       x = ...;
       kmem_cache_free(...,x);
    )
     }
    
    @s depends on r1@
    position p != r.p;
    identifier r.cb;
    @@
    
     cb@p
    
    @script:ocaml@
    cb << r.cb;
    p << s.p;
    @@
    
    Printf.eprintf "Other use of %s at %s:%d\n"
       cb (List.hd p).file (List.hd p).line
    
    @depends on r1 && !s@
    expression e;
    identifier r.cb,f;
    position r.p;
    @@
    
    - call_rcu(&e->f,cb@p)
    + kfree_rcu(e,f)
    
    @r1a depends on !s@
    type T;
    identifier x,r.cb;
    @@
    
    - cb(...) {
    (
    -  kmem_cache_free(...);
    |
    -  T x = ...;
    -  kmem_cache_free(...,x);
    |
    -  T x;
    -  x = ...;
    -  kmem_cache_free(...,x);
    )
    - }
    // </smpl>
    Signed-off-by: default avatarJulia Lawall <Julia.Lawall@inria.fr>
    Reviewed-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    37c2277f
workqueue.c 223 KB