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: Paul 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: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
af61b96b4f
commit
2676a58c98
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue