X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=tests%2Ftest_qsbr.c;h=12346c3cea2d0701cf6c3ab45afc30ba61fb7f32;hb=65fcc7e9957a1658327acd121c3d8c3b36f4a94e;hp=7c78b798818deda1283c1d47c0b69c88af31b1a7;hpb=31b598e0bb2fde285afa63986613e632e98b104d;p=urcu.git diff --git a/tests/test_qsbr.c b/tests/test_qsbr.c index 7c78b79..12346c3 100644 --- a/tests/test_qsbr.c +++ b/tests/test_qsbr.c @@ -3,7 +3,7 @@ * * Userspace RCU library - test program * - * Copyright February 2009 - Mathieu Desnoyers + * Copyright February 2009 - Mathieu Desnoyers * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,12 +31,15 @@ #include #include #include -#include #include #include #include +#ifdef __linux__ +#include +#endif + /* hardcoded number of CPUs */ #define NR_CPUS 16384 @@ -83,7 +86,7 @@ static unsigned long wduration; static inline void loop_sleep(unsigned long l) { while(l-- != 0) - cpu_relax(); + caa_cpu_relax(); } static int verbose_mode; @@ -230,7 +233,7 @@ void *thr_reader(void *_count) while (!test_go) { } - smp_mb(); + cmm_smp_mb(); for (;;) { rcu_read_lock(); @@ -251,6 +254,10 @@ void *thr_reader(void *_count) rcu_unregister_thread(); + /* test extra thread registration */ + rcu_register_thread(); + rcu_unregister_thread(); + *count = nr_reads; printf_verbose("thread_end %s, thread id : %lx, tid %lu\n", "reader", pthread_self(), (unsigned long)gettid()); @@ -271,7 +278,7 @@ void *thr_writer(void *_count) while (!test_go) { } - smp_mb(); + cmm_smp_mb(); for (;;) { new = test_array_alloc(); @@ -399,7 +406,7 @@ int main(int argc, char **argv) printf_verbose("thread %-6s, thread id : %lx, tid %lu\n", "main", pthread_self(), (unsigned long)gettid()); - test_array = malloc(sizeof(*test_array) * ARRAY_SIZE); + test_array = calloc(1, sizeof(*test_array) * ARRAY_SIZE); tid_reader = malloc(sizeof(*tid_reader) * nr_readers); tid_writer = malloc(sizeof(*tid_writer) * nr_writers); count_reader = malloc(sizeof(*count_reader) * nr_readers); @@ -420,7 +427,7 @@ int main(int argc, char **argv) exit(1); } - smp_mb(); + cmm_smp_mb(); test_go = 1; @@ -443,10 +450,10 @@ int main(int argc, char **argv) printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads, tot_writes); - printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu " + printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu " "nr_writers %3u " "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n", - argv[0], duration, nr_readers, rduration, + argv[0], duration, nr_readers, rduration, wduration, nr_writers, wdelay, tot_reads, tot_writes, tot_reads + tot_writes); test_array_free(test_rcu_pointer);