mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH tip/core/rcu 0/8] rcu: add lockdep-based diagnostics to rcu_dereference()
@ 2010-01-05  2:03 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
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: Paul E. McKenney @ 2010-01-05  2:03 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc,
	niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells

Hello!

This patch series adds lockdep-based checking to the rcu_dereference()
primitive in order to flag misuses of RCU.  The first three patches
put the RCU infrastructure in place, while the last five use this
infrastructure in the net, sched, vfs, radix-tree, and idr subsystems.
There are very likely additional changes required.

							Thanx, Paul


 b/fs/file.c                     |    2 
 b/include/linux/cgroup.h        |    2 
 b/include/linux/cred.h          |    2 
 b/include/linux/fdtable.h       |    8 +-
 b/include/linux/rculist.h       |   14 ++--
 b/include/linux/rculist_nulls.h |    5 -
 b/include/linux/rcupdate.h      |  124 ++++++++++++++++++++++++++++++++++++----
 b/include/linux/srcu.h          |   87 +++++++++++++++++++++++++++-
 b/init/main.c                   |    2 
 b/kernel/exit.c                 |   14 +++-
 b/kernel/fork.c                 |    1 
 b/kernel/notifier.c             |    6 -
 b/kernel/pid.c                  |    2 
 b/kernel/rcupdate.c             |   10 +++
 b/kernel/rcutorture.c           |   12 +++
 b/kernel/sched.c                |    7 --
 b/kernel/srcu.c                 |   50 ++++++++++------
 b/lib/debug_locks.c             |    2 
 b/lib/idr.c                     |    9 +-
 b/lib/radix-tree.c              |   25 +++-----
 b/net/core/dev.c                |    2 
 b/net/core/filter.c             |    6 -
 b/net/core/sock.c               |    2 
 b/net/decnet/dn_route.c         |   14 ++--
 b/net/ipv4/route.c              |   14 ++--
 b/net/packet/af_packet.c        |    3 
 include/linux/rcupdate.h        |   45 ++++++++++----
 include/linux/srcu.h            |    9 ++
 28 files changed, 369 insertions(+), 110 deletions(-)

^ permalink raw reply	[flat|nested] 21+ messages in thread
* [PATCH tip/core/rcu 04/21] rcu: disable lockdep checking in RCU list-traversal primitives
@ 2010-02-23  1:04 Paul E. McKenney
  2010-02-25 10:10 ` [tip:core/rcu] rcu: Disable " tip-bot for Paul E. McKenney
  0 siblings, 1 reply; 21+ messages in thread
From: Paul E. McKenney @ 2010-02-23  1:04 UTC (permalink / raw)
  To: linux-kernel
  Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, dvhltc,
	niv, tglx, peterz, rostedt, Valdis.Kletnieks, dhowells,
	Paul E. McKenney

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


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2010-02-25 10:10 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [PATCH tip/core/rcu 3/8] rcu: disable lockdep checking in RCU list-traversal primitives Paul E. McKenney
2010-01-13 10:29   ` [tip:core/rcu] rcu: Disable " 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
2010-02-23  1:04 [PATCH tip/core/rcu 04/21] rcu: disable lockdep checking in RCU list-traversal primitives Paul E. McKenney
2010-02-25 10:10 ` [tip:core/rcu] rcu: Disable " tip-bot for Paul E. McKenney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome