]> git.karo-electronics.de Git - karo-tx-linux.git/commit
rcu: Restore checks for blocking in RCU read-side critical sections
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 24 May 2011 15:31:09 +0000 (08:31 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 10 Aug 2011 02:28:23 +0000 (19:28 -0700)
commit40476150d1d1efb1a66e10656ea184f4760ea629
treefafc34c19565e354ffc55a6b6333dbfa0552ed28
parentb140526d8551a249bf8def17c0c20c887b4aa0e9
rcu: Restore checks for blocking in RCU read-side critical sections

Long ago, using TREE_RCU with PREEMPT would result in "scheduling
while atomic" diagnostics if you blocked in an RCU read-side critical
section.  However, PREEMPT now implies TREE_PREEMPT_RCU, which defeats
this diagnostic.  This commit therefore adds a replacement diagnostic
based on PROVE_RCU.

Because rcu_lockdep_assert() and lockdep_rcu_dereference() are now being
used for things that have nothing to do with rcu_dereference(), rename
lockdep_rcu_dereference() to lockdep_rcu_suspicious() and add a third
argument that is a string indicating what is suspicious.  This third
argument is passed in from a new third argument to rcu_lockdep_assert().
Update all calls to rcu_lockdep_assert() to add an informative third
argument.

Also, add a pair of rcu_lockdep_assert() calls from within
rcu_note_context_switch(), one complaining if a context switch occurs
in an RCU-bh read-side critical section and another complaining if a
context switch occurs in an RCU-sched read-side critical section.
These are present only if the PROVE_RCU kernel parameter is enabled.

Finally, fix some checkpatch whitespace complaints in lockdep.c.

Again, you must enable PROVE_RCU to see these new diagnostics.  But you
are enabling PROVE_RCU to check out new RCU uses in any case, aren't you?

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/lockdep.h
include/linux/rcupdate.h
kernel/lockdep.c
kernel/pid.c
kernel/sched.c