srcu: Compute snp_seq earlier in srcu_funnel_gp_start()
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 27 Jan 2022 00:01:26 +0000 (16:01 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 11 Apr 2022 22:31:02 +0000 (15:31 -0700)
Currently, srcu_funnel_gp_start() tests snp->srcu_have_cbs[idx] and then
separately assigns it to the snp_seq local variable.  This commit does
the assignment earlier to simplify the code a bit.  While in the area,
this commit also takes advantage of the 100-character line limit to put
the call to srcu_schedule_cbs_sdp() on a single line.

Co-developed-by: Neeraj Upadhyay <quic_neeraju@quicinc.com>
Signed-off-by: Neeraj Upadhyay <quic_neeraju@quicinc.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/srcutree.c

index 0874e3be6a5a74df45d93c8b06fbbe3d81a29fec..fec608f69962ccbc9c6235d97506d249142474eb 100644 (file)
@@ -697,15 +697,13 @@ static void srcu_funnel_gp_start(struct srcu_struct *ssp, struct srcu_data *sdp,
                        if (rcu_seq_done(&ssp->srcu_gp_seq, s) && snp != snp_leaf)
                                return; /* GP already done and CBs recorded. */
                        spin_lock_irqsave_rcu_node(snp, flags);
-                       if (ULONG_CMP_GE(snp->srcu_have_cbs[idx], s)) {
-                               snp_seq = snp->srcu_have_cbs[idx];
+                       snp_seq = snp->srcu_have_cbs[idx];
+                       if (ULONG_CMP_GE(snp_seq, s)) {
                                if (snp == snp_leaf && snp_seq == s)
                                        snp->srcu_data_have_cbs[idx] |= sdp->grpmask;
                                spin_unlock_irqrestore_rcu_node(snp, flags);
                                if (snp == snp_leaf && snp_seq != s) {
-                                       srcu_schedule_cbs_sdp(sdp, do_norm
-                                                                  ? SRCU_INTERVAL
-                                                                  : 0);
+                                       srcu_schedule_cbs_sdp(sdp, do_norm ? SRCU_INTERVAL : 0);
                                        return;
                                }
                                if (!do_norm)