From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@elte.hu, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
josh@joshtriplett.org, dvhltc@us.ibm.com, niv@us.ibm.com,
tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org,
Valdis.Kletnieks@vt.edu, dhowells@redhat.com,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 04/18] rcu: disable lockdep checking in RCU list-traversal primitives
Date: Wed, 17 Feb 2010 12:29:30 -0800 [thread overview]
Message-ID: <1266438584-29173-4-git-send-email-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <20100217202924.GA29007@linux.vnet.ibm.com>
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>
---
include/linux/rculist.h | 14 +++++++-------
include/linux/rculist_nulls.h | 4 ++--
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
index 1bf0f70..779d707 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -208,7 +208,7 @@ static inline void list_splice_init_rcu(struct list_head *list,
* primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().
*/
#define list_entry_rcu(ptr, type, member) \
- container_of(rcu_dereference(ptr), type, member)
+ container_of(rcu_dereference_raw(ptr), type, member)
/**
* list_first_entry_rcu - get the first element from a list
@@ -225,9 +225,9 @@ static inline void list_splice_init_rcu(struct list_head *list,
list_entry_rcu((ptr)->next, type, member)
#define __list_for_each_rcu(pos, head) \
- for (pos = rcu_dereference((head)->next); \
+ for (pos = rcu_dereference_raw((head)->next); \
pos != (head); \
- pos = rcu_dereference(pos->next))
+ pos = rcu_dereference_raw(pos->next))
/**
* list_for_each_entry_rcu - iterate over rcu list of given type
@@ -257,9 +257,9 @@ static inline void list_splice_init_rcu(struct list_head *list,
* as long as the traversal is guarded by rcu_read_lock().
*/
#define list_for_each_continue_rcu(pos, head) \
- for ((pos) = rcu_dereference((pos)->next); \
+ for ((pos) = rcu_dereference_raw((pos)->next); \
prefetch((pos)->next), (pos) != (head); \
- (pos) = rcu_dereference((pos)->next))
+ (pos) = rcu_dereference_raw((pos)->next))
/**
* list_for_each_entry_continue_rcu - continue iteration over list of given type
@@ -418,10 +418,10 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
* as long as the traversal is guarded by rcu_read_lock().
*/
#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
- for (pos = rcu_dereference((head)->first); \
+ for (pos = rcu_dereference_raw((head)->first); \
pos && ({ prefetch(pos->next); 1; }) && \
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
- pos = rcu_dereference(pos->next))
+ pos = rcu_dereference_raw(pos->next))
#endif /* __KERNEL__ */
#endif
diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h
index 589a409..b70ffe5 100644
--- a/include/linux/rculist_nulls.h
+++ b/include/linux/rculist_nulls.h
@@ -101,10 +101,10 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n,
*
*/
#define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \
- for (pos = rcu_dereference((head)->first); \
+ for (pos = rcu_dereference_raw((head)->first); \
(!is_a_nulls(pos)) && \
({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \
- pos = rcu_dereference(pos->next))
+ pos = rcu_dereference_raw(pos->next))
#endif
#endif
--
1.6.6
next prev parent reply other threads:[~2010-02-17 20:30 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-17 20:29 [PATCH tip/core/rcu 0/18] v5 add lockdep-based diagnostics to rcu_dereference() Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 01/18] rcu: introduce lockdep-based checking to RCU read-side primitives Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 02/18] rcu: add lockdep-enabled variants of rcu_dereference() Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 03/18] rcu: integrate rcu_dereference_check() message into lockdep Paul E. McKenney
2010-02-17 20:29 ` Paul E. McKenney [this message]
2010-02-17 20:29 ` [PATCH tip/core/rcu 05/18] net: add checking to rcu_dereference() primitives Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 06/18] sched: use lockdep-based checking on rcu_dereference() Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 07/18] sched: better name for for_each_domain_rd Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 08/18] vfs: apply lockdep-based checking to rcu_dereference() uses Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 09/18] vfs: abstract rcu_dereference_check for files-fdtable use Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 10/18] radix-tree: disable RCU lockdep checking in radix tree Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 11/18] idr: apply lockdep-based diagnostics to rcu_dereference() uses Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 12/18] security: apply lockdep-based checking " Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 13/18] rcu: documentation update for CONFIG_PROVE_RCU Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 14/18] rcu: fix citation of Mathieu's dissertation Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 15/18] rcu: accelerate grace period if last non-dynticked CPU Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 16/18] rcu: use canonical URL for Mathieu's dissertation Paul E. McKenney
2010-02-17 20:29 ` [PATCH tip/core/rcu 17/18] rcu: stop overflowing signed integers Paul E. McKenney
2010-02-17 21:30 ` Mathieu Desnoyers
2010-02-17 20:29 ` [PATCH tip/core/rcu 18/18] The spinlocks in rcutree need to be real spinlocks in preempt-rt. Convert them to raw_spinlocks Paul E. McKenney
2010-02-18 16:57 ` [PATCH tip/core/rcu 18/18 amended] rcu: Convert " Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1266438584-29173-4-git-send-email-paulmck@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhltc@us.ibm.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=niv@us.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®