]> Git Repo - J-linux.git/commitdiff
rcu: Remove full memory barrier on RCU stall printout
authorFrederic Weisbecker <[email protected]>
Wed, 15 May 2024 12:53:31 +0000 (14:53 +0200)
committerPaul E. McKenney <[email protected]>
Fri, 28 Jun 2024 13:44:12 +0000 (06:44 -0700)
RCU stall printout fetches the EQS state of a CPU with a preceding full
memory barrier. However there is nothing to order this read against at
this debugging stage. It is inherently racy when performed remotely.

Do a plain read instead.

This was the last user of rcu_dynticks_snap().

Signed-off-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>
Reviewed-by: Boqun Feng <[email protected]>
Reviewed-by: Neeraj Upadhyay <[email protected]>
kernel/rcu/tree.c
kernel/rcu/tree_stall.h

index 57d813781749f56c2ae2c155c1c22137428d661a..100094717bdaa38e3b2bfa97434030352c54bf63 100644 (file)
@@ -295,16 +295,6 @@ static void rcu_dynticks_eqs_online(void)
        ct_state_inc(RCU_DYNTICKS_IDX);
 }
 
-/*
- * Snapshot the ->dynticks counter with full ordering so as to allow
- * stable comparison of this counter with past and future snapshots.
- */
-static int rcu_dynticks_snap(int cpu)
-{
-       smp_mb();  // Fundamental RCU ordering guarantee.
-       return ct_dynticks_cpu_acquire(cpu);
-}
-
 /*
  * Return true if the snapshot returned from rcu_dynticks_snap()
  * indicates that RCU is in an extended quiescent state.
index 460efecd077be13940a94fe5a06197f25e6921a9..4b0e9d7c4c68ee029c72d7094c4be7dc3b0d1582 100644 (file)
@@ -501,7 +501,7 @@ static void print_cpu_stall_info(int cpu)
        }
        delta = rcu_seq_ctr(rdp->mynode->gp_seq - rdp->rcu_iw_gp_seq);
        falsepositive = rcu_is_gp_kthread_starving(NULL) &&
-                       rcu_dynticks_in_eqs(rcu_dynticks_snap(cpu));
+                       rcu_dynticks_in_eqs(ct_dynticks_cpu(cpu));
        rcuc_starved = rcu_is_rcuc_kthread_starving(rdp, &j);
        if (rcuc_starved)
                // Print signed value, as negative values indicate a probable bug.
@@ -515,7 +515,7 @@ static void print_cpu_stall_info(int cpu)
                        rdp->rcu_iw_pending ? (int)min(delta, 9UL) + '0' :
                                "!."[!delta],
               ticks_value, ticks_title,
-              rcu_dynticks_snap(cpu) & 0xffff,
+              ct_dynticks_cpu(cpu) & 0xffff,
               ct_dynticks_nesting_cpu(cpu), ct_dynticks_nmi_nesting_cpu(cpu),
               rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu),
               data_race(rcu_state.n_force_qs) - rcu_state.n_force_qs_gpstart,
This page took 0.059105 seconds and 4 git commands to generate.