Commit bc293d62b26ec590afc90a9e0a31c45d355b7bd8
Committed by
Ingo Molnar
1 parent
50aec0024e
Exists in
master
and in
4 other branches
rcu: Make RCU lockdep check the lockdep_recursion variable
The lockdep facility temporarily disables lockdep checking by incrementing the current->lockdep_recursion variable. Such disabling happens in NMIs and in other situations where lockdep might expect to recurse on itself. This patch therefore checks current->lockdep_recursion, disabling RCU lockdep splats when this variable is non-zero. In addition, this patch removes the "likely()", as suggested by Lai Jiangshan. Reported-by: Frederic Weisbecker <fweisbec@gmail.com> Reported-by: David Miller <davem@davemloft.net> Tested-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com Cc: eric.dumazet@gmail.com LKML-Reference: <20100415195039.GA22623@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 2 changed files with 8 additions and 4 deletions Side-by-side Diff
include/linux/rcupdate.h
... | ... | @@ -101,10 +101,7 @@ |
101 | 101 | # define rcu_read_release_sched() \ |
102 | 102 | lock_release(&rcu_sched_lock_map, 1, _THIS_IP_) |
103 | 103 | |
104 | -static inline int debug_lockdep_rcu_enabled(void) | |
105 | -{ | |
106 | - return likely(rcu_scheduler_active && debug_locks); | |
107 | -} | |
104 | +extern int debug_lockdep_rcu_enabled(void); | |
108 | 105 | |
109 | 106 | /** |
110 | 107 | * rcu_read_lock_held - might we be in RCU read-side critical section? |
kernel/rcupdate.c
... | ... | @@ -69,6 +69,13 @@ |
69 | 69 | |
70 | 70 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
71 | 71 | |
72 | +int debug_lockdep_rcu_enabled(void) | |
73 | +{ | |
74 | + return rcu_scheduler_active && debug_locks && | |
75 | + current->lockdep_recursion == 0; | |
76 | +} | |
77 | +EXPORT_SYMBOL_GPL(debug_lockdep_rcu_enabled); | |
78 | + | |
72 | 79 | /** |
73 | 80 | * rcu_read_lock_bh_held - might we be in RCU-bh read-side critical section? |
74 | 81 | * |