Ensure that the histogram of ages for all threads are valid after a stress test.
Change-Id: Iadc46f47fe8835ac0e2d8967b6a16a83335a9541
Signed-off-by: Olivier Dion <odion@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
int t;
long long *p;
long long sum;
int t;
long long *p;
long long sum;
init_per_thread(n_reads_pt, 0LL);
for_each_thread(t) {
init_per_thread(n_reads_pt, 0LL);
for_each_thread(t) {
n_reads, n_updates, n_mberror);
rdiag_start();
rdiag("rcu_stress_count:");
n_reads, n_updates, n_mberror);
rdiag_start();
rdiag("rcu_stress_count:");
for (i = 0; i <= RCU_STRESS_PIPE_LEN; i++) {
sum = 0LL;
for_each_thread(t) {
sum += per_thread(rcu_stress_count, t)[i];
}
for (i = 0; i <= RCU_STRESS_PIPE_LEN; i++) {
sum = 0LL;
for_each_thread(t) {
sum += per_thread(rcu_stress_count, t)[i];
}
+ /*
+ * If any entries past the first two are non-zero, RCU is
+ * broken. See details above about rcu_stress_count.
+ */
+ if (i > 1 && sum != 0) {
+ ret = -1;
+ }
rdiag(" %lld", sum);
}
rdiag_end();
rdiag(" %lld", sum);
}
rdiag_end();
diag("Deallocating per-CPU call_rcu threads.");
free_all_cpu_call_rcu_data();
}
diag("Deallocating per-CPU call_rcu threads.");
free_all_cpu_call_rcu_data();
}
- if (!n_mberror)
- return 0;
- else
- return -1;
+ if (n_mberror)
+ ret = -1;
+ return ret;