The following commit has been merged into the core/rcu branch of tip:

Commit-ID:     cfeac3977ab4b6222a01f79997739d2367a8cc94
Gitweb:        
https://git.kernel.org/tip/cfeac3977ab4b6222a01f79997739d2367a8cc94
Author:        Paul E. McKenney <paul...@kernel.org>
AuthorDate:    Thu, 20 Aug 2020 11:26:14 -07:00
Committer:     Paul E. McKenney <paul...@kernel.org>
CommitterDate: Mon, 24 Aug 2020 18:40:28 -07:00

rcu: Remove unused "cpu" parameter from rcu_report_qs_rdp()

The "cpu" parameter to rcu_report_qs_rdp() is not used, with rdp->cpu
being used instead.  Furtheremore, every call to rcu_report_qs_rdp()
invokes it on rdp->cpu.  This commit therefore removes this unused "cpu"
parameter and converts a check of rdp->cpu against smp_processor_id()
to a WARN_ON_ONCE().

Reported-by: Jann Horn <ja...@google.com>
Signed-off-by: Paul E. McKenney <paul...@kernel.org>
---
 kernel/rcu/tree.c        | 8 ++++----
 kernel/rcu/tree_plugin.h | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index a295cad..c612765 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -2240,7 +2240,7 @@ rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned 
long flags)
  * structure.  This must be called from the specified CPU.
  */
 static void
-rcu_report_qs_rdp(int cpu, struct rcu_data *rdp)
+rcu_report_qs_rdp(struct rcu_data *rdp)
 {
        unsigned long flags;
        unsigned long mask;
@@ -2249,6 +2249,7 @@ rcu_report_qs_rdp(int cpu, struct rcu_data *rdp)
                               rcu_segcblist_is_offloaded(&rdp->cblist);
        struct rcu_node *rnp;
 
+       WARN_ON_ONCE(rdp->cpu != smp_processor_id());
        rnp = rdp->mynode;
        raw_spin_lock_irqsave_rcu_node(rnp, flags);
        if (rdp->cpu_no_qs.b.norm || rdp->gp_seq != rnp->gp_seq ||
@@ -2265,8 +2266,7 @@ rcu_report_qs_rdp(int cpu, struct rcu_data *rdp)
                return;
        }
        mask = rdp->grpmask;
-       if (rdp->cpu == smp_processor_id())
-               rdp->core_needs_qs = false;
+       rdp->core_needs_qs = false;
        if ((rnp->qsmask & mask) == 0) {
                raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
        } else {
@@ -2315,7 +2315,7 @@ rcu_check_quiescent_state(struct rcu_data *rdp)
         * Tell RCU we are done (but rcu_report_qs_rdp() will be the
         * judge of that).
         */
-       rcu_report_qs_rdp(rdp->cpu, rdp);
+       rcu_report_qs_rdp(rdp);
 }
 
 /*
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 25a676d..ca31be0 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -461,7 +461,7 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, 
unsigned long flags)
        t->rcu_read_unlock_special.s = 0;
        if (special.b.need_qs) {
                if (IS_ENABLED(CONFIG_RCU_STRICT_GRACE_PERIOD)) {
-                       rcu_report_qs_rdp(rdp->cpu, rdp);
+                       rcu_report_qs_rdp(rdp);
                        udelay(rcu_unlock_delay);
                } else {
                        rcu_qs();
@@ -791,7 +791,7 @@ void rcu_read_unlock_strict(void)
           irqs_disabled() || preempt_count() || !rcu_state.gp_kthread)
                return;
        rdp = this_cpu_ptr(&rcu_data);
-       rcu_report_qs_rdp(rdp->cpu, rdp);
+       rcu_report_qs_rdp(rdp);
        udelay(rcu_unlock_delay);
 }
 EXPORT_SYMBOL_GPL(rcu_read_unlock_strict);

Reply via email to