Loading lib/test_xarray.c +32 −0 Original line number Diff line number Diff line Loading @@ -1019,6 +1019,37 @@ static noinline void check_workingset(struct xarray *xa, unsigned long index) XA_BUG_ON(xa, !xa_empty(xa)); } /* * Check that the pointer / value / sibling entries are accounted the * way we expect them to be. */ static noinline void check_account(struct xarray *xa) { #ifdef CONFIG_XARRAY_MULTI unsigned int order; for (order = 1; order < 12; order++) { XA_STATE(xas, xa, 1 << order); xa_store_order(xa, 0, order, xa, GFP_KERNEL); xas_load(&xas); XA_BUG_ON(xa, xas.xa_node->count == 0); XA_BUG_ON(xa, xas.xa_node->count > (1 << order)); XA_BUG_ON(xa, xas.xa_node->nr_values != 0); xa_store_order(xa, 1 << order, order, xa_mk_value(1 << order), GFP_KERNEL); XA_BUG_ON(xa, xas.xa_node->count != xas.xa_node->nr_values * 2); xa_erase(xa, 1 << order); XA_BUG_ON(xa, xas.xa_node->nr_values != 0); xa_erase(xa, 0); XA_BUG_ON(xa, !xa_empty(xa)); } #endif } static noinline void check_destroy(struct xarray *xa) { unsigned long index; Loading Loading @@ -1068,6 +1099,7 @@ static int xarray_checks(void) check_xa_alloc(); check_find(&array); check_find_entry(&array); check_account(&array); check_destroy(&array); check_move(&array); check_create_range(&array); Loading tools/testing/radix-tree/multiorder.c +0 −24 Original line number Diff line number Diff line Loading @@ -356,29 +356,6 @@ void multiorder_tagged_iteration(void) item_kill_tree(&tree); } static void multiorder_account(void) { RADIX_TREE(tree, GFP_KERNEL); struct radix_tree_node *node; void **slot; item_insert_order(&tree, 0, 5); __radix_tree_insert(&tree, 1 << 5, 5, xa_mk_value(5)); __radix_tree_lookup(&tree, 0, &node, NULL); assert(node->count == node->nr_values * 2); radix_tree_delete(&tree, 1 << 5); assert(node->nr_values == 0); __radix_tree_insert(&tree, 1 << 5, 5, xa_mk_value(5)); __radix_tree_lookup(&tree, 1 << 5, &node, &slot); assert(node->count == node->nr_values * 2); __radix_tree_replace(&tree, node, slot, NULL); assert(node->nr_values == 0); item_kill_tree(&tree); } bool stop_iteration = false; static void *creator_func(void *ptr) Loading Loading @@ -457,7 +434,6 @@ void multiorder_checks(void) multiorder_tag_tests(); multiorder_iteration(); multiorder_tagged_iteration(); multiorder_account(); multiorder_iteration_race(); radix_tree_cpu_dead(0); Loading Loading
lib/test_xarray.c +32 −0 Original line number Diff line number Diff line Loading @@ -1019,6 +1019,37 @@ static noinline void check_workingset(struct xarray *xa, unsigned long index) XA_BUG_ON(xa, !xa_empty(xa)); } /* * Check that the pointer / value / sibling entries are accounted the * way we expect them to be. */ static noinline void check_account(struct xarray *xa) { #ifdef CONFIG_XARRAY_MULTI unsigned int order; for (order = 1; order < 12; order++) { XA_STATE(xas, xa, 1 << order); xa_store_order(xa, 0, order, xa, GFP_KERNEL); xas_load(&xas); XA_BUG_ON(xa, xas.xa_node->count == 0); XA_BUG_ON(xa, xas.xa_node->count > (1 << order)); XA_BUG_ON(xa, xas.xa_node->nr_values != 0); xa_store_order(xa, 1 << order, order, xa_mk_value(1 << order), GFP_KERNEL); XA_BUG_ON(xa, xas.xa_node->count != xas.xa_node->nr_values * 2); xa_erase(xa, 1 << order); XA_BUG_ON(xa, xas.xa_node->nr_values != 0); xa_erase(xa, 0); XA_BUG_ON(xa, !xa_empty(xa)); } #endif } static noinline void check_destroy(struct xarray *xa) { unsigned long index; Loading Loading @@ -1068,6 +1099,7 @@ static int xarray_checks(void) check_xa_alloc(); check_find(&array); check_find_entry(&array); check_account(&array); check_destroy(&array); check_move(&array); check_create_range(&array); Loading
tools/testing/radix-tree/multiorder.c +0 −24 Original line number Diff line number Diff line Loading @@ -356,29 +356,6 @@ void multiorder_tagged_iteration(void) item_kill_tree(&tree); } static void multiorder_account(void) { RADIX_TREE(tree, GFP_KERNEL); struct radix_tree_node *node; void **slot; item_insert_order(&tree, 0, 5); __radix_tree_insert(&tree, 1 << 5, 5, xa_mk_value(5)); __radix_tree_lookup(&tree, 0, &node, NULL); assert(node->count == node->nr_values * 2); radix_tree_delete(&tree, 1 << 5); assert(node->nr_values == 0); __radix_tree_insert(&tree, 1 << 5, 5, xa_mk_value(5)); __radix_tree_lookup(&tree, 1 << 5, &node, &slot); assert(node->count == node->nr_values * 2); __radix_tree_replace(&tree, node, slot, NULL); assert(node->nr_values == 0); item_kill_tree(&tree); } bool stop_iteration = false; static void *creator_func(void *ptr) Loading Loading @@ -457,7 +434,6 @@ void multiorder_checks(void) multiorder_tag_tests(); multiorder_iteration(); multiorder_tagged_iteration(); multiorder_account(); multiorder_iteration_race(); radix_tree_cpu_dead(0); Loading