rcu: The rcu_gp_cleanup() function does not need cpu_needs_another_gp()
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 12 Apr 2018 23:16:45 +0000 (16:16 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 15 May 2018 17:30:54 +0000 (10:30 -0700)
All of the cpu_needs_another_gp() function's checks (except for
newly arrived callbacks) have been subsumed into the rcu_gp_cleanup()
function's scan of the rcu_node tree.  This commit therefore drops the
call to cpu_needs_another_gp().  The check for newly arrived callbacks
is supplied by rcu_accelerate_cbs().  Any needed advancing (as in the
earlier rcu_advance_cbs() call) will be supplied when the corresponding
CPU becomes aware of the end of the now-completed grace period.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Nicholas Piggin <npiggin@gmail.com>
kernel/rcu/tree.c

index 07bccb1f0c8777e87fc5c69310e3a6edd0bdd2ba..7776d709e0605025f68fcb212516199d1f309091 100644 (file)
@@ -2150,11 +2150,9 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
                needgp = true;
        }
        /* Advance CBs to reduce false positives below. */
-       needgp = rcu_advance_cbs(rsp, rnp, rdp) || needgp;
-       if (needgp || cpu_needs_another_gp(rsp, rdp)) {
+       if (!rcu_accelerate_cbs(rsp, rnp, rdp) && needgp) {
                WRITE_ONCE(rsp->gp_flags, RCU_GP_FLAG_INIT);
-               trace_rcu_grace_period(rsp->name,
-                                      READ_ONCE(rsp->gpnum),
+               trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum),
                                       TPS("newreq"));
        }
        WRITE_ONCE(rsp->gp_flags, rsp->gp_flags & RCU_GP_FLAG_INIT);