]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - kernel/rcu/rcutorture.c
Merge branches 'pm-core', 'pm-qos', 'pm-domains' and 'pm-opp'
[linux.git] / kernel / rcu / rcutorture.c
index 87c51225ceeca991bf64505bac8eedf3e23e44cf..d81345be730ea5134e38acb5e85b93c1c3882b39 100644 (file)
@@ -564,10 +564,25 @@ static void srcu_torture_stats(void)
        pr_alert("%s%s per-CPU(idx=%d):",
                 torture_type, TORTURE_FLAG, idx);
        for_each_possible_cpu(cpu) {
+               unsigned long l0, l1;
+               unsigned long u0, u1;
                long c0, c1;
+               struct srcu_array *counts = per_cpu_ptr(srcu_ctlp->per_cpu_ref, cpu);
 
-               c0 = (long)per_cpu_ptr(srcu_ctlp->per_cpu_ref, cpu)->c[!idx];
-               c1 = (long)per_cpu_ptr(srcu_ctlp->per_cpu_ref, cpu)->c[idx];
+               u0 = counts->unlock_count[!idx];
+               u1 = counts->unlock_count[idx];
+
+               /*
+                * Make sure that a lock is always counted if the corresponding
+                * unlock is counted.
+                */
+               smp_rmb();
+
+               l0 = counts->lock_count[!idx];
+               l1 = counts->lock_count[idx];
+
+               c0 = l0 - u0;
+               c1 = l1 - u1;
                pr_cont(" %d(%ld,%ld)", cpu, c0, c1);
        }
        pr_cont("\n");