// Copyright: (C) 2010 Nicolas Palix, Suman Saha, Gael Thomas, Christophe Calves, Julia Lawall, Gilles Muller, LIP6, INRIA, DIKU.  GPLv2.

// rcu_dereference outside of rcu_lock

@r@
position p1;
position p2;
@@

rcu_dereference@p1(...)
... when != rcu_read_unlock()
    when != rcu_read_unlock_bh()
    when != rcu_read_unlock_sched()
    when != rcu_read_unlock_sched_notrace()
    when != srcu_read_unlock()
(
rcu_read_lock@p2()
|
rcu_read_lock_bh@p2()
|
rcu_read_lock_sched@p2()
|
rcu_read_lock_sched_notrace@p2()
|
srcu_read_lock@p2()
)

@script:python@
p1 << r.p1;
p2 << r.p2;
@@

cocci.print_main("deref",p1)
cocci.print_secs("lock",p2)