summaryrefslogtreecommitdiffstats
path: root/kernel/rcu/refperf.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcu/refperf.c')
-rw-r--r--kernel/rcu/refperf.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/rcu/refperf.c b/kernel/rcu/refperf.c
index 2fd3ed1a0d0d..234bb0e84a8b 100644
--- a/kernel/rcu/refperf.c
+++ b/kernel/rcu/refperf.c
@@ -99,6 +99,7 @@ static atomic_t nreaders_exp;
// Use to wait for all threads to start.
static atomic_t n_init;
+static atomic_t n_started;
// Track which experiment is currently running.
static int exp_idx;
@@ -253,6 +254,9 @@ repeat:
WARN_ON_ONCE(smp_processor_id() != me);
WRITE_ONCE(rt->start_reader, 0);
+ if (!atomic_dec_return(&n_started))
+ while (atomic_read_acquire(&n_started))
+ cpu_relax();
VERBOSE_PERFOUT("ref_perf_reader %ld: experiment %d started", me, exp_idx);
@@ -367,6 +371,7 @@ static int main_func(void *arg)
reset_readers();
atomic_set(&nreaders_exp, nreaders);
+ atomic_set(&n_started, nreaders);
exp_idx = exp;