rcu-tasks: Check for abandoned callbacks
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 7 Dec 2021 00:19:40 +0000 (16:19 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 20 Jun 2022 16:22:26 +0000 (09:22 -0700)
This commit adds a debugging scan for callbacks that got lost during a
callback-queueing transition.

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

index 3925e32..b8690a4 100644 (file)
@@ -439,6 +439,11 @@ static int rcu_tasks_need_gpcb(struct rcu_tasks *rtp)
                        WRITE_ONCE(rtp->percpu_dequeue_lim, 1);
                        pr_info("Completing switch %s to CPU-0 callback queuing.\n", rtp->name);
                }
+               for (cpu = rtp->percpu_dequeue_lim; cpu < nr_cpu_ids; cpu++) {
+                       struct rcu_tasks_percpu *rtpcp = per_cpu_ptr(rtp->rtpcpu, cpu);
+
+                       WARN_ON_ONCE(rcu_segcblist_n_cbs(&rtpcp->cblist));
+               }
                raw_spin_unlock_irqrestore(&rtp->cbs_gbl_lock, flags);
        }