All of lore.kernel.org
 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 10/21] radix-tree: disable RCU lockdep checking in radix tree
@ 2010-02-23  1:04 Paul E. McKenney
  2010-02-25 10:12 ` [tip:core/rcu] radix-tree: 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

Because the radix tree is used with many different locking designs, we
cannot do any effective checking without changing the radix-tree APIs.
It might make sense to do this later, but only if the RCU lockdep checking
proves itself sufficiently valuable.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 lib/radix-tree.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/lib/radix-tree.c b/lib/radix-tree.c
index 92cdd99..6b9670d 100644
--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
@@ -364,7 +364,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root,
 	unsigned int height, shift;
 	struct radix_tree_node *node, **slot;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (node == NULL)
 		return NULL;
 
@@ -384,7 +384,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root,
 	do {
 		slot = (struct radix_tree_node **)
 			(node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK));
-		node = rcu_dereference(*slot);
+		node = rcu_dereference_raw(*slot);
 		if (node == NULL)
 			return NULL;
 
@@ -568,7 +568,7 @@ int radix_tree_tag_get(struct radix_tree_root *root,
 	if (!root_tag_get(root, tag))
 		return 0;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (node == NULL)
 		return 0;
 
@@ -602,7 +602,7 @@ int radix_tree_tag_get(struct radix_tree_root *root,
 			BUG_ON(ret && saw_unset_tag);
 			return !!ret;
 		}
-		node = rcu_dereference(node->slots[offset]);
+		node = rcu_dereference_raw(node->slots[offset]);
 		shift -= RADIX_TREE_MAP_SHIFT;
 		height--;
 	}
@@ -711,7 +711,7 @@ __lookup(struct radix_tree_node *slot, void ***results, unsigned long index,
 		}
 
 		shift -= RADIX_TREE_MAP_SHIFT;
-		slot = rcu_dereference(slot->slots[i]);
+		slot = rcu_dereference_raw(slot->slots[i]);
 		if (slot == NULL)
 			goto out;
 	}
@@ -758,7 +758,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
 	unsigned long cur_index = first_index;
 	unsigned int ret;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (!node)
 		return 0;
 
@@ -787,7 +787,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
 			slot = *(((void ***)results)[ret + i]);
 			if (!slot)
 				continue;
-			results[ret + nr_found] = rcu_dereference(slot);
+			results[ret + nr_found] = rcu_dereference_raw(slot);
 			nr_found++;
 		}
 		ret += nr_found;
@@ -826,7 +826,7 @@ radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results,
 	unsigned long cur_index = first_index;
 	unsigned int ret;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (!node)
 		return 0;
 
@@ -915,7 +915,7 @@ __lookup_tag(struct radix_tree_node *slot, void ***results, unsigned long index,
 			}
 		}
 		shift -= RADIX_TREE_MAP_SHIFT;
-		slot = rcu_dereference(slot->slots[i]);
+		slot = rcu_dereference_raw(slot->slots[i]);
 		if (slot == NULL)
 			break;
 	}
@@ -951,7 +951,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
 	if (!root_tag_get(root, tag))
 		return 0;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (!node)
 		return 0;
 
@@ -980,7 +980,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
 			slot = *(((void ***)results)[ret + i]);
 			if (!slot)
 				continue;
-			results[ret + nr_found] = rcu_dereference(slot);
+			results[ret + nr_found] = rcu_dereference_raw(slot);
 			nr_found++;
 		}
 		ret += nr_found;
@@ -1020,7 +1020,7 @@ radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results,
 	if (!root_tag_get(root, tag))
 		return 0;
 
-	node = rcu_dereference(root->rnode);
+	node = rcu_dereference_raw(root->rnode);
 	if (!node)
 		return 0;
 
-- 
1.6.6


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

end of thread, other threads:[~2010-02-25 10:12 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
  -- strict thread matches above, loose matches on Subject: below --
2010-02-23  1:04 [PATCH tip/core/rcu 10/21] radix-tree: disable RCU lockdep checking in radix tree Paul E. McKenney
2010-02-25 10:12 ` [tip:core/rcu] radix-tree: Disable " tip-bot for Paul E. McKenney

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.