rcu: Allow nesting of rcu_idle_enter() and rcu_idle_exit()
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 18 Nov 2011 00:55:56 +0000 (16:55 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 21 Feb 2012 17:06:12 +0000 (09:06 -0800)
commit29e37d814188ac8d60f2120583704d3ef6d634b4
tree1619796097a7aead2c9bec3ba10a8b84f2643013
parentce5df97be530e4746bf9a4ac14589a1cfdfd8efc
rcu: Allow nesting of rcu_idle_enter() and rcu_idle_exit()

Use of RCU in the idle loop is incorrect, quite a few instances of
just that have made their way into mainline, primarily event tracing.
The problem with RCU read-side critical sections on CPUs that RCU believes
to be idle is that RCU is completely ignoring the CPU, along with any
attempts and RCU read-side critical sections.

The approaches of eliminating the offending uses and of pushing the
definition of idle down beyond the offending uses have both proved
impractical.  The new approach is to encapsulate offending uses of RCU
with rcu_idle_exit() and rcu_idle_enter(), but this requires nesting
for code that is invoked both during idle and and during normal execution.
Therefore, this commit modifies rcu_idle_enter() and rcu_idle_exit() to
permit nesting.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Acked-by: Deepthi Dharwar <deepthi@linux.vnet.ibm.com>
kernel/rcu.h
kernel/rcutiny.c
kernel/rcutree.c