Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2676a58c authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar
Browse files

radix-tree: Disable RCU lockdep checking in radix tree



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: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <1266887105-1528-10-git-send-email-paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent af61b96b
Loading
Loading
Loading
Loading
+12 −12
Original line number Original line Diff line number Diff line
@@ -364,7 +364,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root,
	unsigned int height, shift;
	unsigned int height, shift;
	struct radix_tree_node *node, **slot;
	struct radix_tree_node *node, **slot;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (node == NULL)
	if (node == NULL)
		return NULL;
		return NULL;


@@ -384,7 +384,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root,
	do {
	do {
		slot = (struct radix_tree_node **)
		slot = (struct radix_tree_node **)
			(node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK));
			(node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK));
		node = rcu_dereference(*slot);
		node = rcu_dereference_raw(*slot);
		if (node == NULL)
		if (node == NULL)
			return NULL;
			return NULL;


@@ -568,7 +568,7 @@ int radix_tree_tag_get(struct radix_tree_root *root,
	if (!root_tag_get(root, tag))
	if (!root_tag_get(root, tag))
		return 0;
		return 0;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (node == NULL)
	if (node == NULL)
		return 0;
		return 0;


@@ -602,7 +602,7 @@ int radix_tree_tag_get(struct radix_tree_root *root,
			BUG_ON(ret && saw_unset_tag);
			BUG_ON(ret && saw_unset_tag);
			return !!ret;
			return !!ret;
		}
		}
		node = rcu_dereference(node->slots[offset]);
		node = rcu_dereference_raw(node->slots[offset]);
		shift -= RADIX_TREE_MAP_SHIFT;
		shift -= RADIX_TREE_MAP_SHIFT;
		height--;
		height--;
	}
	}
@@ -711,7 +711,7 @@ __lookup(struct radix_tree_node *slot, void ***results, unsigned long index,
		}
		}


		shift -= RADIX_TREE_MAP_SHIFT;
		shift -= RADIX_TREE_MAP_SHIFT;
		slot = rcu_dereference(slot->slots[i]);
		slot = rcu_dereference_raw(slot->slots[i]);
		if (slot == NULL)
		if (slot == NULL)
			goto out;
			goto out;
	}
	}
@@ -758,7 +758,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
	unsigned long cur_index = first_index;
	unsigned long cur_index = first_index;
	unsigned int ret;
	unsigned int ret;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (!node)
	if (!node)
		return 0;
		return 0;


@@ -787,7 +787,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
			slot = *(((void ***)results)[ret + i]);
			slot = *(((void ***)results)[ret + i]);
			if (!slot)
			if (!slot)
				continue;
				continue;
			results[ret + nr_found] = rcu_dereference(slot);
			results[ret + nr_found] = rcu_dereference_raw(slot);
			nr_found++;
			nr_found++;
		}
		}
		ret += 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 long cur_index = first_index;
	unsigned int ret;
	unsigned int ret;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (!node)
	if (!node)
		return 0;
		return 0;


@@ -915,7 +915,7 @@ __lookup_tag(struct radix_tree_node *slot, void ***results, unsigned long index,
			}
			}
		}
		}
		shift -= RADIX_TREE_MAP_SHIFT;
		shift -= RADIX_TREE_MAP_SHIFT;
		slot = rcu_dereference(slot->slots[i]);
		slot = rcu_dereference_raw(slot->slots[i]);
		if (slot == NULL)
		if (slot == NULL)
			break;
			break;
	}
	}
@@ -951,7 +951,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
	if (!root_tag_get(root, tag))
	if (!root_tag_get(root, tag))
		return 0;
		return 0;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (!node)
	if (!node)
		return 0;
		return 0;


@@ -980,7 +980,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
			slot = *(((void ***)results)[ret + i]);
			slot = *(((void ***)results)[ret + i]);
			if (!slot)
			if (!slot)
				continue;
				continue;
			results[ret + nr_found] = rcu_dereference(slot);
			results[ret + nr_found] = rcu_dereference_raw(slot);
			nr_found++;
			nr_found++;
		}
		}
		ret += 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))
	if (!root_tag_get(root, tag))
		return 0;
		return 0;


	node = rcu_dereference(root->rnode);
	node = rcu_dereference_raw(root->rnode);
	if (!node)
	if (!node)
		return 0;
		return 0;