X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=tests%2Frcutorture.h;h=4dac2f224faa9605f309195bea5e62e818080da0;hp=7d4948e59626b486524af30fa4b0dcc5f9bfc02b;hb=06f22bdbb0c4c4d5db42a2e2dc35818aa61415be;hpb=6ee91d83a7a5b33160158f57f94dd75e6d0a67ed diff --git a/tests/rcutorture.h b/tests/rcutorture.h index 7d4948e..4dac2f2 100644 --- a/tests/rcutorture.h +++ b/tests/rcutorture.h @@ -77,7 +77,7 @@ char argsbuf[64]; #define GOFLAG_RUN 1 #define GOFLAG_STOP 2 -int goflag __attribute__((__aligned__(CACHE_LINE_SIZE))) = GOFLAG_INIT; +int goflag __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))) = GOFLAG_INIT; #define RCU_READ_RUN 1000 @@ -92,6 +92,12 @@ int goflag __attribute__((__aligned__(CACHE_LINE_SIZE))) = GOFLAG_INIT; #define rcu_read_unlock_nest() #endif /* #else #ifdef RCU_READ_NESTABLE */ +#ifdef TORTURE_QSBR +#define mark_rcu_quiescent_state rcu_quiescent_state +#define put_thread_offline rcu_thread_offline +#define put_thread_online rcu_thread_online +#endif + #ifndef mark_rcu_quiescent_state #define mark_rcu_quiescent_state() do ; while (0) #endif /* #ifdef mark_rcu_quiescent_state */ @@ -116,7 +122,7 @@ void *rcu_read_perf_test(void *arg) rcu_register_thread(); run_on(me); - atomic_inc(&nthreadsrunning); + uatomic_inc(&nthreadsrunning); while (goflag == GOFLAG_INIT) poll(NULL, 0, 1); mark_rcu_quiescent_state(); @@ -141,7 +147,7 @@ void *rcu_update_perf_test(void *arg) { long long n_updates_local = 0; - atomic_inc(&nthreadsrunning); + uatomic_inc(&nthreadsrunning); while (goflag == GOFLAG_INIT) poll(NULL, 0, 1); while (goflag == GOFLAG_RUN) { @@ -156,7 +162,7 @@ void perftestinit(void) { init_per_thread(n_reads_pt, 0LL); init_per_thread(n_updates_pt, 0LL); - atomic_set(&nthreadsrunning, 0); + uatomic_set(&nthreadsrunning, 0); } void perftestrun(int nthreads, int nreaders, int nupdaters) @@ -164,15 +170,15 @@ void perftestrun(int nthreads, int nreaders, int nupdaters) int t; int duration = 1; - smp_mb(); - while (atomic_read(&nthreadsrunning) < nthreads) + cmm_smp_mb(); + while (uatomic_read(&nthreadsrunning) < nthreads) poll(NULL, 0, 1); goflag = GOFLAG_RUN; - smp_mb(); + cmm_smp_mb(); sleep(duration); - smp_mb(); + cmm_smp_mb(); goflag = GOFLAG_STOP; - smp_mb(); + cmm_smp_mb(); wait_all_threads(); for_each_thread(t) { n_reads += per_thread(n_reads_pt, t); @@ -303,7 +309,7 @@ void *rcu_update_stress_test(void *arg) i = 0; p = &rcu_stress_array[i]; p->mbtest = 0; - smp_mb(); + cmm_smp_mb(); p->pipe_count = 0; p->mbtest = 1; rcu_assign_pointer(rcu_stress_current, p); @@ -349,13 +355,13 @@ void stresstest(int nreaders) create_thread(rcu_update_stress_test, NULL); for (i = 0; i < 5; i++) create_thread(rcu_fake_update_stress_test, NULL); - smp_mb(); + cmm_smp_mb(); goflag = GOFLAG_RUN; - smp_mb(); + cmm_smp_mb(); sleep(10); - smp_mb(); + cmm_smp_mb(); goflag = GOFLAG_STOP; - smp_mb(); + cmm_smp_mb(); wait_all_threads(); for_each_thread(t) n_reads += per_thread(n_reads_pt, t);