rcu-tasks: Replace exit_tasks_rcu_start() initialization with WARN_ON_ONCE()
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>
This commit is contained in:
parent
c342b42fa4
commit
8db610c3bd
@ -1203,8 +1203,7 @@ void exit_tasks_rcu_start(void)
|
|||||||
rtpcp = this_cpu_ptr(rcu_tasks.rtpcpu);
|
rtpcp = this_cpu_ptr(rcu_tasks.rtpcpu);
|
||||||
t->rcu_tasks_exit_cpu = smp_processor_id();
|
t->rcu_tasks_exit_cpu = smp_processor_id();
|
||||||
raw_spin_lock_irqsave_rcu_node(rtpcp, flags);
|
raw_spin_lock_irqsave_rcu_node(rtpcp, flags);
|
||||||
if (!rtpcp->rtp_exit_list.next)
|
WARN_ON_ONCE(!rtpcp->rtp_exit_list.next);
|
||||||
INIT_LIST_HEAD(&rtpcp->rtp_exit_list);
|
|
||||||
list_add(&t->rcu_tasks_exit_list, &rtpcp->rtp_exit_list);
|
list_add(&t->rcu_tasks_exit_list, &rtpcp->rtp_exit_list);
|
||||||
raw_spin_unlock_irqrestore_rcu_node(rtpcp, flags);
|
raw_spin_unlock_irqrestore_rcu_node(rtpcp, flags);
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
Loading…
Reference in New Issue
Block a user