RCU: only sum active readers when needed
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 27 Oct 2022 18:02:48 +0000 (14:02 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 27 Oct 2022 18:02:48 +0000 (14:02 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
src/rcu.h

index 61a6fb0cc72ac5ba7daba2c81f9bf537b897b5a7..f9028bce72a540eb0006065d4ea87d317af8b3bc 100644 (file)
--- a/src/rcu.h
+++ b/src/rcu.h
@@ -91,8 +91,10 @@ void check_active_readers(struct side_rcu_gp_state *gp_state, bool *active_reade
        for (i = 0; i < gp_state->nr_cpus; i++) {
                struct side_rcu_cpu_gp_state *cpu_state = &gp_state->percpu_state[i];
 
-               sum[0] -= __atomic_load_n(&cpu_state->count[0].end, __ATOMIC_RELAXED);
-               sum[1] -= __atomic_load_n(&cpu_state->count[1].end, __ATOMIC_RELAXED);
+               if (active_readers[0])
+                       sum[0] -= __atomic_load_n(&cpu_state->count[0].end, __ATOMIC_RELAXED);
+               if (active_readers[1])
+                       sum[1] -= __atomic_load_n(&cpu_state->count[1].end, __ATOMIC_RELAXED);
        }
 
        /*
@@ -110,8 +112,10 @@ void check_active_readers(struct side_rcu_gp_state *gp_state, bool *active_reade
        for (i = 0; i < gp_state->nr_cpus; i++) {
                struct side_rcu_cpu_gp_state *cpu_state = &gp_state->percpu_state[i];
 
-               sum[0] += __atomic_load_n(&cpu_state->count[0].begin, __ATOMIC_RELAXED);
-               sum[1] += __atomic_load_n(&cpu_state->count[1].begin, __ATOMIC_RELAXED);
+               if (active_readers[0])
+                       sum[0] += __atomic_load_n(&cpu_state->count[0].begin, __ATOMIC_RELAXED);
+               if (active_readers[1])
+                       sum[1] += __atomic_load_n(&cpu_state->count[1].begin, __ATOMIC_RELAXED);
        }
        if (active_readers[0])
                active_readers[0] = sum[0];
This page took 0.02388 seconds and 4 git commands to generate.