rcu: Eliminate rcu_implicit_dynticks_qs() local variable rnhqp
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 22 Jul 2021 22:49:05 +0000 (15:49 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 13 Sep 2021 23:32:45 +0000 (16:32 -0700)
The rcu_implicit_dynticks_qs() function's local variable rnhqp references
the ->rcu_need_heavy_qs field in the rcu_data structure referenced by
the function parameter rdp, with a rather odd method for computing
the pointer to this field.  This commit therefore simplifies things
and saves a few lines of code by replacing each instance of rnhqp with
&rdp->need_heavy_qs.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tree.c

index c89f5e6..18d2f35 100644 (file)
@@ -1219,7 +1219,6 @@ static int dyntick_save_progress_counter(struct rcu_data *rdp)
 static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
 {
        unsigned long jtsq;
-       bool *rnhqp;
        bool *ruqp;
        struct rcu_node *rnp = rdp->mynode;
 
@@ -1286,12 +1285,11 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
         */
        jtsq = READ_ONCE(jiffies_to_sched_qs);
        ruqp = per_cpu_ptr(&rcu_data.rcu_urgent_qs, rdp->cpu);
-       rnhqp = per_cpu_ptr(&rcu_data.rcu_need_heavy_qs, rdp->cpu);
-       if (!READ_ONCE(*rnhqp) &&
+       if (!READ_ONCE(rdp->rcu_need_heavy_qs) &&
            (time_after(jiffies, rcu_state.gp_start + jtsq * 2) ||
             time_after(jiffies, rcu_state.jiffies_resched) ||
             rcu_state.cbovld)) {
-               WRITE_ONCE(*rnhqp, true);
+               WRITE_ONCE(rdp->rcu_need_heavy_qs, true);
                /* Store rcu_need_heavy_qs before rcu_urgent_qs. */
                smp_store_release(ruqp, true);
        } else if (time_after(jiffies, rcu_state.gp_start + jtsq)) {