rcutorture: Check histogram of ages
authorOlivier Dion <odion@efficios.com>
Thu, 21 Dec 2023 15:27:18 +0000 (10:27 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 10 Jan 2024 17:14:55 +0000 (12:14 -0500)
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>
tests/regression/rcutorture.h

index 01f64569757c5fb2a39afec2074a482d252501b0..441ff79bf349fa301b60e7ee61935e0caa58aba2 100644 (file)
@@ -527,6 +527,7 @@ int stresstest(int nreaders)
        int t;
        long long *p;
        long long sum;
+       int ret;
 
        init_per_thread(n_reads_pt, 0LL);
        for_each_thread(t) {
@@ -552,11 +553,19 @@ int stresstest(int nreaders)
               n_reads, n_updates, n_mberror);
        rdiag_start();
        rdiag("rcu_stress_count:");
+       ret = 0;
        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();
@@ -564,10 +573,9 @@ int stresstest(int nreaders)
                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;
 }
 
 /*
This page took 0.026336 seconds and 4 git commands to generate.