diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-02-22 20:04:54 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-02-25 04:34:50 -0500 |
commit | 2676a58c980b7ef076cc9bbff3fd8c9d2d5417ea (patch) | |
tree | e33561a942ee89c7b6574e55f93c6e08282be54e | |
parent | af61b96b4f68f7ab25ebf34fed275fabf64f2edc (diff) |
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>
-rw-r--r-- | 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 92cdd9936e3d..6b9670d6bbf9 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, | |||
364 | unsigned int height, shift; | 364 | unsigned int height, shift; |
365 | struct radix_tree_node *node, **slot; | 365 | struct radix_tree_node *node, **slot; |
366 | 366 | ||
367 | node = rcu_dereference(root->rnode); | 367 | node = rcu_dereference_raw(root->rnode); |
368 | if (node == NULL) | 368 | if (node == NULL) |
369 | return NULL; | 369 | return NULL; |
370 | 370 | ||
@@ -384,7 +384,7 @@ static void *radix_tree_lookup_element(struct radix_tree_root *root, | |||
384 | do { | 384 | do { |
385 | slot = (struct radix_tree_node **) | 385 | slot = (struct radix_tree_node **) |
386 | (node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK)); | 386 | (node->slots + ((index>>shift) & RADIX_TREE_MAP_MASK)); |
387 | node = rcu_dereference(*slot); | 387 | node = rcu_dereference_raw(*slot); |
388 | if (node == NULL) | 388 | if (node == NULL) |
389 | return NULL; | 389 | return NULL; |
390 | 390 | ||
@@ -568,7 +568,7 @@ int radix_tree_tag_get(struct radix_tree_root *root, | |||
568 | if (!root_tag_get(root, tag)) | 568 | if (!root_tag_get(root, tag)) |
569 | return 0; | 569 | return 0; |
570 | 570 | ||
571 | node = rcu_dereference(root->rnode); | 571 | node = rcu_dereference_raw(root->rnode); |
572 | if (node == NULL) | 572 | if (node == NULL) |
573 | return 0; | 573 | return 0; |
574 | 574 | ||
@@ -602,7 +602,7 @@ int radix_tree_tag_get(struct radix_tree_root *root, | |||
602 | BUG_ON(ret && saw_unset_tag); | 602 | BUG_ON(ret && saw_unset_tag); |
603 | return !!ret; | 603 | return !!ret; |
604 | } | 604 | } |
605 | node = rcu_dereference(node->slots[offset]); | 605 | node = rcu_dereference_raw(node->slots[offset]); |
606 | shift -= RADIX_TREE_MAP_SHIFT; | 606 | shift -= RADIX_TREE_MAP_SHIFT; |
607 | height--; | 607 | height--; |
608 | } | 608 | } |
@@ -711,7 +711,7 @@ __lookup(struct radix_tree_node *slot, void ***results, unsigned long index, | |||
711 | } | 711 | } |
712 | 712 | ||
713 | shift -= RADIX_TREE_MAP_SHIFT; | 713 | shift -= RADIX_TREE_MAP_SHIFT; |
714 | slot = rcu_dereference(slot->slots[i]); | 714 | slot = rcu_dereference_raw(slot->slots[i]); |
715 | if (slot == NULL) | 715 | if (slot == NULL) |
716 | goto out; | 716 | goto out; |
717 | } | 717 | } |
@@ -758,7 +758,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | |||
758 | unsigned long cur_index = first_index; | 758 | unsigned long cur_index = first_index; |
759 | unsigned int ret; | 759 | unsigned int ret; |
760 | 760 | ||
761 | node = rcu_dereference(root->rnode); | 761 | node = rcu_dereference_raw(root->rnode); |
762 | if (!node) | 762 | if (!node) |
763 | return 0; | 763 | return 0; |
764 | 764 | ||
@@ -787,7 +787,7 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | |||
787 | slot = *(((void ***)results)[ret + i]); | 787 | slot = *(((void ***)results)[ret + i]); |
788 | if (!slot) | 788 | if (!slot) |
789 | continue; | 789 | continue; |
790 | results[ret + nr_found] = rcu_dereference(slot); | 790 | results[ret + nr_found] = rcu_dereference_raw(slot); |
791 | nr_found++; | 791 | nr_found++; |
792 | } | 792 | } |
793 | ret += nr_found; | 793 | ret += nr_found; |
@@ -826,7 +826,7 @@ radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results, | |||
826 | unsigned long cur_index = first_index; | 826 | unsigned long cur_index = first_index; |
827 | unsigned int ret; | 827 | unsigned int ret; |
828 | 828 | ||
829 | node = rcu_dereference(root->rnode); | 829 | node = rcu_dereference_raw(root->rnode); |
830 | if (!node) | 830 | if (!node) |
831 | return 0; | 831 | return 0; |
832 | 832 | ||
@@ -915,7 +915,7 @@ __lookup_tag(struct radix_tree_node *slot, void ***results, unsigned long index, | |||
915 | } | 915 | } |
916 | } | 916 | } |
917 | shift -= RADIX_TREE_MAP_SHIFT; | 917 | shift -= RADIX_TREE_MAP_SHIFT; |
918 | slot = rcu_dereference(slot->slots[i]); | 918 | slot = rcu_dereference_raw(slot->slots[i]); |
919 | if (slot == NULL) | 919 | if (slot == NULL) |
920 | break; | 920 | break; |
921 | } | 921 | } |
@@ -951,7 +951,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, | |||
951 | if (!root_tag_get(root, tag)) | 951 | if (!root_tag_get(root, tag)) |
952 | return 0; | 952 | return 0; |
953 | 953 | ||
954 | node = rcu_dereference(root->rnode); | 954 | node = rcu_dereference_raw(root->rnode); |
955 | if (!node) | 955 | if (!node) |
956 | return 0; | 956 | return 0; |
957 | 957 | ||
@@ -980,7 +980,7 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, | |||
980 | slot = *(((void ***)results)[ret + i]); | 980 | slot = *(((void ***)results)[ret + i]); |
981 | if (!slot) | 981 | if (!slot) |
982 | continue; | 982 | continue; |
983 | results[ret + nr_found] = rcu_dereference(slot); | 983 | results[ret + nr_found] = rcu_dereference_raw(slot); |
984 | nr_found++; | 984 | nr_found++; |
985 | } | 985 | } |
986 | ret += nr_found; | 986 | ret += nr_found; |
@@ -1020,7 +1020,7 @@ radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results, | |||
1020 | if (!root_tag_get(root, tag)) | 1020 | if (!root_tag_get(root, tag)) |
1021 | return 0; | 1021 | return 0; |
1022 | 1022 | ||
1023 | node = rcu_dereference(root->rnode); | 1023 | node = rcu_dereference_raw(root->rnode); |
1024 | if (!node) | 1024 | if (!node) |
1025 | return 0; | 1025 | return 0; |
1026 | 1026 | ||