radix tree test suite: Dial down verbosity with -v
Make the output of radix tree test suite less verbose by default and add -v and -vv command line options for increasing level of verbosity. Signed-off-by: Rehas Sachdeva <aquannie@gmail.com> Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
This commit is contained in:
parent
5eeb2d23df
commit
73bc029b76
|
@ -71,7 +71,7 @@ static void benchmark_size(unsigned long size, unsigned long step, int order)
|
||||||
tagged = benchmark_iter(&tree, true);
|
tagged = benchmark_iter(&tree, true);
|
||||||
normal = benchmark_iter(&tree, false);
|
normal = benchmark_iter(&tree, false);
|
||||||
|
|
||||||
printf("Size %ld, step %6ld, order %d tagged %10lld ns, normal %10lld ns\n",
|
printv(2, "Size %ld, step %6ld, order %d tagged %10lld ns, normal %10lld ns\n",
|
||||||
size, step, order, tagged, normal);
|
size, step, order, tagged, normal);
|
||||||
|
|
||||||
item_kill_tree(&tree);
|
item_kill_tree(&tree);
|
||||||
|
@ -85,8 +85,8 @@ void benchmark(void)
|
||||||
128, 256, 512, 12345, 0};
|
128, 256, 512, 12345, 0};
|
||||||
int c, s;
|
int c, s;
|
||||||
|
|
||||||
printf("starting benchmarks\n");
|
printv(1, "starting benchmarks\n");
|
||||||
printf("RADIX_TREE_MAP_SHIFT = %d\n", RADIX_TREE_MAP_SHIFT);
|
printv(1, "RADIX_TREE_MAP_SHIFT = %d\n", RADIX_TREE_MAP_SHIFT);
|
||||||
|
|
||||||
for (c = 0; size[c]; c++)
|
for (c = 0; size[c]; c++)
|
||||||
for (s = 0; step[s]; s++)
|
for (s = 0; step[s]; s++)
|
||||||
|
|
|
@ -177,7 +177,7 @@ void iteration_test(unsigned order, unsigned test_duration)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf("Running %siteration tests for %d seconds\n",
|
printv(1, "Running %siteration tests for %d seconds\n",
|
||||||
order > 0 ? "multiorder " : "", test_duration);
|
order > 0 ? "multiorder " : "", test_duration);
|
||||||
|
|
||||||
max_order = order;
|
max_order = order;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
int nr_allocated;
|
int nr_allocated;
|
||||||
int preempt_count;
|
int preempt_count;
|
||||||
int kmalloc_verbose;
|
int kmalloc_verbose;
|
||||||
|
int test_verbose;
|
||||||
|
|
||||||
struct kmem_cache {
|
struct kmem_cache {
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "../../../../include/linux/radix-tree.h"
|
#include "../../../../include/linux/radix-tree.h"
|
||||||
|
|
||||||
extern int kmalloc_verbose;
|
extern int kmalloc_verbose;
|
||||||
|
extern int test_verbose;
|
||||||
|
|
||||||
static inline void trace_call_rcu(struct rcu_head *head,
|
static inline void trace_call_rcu(struct rcu_head *head,
|
||||||
void (*func)(struct rcu_head *head))
|
void (*func)(struct rcu_head *head))
|
||||||
|
@ -12,6 +13,11 @@ static inline void trace_call_rcu(struct rcu_head *head,
|
||||||
offsetof(struct radix_tree_node, rcu_head));
|
offsetof(struct radix_tree_node, rcu_head));
|
||||||
call_rcu(head, func);
|
call_rcu(head, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define printv(verbosity_level, fmt, ...) \
|
||||||
|
if(test_verbose >= verbosity_level) \
|
||||||
|
printf(fmt, ##__VA_ARGS__)
|
||||||
|
|
||||||
#undef call_rcu
|
#undef call_rcu
|
||||||
#define call_rcu(x, y) trace_call_rcu(x, y)
|
#define call_rcu(x, y) trace_call_rcu(x, y)
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ void big_gang_check(bool long_run)
|
||||||
|
|
||||||
for (i = 0; i < (long_run ? 1000 : 3); i++) {
|
for (i = 0; i < (long_run ? 1000 : 3); i++) {
|
||||||
__big_gang_check();
|
__big_gang_check();
|
||||||
printf("%d ", i);
|
printv(2, "%d ", i);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,14 +129,19 @@ void check_copied_tags(struct radix_tree_root *tree, unsigned long start, unsign
|
||||||
putchar('.'); */
|
putchar('.'); */
|
||||||
if (idx[i] < start || idx[i] > end) {
|
if (idx[i] < start || idx[i] > end) {
|
||||||
if (item_tag_get(tree, idx[i], totag)) {
|
if (item_tag_get(tree, idx[i], totag)) {
|
||||||
printf("%lu-%lu: %lu, tags %d-%d\n", start, end, idx[i], item_tag_get(tree, idx[i], fromtag), item_tag_get(tree, idx[i], totag));
|
printv(2, "%lu-%lu: %lu, tags %d-%d\n", start,
|
||||||
|
end, idx[i], item_tag_get(tree, idx[i],
|
||||||
|
fromtag),
|
||||||
|
item_tag_get(tree, idx[i], totag));
|
||||||
}
|
}
|
||||||
assert(!item_tag_get(tree, idx[i], totag));
|
assert(!item_tag_get(tree, idx[i], totag));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (item_tag_get(tree, idx[i], fromtag) ^
|
if (item_tag_get(tree, idx[i], fromtag) ^
|
||||||
item_tag_get(tree, idx[i], totag)) {
|
item_tag_get(tree, idx[i], totag)) {
|
||||||
printf("%lu-%lu: %lu, tags %d-%d\n", start, end, idx[i], item_tag_get(tree, idx[i], fromtag), item_tag_get(tree, idx[i], totag));
|
printv(2, "%lu-%lu: %lu, tags %d-%d\n", start, end,
|
||||||
|
idx[i], item_tag_get(tree, idx[i], fromtag),
|
||||||
|
item_tag_get(tree, idx[i], totag));
|
||||||
}
|
}
|
||||||
assert(!(item_tag_get(tree, idx[i], fromtag) ^
|
assert(!(item_tag_get(tree, idx[i], fromtag) ^
|
||||||
item_tag_get(tree, idx[i], totag)));
|
item_tag_get(tree, idx[i], totag)));
|
||||||
|
@ -238,7 +243,7 @@ static void __locate_check(struct radix_tree_root *tree, unsigned long index,
|
||||||
item = item_lookup(tree, index);
|
item = item_lookup(tree, index);
|
||||||
index2 = find_item(tree, item);
|
index2 = find_item(tree, item);
|
||||||
if (index != index2) {
|
if (index != index2) {
|
||||||
printf("index %ld order %d inserted; found %ld\n",
|
printv(2, "index %ld order %d inserted; found %ld\n",
|
||||||
index, order, index2);
|
index, order, index2);
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
@ -289,48 +294,48 @@ static void single_thread_tests(bool long_run)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
printf("starting single_thread_tests: %d allocated, preempt %d\n",
|
printv(1, "starting single_thread_tests: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
multiorder_checks();
|
multiorder_checks();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after multiorder_check: %d allocated, preempt %d\n",
|
printv(2, "after multiorder_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
locate_check();
|
locate_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after locate_check: %d allocated, preempt %d\n",
|
printv(2, "after locate_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
tag_check();
|
tag_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after tag_check: %d allocated, preempt %d\n",
|
printv(2, "after tag_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
gang_check();
|
gang_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after gang_check: %d allocated, preempt %d\n",
|
printv(2, "after gang_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
add_and_check();
|
add_and_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after add_and_check: %d allocated, preempt %d\n",
|
printv(2, "after add_and_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
dynamic_height_check();
|
dynamic_height_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after dynamic_height_check: %d allocated, preempt %d\n",
|
printv(2, "after dynamic_height_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
idr_checks();
|
idr_checks();
|
||||||
ida_checks();
|
ida_checks();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after idr_checks: %d allocated, preempt %d\n",
|
printv(2, "after idr_checks: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
big_gang_check(long_run);
|
big_gang_check(long_run);
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after big_gang_check: %d allocated, preempt %d\n",
|
printv(2, "after big_gang_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
for (i = 0; i < (long_run ? 2000 : 3); i++) {
|
for (i = 0; i < (long_run ? 2000 : 3); i++) {
|
||||||
copy_tag_check();
|
copy_tag_check();
|
||||||
printf("%d ", i);
|
printv(2, "%d ", i);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after copy_tag_check: %d allocated, preempt %d\n",
|
printv(2, "after copy_tag_check: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,16 +345,20 @@ int main(int argc, char **argv)
|
||||||
int opt;
|
int opt;
|
||||||
unsigned int seed = time(NULL);
|
unsigned int seed = time(NULL);
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "ls:")) != -1) {
|
while ((opt = getopt(argc, argv, "ls:v")) != -1) {
|
||||||
if (opt == 'l')
|
if (opt == 'l')
|
||||||
long_run = true;
|
long_run = true;
|
||||||
else if (opt == 's')
|
else if (opt == 's')
|
||||||
seed = strtoul(optarg, NULL, 0);
|
seed = strtoul(optarg, NULL, 0);
|
||||||
|
else if (opt == 'v')
|
||||||
|
test_verbose++;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("random seed %u\n", seed);
|
printf("random seed %u\n", seed);
|
||||||
srand(seed);
|
srand(seed);
|
||||||
|
|
||||||
|
printf("running tests\n");
|
||||||
|
|
||||||
rcu_register_thread();
|
rcu_register_thread();
|
||||||
radix_tree_init();
|
radix_tree_init();
|
||||||
|
|
||||||
|
@ -366,9 +375,11 @@ int main(int argc, char **argv)
|
||||||
benchmark();
|
benchmark();
|
||||||
|
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after rcu_barrier: %d allocated, preempt %d\n",
|
printv(2, "after rcu_barrier: %d allocated, preempt %d\n",
|
||||||
nr_allocated, preempt_count);
|
nr_allocated, preempt_count);
|
||||||
rcu_unregister_thread();
|
rcu_unregister_thread();
|
||||||
|
|
||||||
|
printf("tests completed\n");
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ static void __multiorder_tag_test(int index, int order)
|
||||||
/* our canonical entry */
|
/* our canonical entry */
|
||||||
base = index & ~((1 << order) - 1);
|
base = index & ~((1 << order) - 1);
|
||||||
|
|
||||||
printf("Multiorder tag test with index %d, canonical entry %d\n",
|
printv(2, "Multiorder tag test with index %d, canonical entry %d\n",
|
||||||
index, base);
|
index, base);
|
||||||
|
|
||||||
err = item_insert_order(&tree, index, order);
|
err = item_insert_order(&tree, index, order);
|
||||||
|
@ -150,7 +150,7 @@ static void multiorder_check(unsigned long index, int order)
|
||||||
struct item *item2 = item_create(min, order);
|
struct item *item2 = item_create(min, order);
|
||||||
RADIX_TREE(tree, GFP_KERNEL);
|
RADIX_TREE(tree, GFP_KERNEL);
|
||||||
|
|
||||||
printf("Multiorder index %ld, order %d\n", index, order);
|
printv(2, "Multiorder index %ld, order %d\n", index, order);
|
||||||
|
|
||||||
assert(item_insert_order(&tree, index, order) == 0);
|
assert(item_insert_order(&tree, index, order) == 0);
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ static void multiorder_shrink(unsigned long index, int order)
|
||||||
RADIX_TREE(tree, GFP_KERNEL);
|
RADIX_TREE(tree, GFP_KERNEL);
|
||||||
struct radix_tree_node *node;
|
struct radix_tree_node *node;
|
||||||
|
|
||||||
printf("Multiorder shrink index %ld, order %d\n", index, order);
|
printv(2, "Multiorder shrink index %ld, order %d\n", index, order);
|
||||||
|
|
||||||
assert(item_insert_order(&tree, 0, order) == 0);
|
assert(item_insert_order(&tree, 0, order) == 0);
|
||||||
|
|
||||||
|
@ -209,7 +209,8 @@ static void multiorder_shrink(unsigned long index, int order)
|
||||||
item_check_absent(&tree, i);
|
item_check_absent(&tree, i);
|
||||||
|
|
||||||
if (!item_delete(&tree, 0)) {
|
if (!item_delete(&tree, 0)) {
|
||||||
printf("failed to delete index %ld (order %d)\n", index, order); abort();
|
printv(2, "failed to delete index %ld (order %d)\n", index, order);
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 2*max; i++)
|
for (i = 0; i < 2*max; i++)
|
||||||
|
@ -234,7 +235,7 @@ void multiorder_iteration(void)
|
||||||
void **slot;
|
void **slot;
|
||||||
int i, j, err;
|
int i, j, err;
|
||||||
|
|
||||||
printf("Multiorder iteration test\n");
|
printv(1, "Multiorder iteration test\n");
|
||||||
|
|
||||||
#define NUM_ENTRIES 11
|
#define NUM_ENTRIES 11
|
||||||
int index[NUM_ENTRIES] = {0, 2, 4, 8, 16, 32, 34, 36, 64, 72, 128};
|
int index[NUM_ENTRIES] = {0, 2, 4, 8, 16, 32, 34, 36, 64, 72, 128};
|
||||||
|
@ -275,7 +276,7 @@ void multiorder_tagged_iteration(void)
|
||||||
void **slot;
|
void **slot;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
printf("Multiorder tagged iteration test\n");
|
printv(1, "Multiorder tagged iteration test\n");
|
||||||
|
|
||||||
#define MT_NUM_ENTRIES 9
|
#define MT_NUM_ENTRIES 9
|
||||||
int index[MT_NUM_ENTRIES] = {0, 2, 4, 16, 32, 40, 64, 72, 128};
|
int index[MT_NUM_ENTRIES] = {0, 2, 4, 16, 32, 40, 64, 72, 128};
|
||||||
|
@ -453,7 +454,7 @@ static void check_mem(unsigned old_order, unsigned new_order, unsigned alloc)
|
||||||
{
|
{
|
||||||
struct radix_tree_preload *rtp = &radix_tree_preloads;
|
struct radix_tree_preload *rtp = &radix_tree_preloads;
|
||||||
if (rtp->nr != 0)
|
if (rtp->nr != 0)
|
||||||
printf("split(%u %u) remaining %u\n", old_order, new_order,
|
printv(2, "split(%u %u) remaining %u\n", old_order, new_order,
|
||||||
rtp->nr);
|
rtp->nr);
|
||||||
/*
|
/*
|
||||||
* Can't check for equality here as some nodes may have been
|
* Can't check for equality here as some nodes may have been
|
||||||
|
@ -461,7 +462,7 @@ static void check_mem(unsigned old_order, unsigned new_order, unsigned alloc)
|
||||||
* nodes allocated since they should have all been preloaded.
|
* nodes allocated since they should have all been preloaded.
|
||||||
*/
|
*/
|
||||||
if (nr_allocated > alloc)
|
if (nr_allocated > alloc)
|
||||||
printf("split(%u %u) allocated %u %u\n", old_order, new_order,
|
printv(2, "split(%u %u) allocated %u %u\n", old_order, new_order,
|
||||||
alloc, nr_allocated);
|
alloc, nr_allocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ void regression1_test(void)
|
||||||
long arg;
|
long arg;
|
||||||
|
|
||||||
/* Regression #1 */
|
/* Regression #1 */
|
||||||
printf("running regression test 1, should finish in under a minute\n");
|
printv(1, "running regression test 1, should finish in under a minute\n");
|
||||||
nr_threads = 2;
|
nr_threads = 2;
|
||||||
pthread_barrier_init(&worker_barrier, NULL, nr_threads);
|
pthread_barrier_init(&worker_barrier, NULL, nr_threads);
|
||||||
|
|
||||||
|
@ -216,5 +216,5 @@ void regression1_test(void)
|
||||||
|
|
||||||
free(threads);
|
free(threads);
|
||||||
|
|
||||||
printf("regression test 1, done\n");
|
printv(1, "regression test 1, done\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ void regression2_test(void)
|
||||||
unsigned long int start, end;
|
unsigned long int start, end;
|
||||||
struct page *pages[1];
|
struct page *pages[1];
|
||||||
|
|
||||||
printf("running regression test 2 (should take milliseconds)\n");
|
printv(1, "running regression test 2 (should take milliseconds)\n");
|
||||||
/* 0. */
|
/* 0. */
|
||||||
for (i = 0; i <= max_slots - 1; i++) {
|
for (i = 0; i <= max_slots - 1; i++) {
|
||||||
p = page_alloc();
|
p = page_alloc();
|
||||||
|
@ -116,5 +116,5 @@ void regression2_test(void)
|
||||||
/* We remove all the remained nodes */
|
/* We remove all the remained nodes */
|
||||||
radix_tree_delete(&mt_tree, max_slots);
|
radix_tree_delete(&mt_tree, max_slots);
|
||||||
|
|
||||||
printf("regression test 2, done\n");
|
printv(1, "regression test 2, done\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,21 +34,21 @@ void regression3_test(void)
|
||||||
void **slot;
|
void **slot;
|
||||||
bool first;
|
bool first;
|
||||||
|
|
||||||
printf("running regression test 3 (should take milliseconds)\n");
|
printv(1, "running regression test 3 (should take milliseconds)\n");
|
||||||
|
|
||||||
radix_tree_insert(&root, 0, ptr0);
|
radix_tree_insert(&root, 0, ptr0);
|
||||||
radix_tree_tag_set(&root, 0, 0);
|
radix_tree_tag_set(&root, 0, 0);
|
||||||
|
|
||||||
first = true;
|
first = true;
|
||||||
radix_tree_for_each_tagged(slot, &root, &iter, 0, 0) {
|
radix_tree_for_each_tagged(slot, &root, &iter, 0, 0) {
|
||||||
printf("tagged %ld %p\n", iter.index, *slot);
|
printv(2, "tagged %ld %p\n", iter.index, *slot);
|
||||||
if (first) {
|
if (first) {
|
||||||
radix_tree_insert(&root, 1, ptr);
|
radix_tree_insert(&root, 1, ptr);
|
||||||
radix_tree_tag_set(&root, 1, 0);
|
radix_tree_tag_set(&root, 1, 0);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
if (radix_tree_deref_retry(*slot)) {
|
if (radix_tree_deref_retry(*slot)) {
|
||||||
printf("retry at %ld\n", iter.index);
|
printv(2, "retry at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_retry(&iter);
|
slot = radix_tree_iter_retry(&iter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,13 @@ void regression3_test(void)
|
||||||
|
|
||||||
first = true;
|
first = true;
|
||||||
radix_tree_for_each_slot(slot, &root, &iter, 0) {
|
radix_tree_for_each_slot(slot, &root, &iter, 0) {
|
||||||
printf("slot %ld %p\n", iter.index, *slot);
|
printv(2, "slot %ld %p\n", iter.index, *slot);
|
||||||
if (first) {
|
if (first) {
|
||||||
radix_tree_insert(&root, 1, ptr);
|
radix_tree_insert(&root, 1, ptr);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
if (radix_tree_deref_retry(*slot)) {
|
if (radix_tree_deref_retry(*slot)) {
|
||||||
printk("retry at %ld\n", iter.index);
|
printv(2, "retry at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_retry(&iter);
|
slot = radix_tree_iter_retry(&iter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -72,30 +72,30 @@ void regression3_test(void)
|
||||||
|
|
||||||
first = true;
|
first = true;
|
||||||
radix_tree_for_each_contig(slot, &root, &iter, 0) {
|
radix_tree_for_each_contig(slot, &root, &iter, 0) {
|
||||||
printk("contig %ld %p\n", iter.index, *slot);
|
printv(2, "contig %ld %p\n", iter.index, *slot);
|
||||||
if (first) {
|
if (first) {
|
||||||
radix_tree_insert(&root, 1, ptr);
|
radix_tree_insert(&root, 1, ptr);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
if (radix_tree_deref_retry(*slot)) {
|
if (radix_tree_deref_retry(*slot)) {
|
||||||
printk("retry at %ld\n", iter.index);
|
printv(2, "retry at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_retry(&iter);
|
slot = radix_tree_iter_retry(&iter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
radix_tree_for_each_slot(slot, &root, &iter, 0) {
|
radix_tree_for_each_slot(slot, &root, &iter, 0) {
|
||||||
printf("slot %ld %p\n", iter.index, *slot);
|
printv(2, "slot %ld %p\n", iter.index, *slot);
|
||||||
if (!iter.index) {
|
if (!iter.index) {
|
||||||
printf("next at %ld\n", iter.index);
|
printv(2, "next at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_resume(slot, &iter);
|
slot = radix_tree_iter_resume(slot, &iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
radix_tree_for_each_contig(slot, &root, &iter, 0) {
|
radix_tree_for_each_contig(slot, &root, &iter, 0) {
|
||||||
printf("contig %ld %p\n", iter.index, *slot);
|
printv(2, "contig %ld %p\n", iter.index, *slot);
|
||||||
if (!iter.index) {
|
if (!iter.index) {
|
||||||
printf("next at %ld\n", iter.index);
|
printv(2, "next at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_resume(slot, &iter);
|
slot = radix_tree_iter_resume(slot, &iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,9 +103,9 @@ void regression3_test(void)
|
||||||
radix_tree_tag_set(&root, 0, 0);
|
radix_tree_tag_set(&root, 0, 0);
|
||||||
radix_tree_tag_set(&root, 1, 0);
|
radix_tree_tag_set(&root, 1, 0);
|
||||||
radix_tree_for_each_tagged(slot, &root, &iter, 0, 0) {
|
radix_tree_for_each_tagged(slot, &root, &iter, 0, 0) {
|
||||||
printf("tagged %ld %p\n", iter.index, *slot);
|
printv(2, "tagged %ld %p\n", iter.index, *slot);
|
||||||
if (!iter.index) {
|
if (!iter.index) {
|
||||||
printf("next at %ld\n", iter.index);
|
printv(2, "next at %ld\n", iter.index);
|
||||||
slot = radix_tree_iter_resume(slot, &iter);
|
slot = radix_tree_iter_resume(slot, &iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,5 +113,5 @@ void regression3_test(void)
|
||||||
radix_tree_delete(&root, 0);
|
radix_tree_delete(&root, 0);
|
||||||
radix_tree_delete(&root, 1);
|
radix_tree_delete(&root, 1);
|
||||||
|
|
||||||
printf("regression test 3 passed\n");
|
printv(1, "regression test 3 passed\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,10 +49,10 @@ void simple_checks(void)
|
||||||
}
|
}
|
||||||
verify_tag_consistency(&tree, 0);
|
verify_tag_consistency(&tree, 0);
|
||||||
verify_tag_consistency(&tree, 1);
|
verify_tag_consistency(&tree, 1);
|
||||||
printf("before item_kill_tree: %d allocated\n", nr_allocated);
|
printv(2, "before item_kill_tree: %d allocated\n", nr_allocated);
|
||||||
item_kill_tree(&tree);
|
item_kill_tree(&tree);
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after item_kill_tree: %d allocated\n", nr_allocated);
|
printv(2, "after item_kill_tree: %d allocated\n", nr_allocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -257,7 +257,7 @@ static void do_thrash(struct radix_tree_root *tree, char *thrash_state, int tag)
|
||||||
|
|
||||||
gang_check(tree, thrash_state, tag);
|
gang_check(tree, thrash_state, tag);
|
||||||
|
|
||||||
printf("%d(%d) %d(%d) %d(%d) %d(%d) / "
|
printv(2, "%d(%d) %d(%d) %d(%d) %d(%d) / "
|
||||||
"%d(%d) present, %d(%d) tagged\n",
|
"%d(%d) present, %d(%d) tagged\n",
|
||||||
insert_chunk, nr_inserted,
|
insert_chunk, nr_inserted,
|
||||||
delete_chunk, nr_deleted,
|
delete_chunk, nr_deleted,
|
||||||
|
@ -296,13 +296,13 @@ static void __leak_check(void)
|
||||||
{
|
{
|
||||||
RADIX_TREE(tree, GFP_KERNEL);
|
RADIX_TREE(tree, GFP_KERNEL);
|
||||||
|
|
||||||
printf("%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
printv(2, "%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
||||||
item_insert(&tree, 1000000);
|
item_insert(&tree, 1000000);
|
||||||
printf("%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
printv(2, "%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
||||||
item_delete(&tree, 1000000);
|
item_delete(&tree, 1000000);
|
||||||
printf("%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
printv(2, "%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
||||||
item_kill_tree(&tree);
|
item_kill_tree(&tree);
|
||||||
printf("%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
printv(2, "%d: nr_allocated=%d\n", __LINE__, nr_allocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void single_check(void)
|
static void single_check(void)
|
||||||
|
@ -336,15 +336,15 @@ void tag_check(void)
|
||||||
extend_checks();
|
extend_checks();
|
||||||
contract_checks();
|
contract_checks();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after extend_checks: %d allocated\n", nr_allocated);
|
printv(2, "after extend_checks: %d allocated\n", nr_allocated);
|
||||||
__leak_check();
|
__leak_check();
|
||||||
leak_check();
|
leak_check();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after leak_check: %d allocated\n", nr_allocated);
|
printv(2, "after leak_check: %d allocated\n", nr_allocated);
|
||||||
simple_checks();
|
simple_checks();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after simple_checks: %d allocated\n", nr_allocated);
|
printv(2, "after simple_checks: %d allocated\n", nr_allocated);
|
||||||
thrash_tags();
|
thrash_tags();
|
||||||
rcu_barrier();
|
rcu_barrier();
|
||||||
printf("after thrash_tags: %d allocated\n", nr_allocated);
|
printv(2, "after thrash_tags: %d allocated\n", nr_allocated);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue