]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rcu-tasks: Replace exit_tasks_rcu_start() initialization with WARN_ON_ONCE()
authorPaul E. McKenney <paulmck@kernel.org>
Sat, 24 Feb 2024 01:07:24 +0000 (17:07 -0800)
committerUladzislau Rezki (Sony) <urezki@gmail.com>
Mon, 15 Apr 2024 17:36:41 +0000 (19:36 +0200)
Because the Tasks RCU ->rtp_exit_list is initialized at rcu_init()
time while there is only one CPU running with interrupts disabled, it
is not possible for an exiting task to encounter an uninitialized list.
This commit therefore replaces the conditional initialization with
a WARN_ON_ONCE().

Reported-by: Frederic Weisbecker <frederic@kernel.org>
Closes: https://lore.kernel.org/all/ZdiNXmO3wRvmzPsr@lothringen/
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
kernel/rcu/tasks.h

index 82e458ea07287e0606d51bbdcf47b807a593bef2..78d74c81cc241cc832c0f8539402c1b7b12817bd 100644 (file)
@@ -1203,8 +1203,7 @@ void exit_tasks_rcu_start(void)
        rtpcp = this_cpu_ptr(rcu_tasks.rtpcpu);
        t->rcu_tasks_exit_cpu = smp_processor_id();
        raw_spin_lock_irqsave_rcu_node(rtpcp, flags);
-       if (!rtpcp->rtp_exit_list.next)
-               INIT_LIST_HEAD(&rtpcp->rtp_exit_list);
+       WARN_ON_ONCE(!rtpcp->rtp_exit_list.next);
        list_add(&t->rcu_tasks_exit_list, &rtpcp->rtp_exit_list);
        raw_spin_unlock_irqrestore_rcu_node(rtpcp, flags);
        preempt_enable();