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 3/8] rcu: disable lockdep checking in RCU list-traversal primitives
Date: Mon, 4 Jan 2010 18:04:06 -0800 [thread overview]
Message-ID: <12626570513455-git-send-email-> (raw)
In-Reply-To: <20100105020345.GA32114@linux.vnet.ibm.com>
From: Paul E. McKenney <paulmck@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 5710f43..0d4b617 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))
/**
* hlist_del_rcu - deletes entry from hash list without re-initialization
@@ -404,10 +404,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.5.2.5
next prev parent reply other threads:[~2010-01-05 2:04 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-05 2:03 [PATCH tip/core/rcu 0/8] rcu: add lockdep-based diagnostics to rcu_dereference() Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 1/8] rcu: introduce lockdep-based checking to RCU read-side primitives Paul E. McKenney
2010-01-13 10:28 ` [tip:core/rcu] rcu: Introduce " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 2/8] rcu: add lockdep-enabled variants of rcu_dereference() Paul E. McKenney
2010-01-13 10:28 ` [tip:core/rcu] rcu: Add " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` Paul E. McKenney [this message]
2010-01-13 10:29 ` [tip:core/rcu] rcu: Disable lockdep checking in RCU list-traversal primitives tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 4/8] net: add checking to rcu_dereference() primitives Paul E. McKenney
2010-01-13 10:30 ` [tip:core/rcu] net: Add " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 5/8] sched: use lockdep-based checking on rcu_dereference() Paul E. McKenney
2010-01-13 10:29 ` [tip:core/rcu] sched: Use " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 6/8] vfs: apply lockdep-based checking to rcu_dereference() uses Paul E. McKenney
2010-01-13 10:30 ` [tip:core/rcu] vfs: Apply " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 7/8] radix-tree: disable RCU lockdep checking in radix tree Paul E. McKenney
2010-01-13 10:29 ` [tip:core/rcu] radix-tree: Disable " tip-bot for Paul E. McKenney
2010-01-05 2:04 ` [PATCH tip/core/rcu 8/8] idr: apply lockdep-based diagnostics to rcu_dereference() uses Paul E. McKenney
2010-01-13 10:29 ` [tip:core/rcu] idr: Apply " tip-bot for Paul E. McKenney
2010-01-13 9:22 ` [PATCH tip/core/rcu 0/8] rcu: add lockdep-based diagnostics to rcu_dereference() Ingo Molnar
2010-01-13 16:17 ` Paul E. McKenney
2010-01-13 16:37 ` Ingo Molnar
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=12626570513455-git-send-email- \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.