rcu: Silence lockdep false positive for expedited grace periods
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 19 Jul 2015 22:13:40 +0000 (15:13 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 4 Aug 2015 15:39:21 +0000 (08:39 -0700)
commitaf859beaaba4d57883b08f4acbcb3974bc1f975e
tree0bff1fa9c43693c9f513daf48197be3627b3301c
parentcdacbe1f91264687af956e810278030f2ab5a3d0
rcu: Silence lockdep false positive for expedited grace periods

In a CONFIG_PREEMPT=y kernel, synchronize_rcu_expedited()
acquires the ->exp_funnel_mutex in rcu_preempt_state, then invokes
synchronize_sched_expedited, which acquires the ->exp_funnel_mutex in
rcu_sched_state.  There can be no deadlock because rcu_preempt_state
->exp_funnel_mutex acquisition always precedes that of rcu_sched_state.
But lockdep does not know that, so it gives false-positive splats.

This commit therefore associates a separate lock_class_key structure
with the rcu_sched_state structure's ->exp_funnel_mutex, allowing
lockdep to see the lock ordering, avoiding the false positives.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcu/tree.c
kernel/rcu/tree.h