Callbacks enqueued after rcutree_report_cpu_dead() fall into RCU barrier
blind spot. Report any potential misuse.

Reported-by: Paul E. McKenney <paul...@kernel.org>
Signed-off-by: Frederic Weisbecker <frede...@kernel.org>
---
 kernel/rcu/tree.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index a60616e69b66..36070b6bf4a1 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3084,8 +3084,11 @@ __call_rcu_common(struct rcu_head *head, rcu_callback_t 
func, bool lazy_in)
        head->func = func;
        head->next = NULL;
        kasan_record_aux_stack_noalloc(head);
+
        local_irq_save(flags);
        rdp = this_cpu_ptr(&rcu_data);
+       RCU_LOCKDEP_WARN(rcu_rdp_cpu_online(rdp), "Callback enqueued on offline 
CPU!");
+
        lazy = lazy_in && !rcu_async_should_hurry();
 
        /* Add the callback to our list. */
-- 
2.46.0


Reply via email to