From: Frederic Weisbecker <[email protected]>

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 <[email protected]>
Reviewed-by: Joel Fernandes (Google) <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>
Signed-off-by: Neeraj Upadhyay (AMD) <[email protected]>
---
 kernel/rcu/srcutree.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index e9356a103626..2bfc8ed1eed2 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -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;
-- 
2.40.1


Reply via email to