Commit 3120438ad68601f341e61e7cb1323b0e1a6ca367

Authored by Paul E. McKenney
Committed by Ingo Molnar
1 parent 0632eb3d75

rcu: Disable lockdep checking in RCU list-traversal primitives

The theory is that use of bare rcu_dereference() is more prone
to error than use of the RCU list-traversal primitives.
Therefore, disable lockdep RCU read-side critical-section
checking in these primitives for the time being.  Once all of
the rcu_dereference() uses have been dealt with, it may be time
to re-enable lockdep checking for the RCU list-traversal
primitives.

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
LKML-Reference: <1266887105-1528-4-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 2 changed files with 9 additions and 9 deletions Side-by-side Diff

include/linux/rculist.h
... ... @@ -208,7 +208,7 @@
208 208 * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().
209 209 */
210 210 #define list_entry_rcu(ptr, type, member) \
211   - container_of(rcu_dereference(ptr), type, member)
  211 + container_of(rcu_dereference_raw(ptr), type, member)
212 212  
213 213 /**
214 214 * list_first_entry_rcu - get the first element from a list
215 215  
... ... @@ -225,9 +225,9 @@
225 225 list_entry_rcu((ptr)->next, type, member)
226 226  
227 227 #define __list_for_each_rcu(pos, head) \
228   - for (pos = rcu_dereference((head)->next); \
  228 + for (pos = rcu_dereference_raw((head)->next); \
229 229 pos != (head); \
230   - pos = rcu_dereference(pos->next))
  230 + pos = rcu_dereference_raw(pos->next))
231 231  
232 232 /**
233 233 * list_for_each_entry_rcu - iterate over rcu list of given type
234 234  
... ... @@ -257,9 +257,9 @@
257 257 * as long as the traversal is guarded by rcu_read_lock().
258 258 */
259 259 #define list_for_each_continue_rcu(pos, head) \
260   - for ((pos) = rcu_dereference((pos)->next); \
  260 + for ((pos) = rcu_dereference_raw((pos)->next); \
261 261 prefetch((pos)->next), (pos) != (head); \
262   - (pos) = rcu_dereference((pos)->next))
  262 + (pos) = rcu_dereference_raw((pos)->next))
263 263  
264 264 /**
265 265 * list_for_each_entry_continue_rcu - continue iteration over list of given type
266 266  
... ... @@ -418,10 +418,10 @@
418 418 * as long as the traversal is guarded by rcu_read_lock().
419 419 */
420 420 #define hlist_for_each_entry_rcu(tpos, pos, head, member) \
421   - for (pos = rcu_dereference((head)->first); \
  421 + for (pos = rcu_dereference_raw((head)->first); \
422 422 pos && ({ prefetch(pos->next); 1; }) && \
423 423 ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
424   - pos = rcu_dereference(pos->next))
  424 + pos = rcu_dereference_raw(pos->next))
425 425  
426 426 #endif /* __KERNEL__ */
427 427 #endif
include/linux/rculist_nulls.h
... ... @@ -101,10 +101,10 @@
101 101 *
102 102 */
103 103 #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \
104   - for (pos = rcu_dereference((head)->first); \
  104 + for (pos = rcu_dereference_raw((head)->first); \
105 105 (!is_a_nulls(pos)) && \
106 106 ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \
107   - pos = rcu_dereference(pos->next))
  107 + pos = rcu_dereference_raw(pos->next))
108 108  
109 109 #endif
110 110 #endif