srcu: No need to advance/accelerate if no callback enqueued
authorFrederic Weisbecker <frederic@kernel.org>
Tue, 3 Oct 2023 23:29:02 +0000 (01:29 +0200)
committerNeeraj Upadhyay (AMD) <neeraj.iitr10@gmail.com>
Mon, 11 Dec 2023 21:11:16 +0000 (02:41 +0530)
While in grace period start, there is nothing to accelerate and
therefore no need to advance the callbacks either if no callback is
to be enqueued.

Spare these needless operations in this case.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay (AMD) <neeraj.iitr10@gmail.com>
kernel/rcu/srcutree.c

index e9356a103626121a3a99ce1b4cacb483d696623d..2bfc8ed1eed286d66c930538cc03adbaa830718d 100644 (file)
@@ -1261,9 +1261,11 @@ static unsigned long srcu_gp_start_if_needed(struct srcu_struct *ssp,
         *     period (gp_num = X + 8). So acceleration fails.
         */
        s = rcu_seq_snap(&ssp->srcu_sup->srcu_gp_seq);
-       rcu_segcblist_advance(&sdp->srcu_cblist,
-                             rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq));
-       WARN_ON_ONCE(!rcu_segcblist_accelerate(&sdp->srcu_cblist, s) && rhp);
+       if (rhp) {
+               rcu_segcblist_advance(&sdp->srcu_cblist,
+                                     rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq));
+               WARN_ON_ONCE(!rcu_segcblist_accelerate(&sdp->srcu_cblist, s));
+       }
        if (ULONG_CMP_LT(sdp->srcu_gp_seq_needed, s)) {
                sdp->srcu_gp_seq_needed = s;
                needgp = true;