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 02/21] rcu: add lockdep-enabled variants of rcu_dereference()
@ 2010-02-23  1:04 Paul E. McKenney
  2010-02-25 10:09 ` [tip:core/rcu] rcu: Add " 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

Make rcu_dereference() check for being in an RCU read-side critical
section, and create rcu_dereference_bh(), rcu_dereference_sched(), and
srcu_dereference() to check for the other flavors of RCU.  Also create
rcu_dereference_raw() to avoid checking, and make rcu_dereference_check()
use rcu_dereference_raw().

Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 include/linux/rcupdate.h |   41 ++++++++++++++++++++++++++++++++++-------
 include/linux/srcu.h     |    8 ++++++++
 2 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index e3d37ef..839d296 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -184,12 +184,12 @@ static inline int rcu_read_lock_sched_held(void)
 	({ \
 		if (debug_locks) \
 			WARN_ON_ONCE(!(c)); \
-		rcu_dereference(p); \
+		rcu_dereference_raw(p); \
 	})
 
 #else /* #ifdef CONFIG_PROVE_RCU */
 
-#define rcu_dereference_check(p, c)	rcu_dereference(p)
+#define rcu_dereference_check(p, c)	rcu_dereference_raw(p)
 
 #endif /* #else #ifdef CONFIG_PROVE_RCU */
 
@@ -325,22 +325,49 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
 
 
 /**
- * rcu_dereference - fetch an RCU-protected pointer in an
- * RCU read-side critical section.  This pointer may later
- * be safely dereferenced.
+ * rcu_dereference_raw - fetch an RCU-protected pointer
+ *
+ * The caller must be within some flavor of RCU read-side critical
+ * section, or must be otherwise preventing the pointer from changing,
+ * for example, by holding an appropriate lock.  This pointer may later
+ * be safely dereferenced.  It is the caller's responsibility to have
+ * done the right thing, as this primitive does no checking of any kind.
  *
  * Inserts memory barriers on architectures that require them
  * (currently only the Alpha), and, more importantly, documents
  * exactly which pointers are protected by RCU.
  */
-
-#define rcu_dereference(p)     ({ \
+#define rcu_dereference_raw(p)	({ \
 				typeof(p) _________p1 = ACCESS_ONCE(p); \
 				smp_read_barrier_depends(); \
 				(_________p1); \
 				})
 
 /**
+ * rcu_dereference - fetch an RCU-protected pointer, checking for RCU
+ *
+ * Makes rcu_dereference_check() do the dirty work.
+ */
+#define rcu_dereference(p) \
+	rcu_dereference_check(p, rcu_read_lock_held())
+
+/**
+ * rcu_dereference_bh - fetch an RCU-protected pointer, checking for RCU-bh
+ *
+ * Makes rcu_dereference_check() do the dirty work.
+ */
+#define rcu_dereference_bh(p) \
+		rcu_dereference_check(p, rcu_read_lock_bh_held())
+
+/**
+ * rcu_dereference_sched - fetch RCU-protected pointer, checking for RCU-sched
+ *
+ * Makes rcu_dereference_check() do the dirty work.
+ */
+#define rcu_dereference_sched(p) \
+		rcu_dereference_check(p, rcu_read_lock_sched_held())
+
+/**
  * rcu_assign_pointer - assign (publicize) a pointer to a newly
  * initialized structure that will be dereferenced by RCU read-side
  * critical sections.  Returns the value assigned.
diff --git a/include/linux/srcu.h b/include/linux/srcu.h
index adbe167..3084f80 100644
--- a/include/linux/srcu.h
+++ b/include/linux/srcu.h
@@ -106,6 +106,14 @@ static inline int srcu_read_lock_held(struct srcu_struct *sp)
 #endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 
 /**
+ * srcu_dereference - fetch SRCU-protected pointer with checking
+ *
+ * Makes rcu_dereference_check() do the dirty work.
+ */
+#define srcu_dereference(p, sp) \
+		rcu_dereference_check(p, srcu_read_lock_held(sp))
+
+/**
  * srcu_read_lock - register a new reader for an SRCU-protected structure.
  * @sp: srcu_struct in which to register the new reader.
  *
-- 
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 02/21] rcu: add lockdep-enabled variants of rcu_dereference() Paul E. McKenney
2010-02-25 10:09 ` [tip:core/rcu] rcu: Add " 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