rcu-tasks: Initialize callback lists at rcu_init() time
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 22 Feb 2024 20:29:54 +0000 (12:29 -0800)
committerBoqun Feng <boqun.feng@gmail.com>
Sun, 25 Feb 2024 22:21:34 +0000 (14:21 -0800)
commit30ef09635b9ed3ebca4f677495332a2e444a5cda
tree766f658e1614fd2e0687858eb50522dcb0aba8cc
parentbfe93930ea1ea3c6c115a7d44af6e4fea609067e
rcu-tasks: Initialize callback lists at rcu_init() time

In order for RCU Tasks to reliably maintain per-CPU lists of exiting
tasks, those lists must be initialized before it is possible for tasks
to exit, especially given that the boot CPU is not necessarily CPU 0
(an example being, powerpc kexec() kernels).  And at the time that
rcu_init_tasks_generic() is called, a task could potentially exit,
unconventional though that sort of thing might be.

This commit therefore moves the calls to cblist_init_generic() from
functions called from rcu_init_tasks_generic() to a new function named
tasks_cblist_init_generic() that is invoked from rcu_init().

This constituted a bug in a commit that never went to mainline, so
there is no need for any backporting to -stable.

Reported-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
kernel/rcu/rcu.h
kernel/rcu/tasks.h
kernel/rcu/tiny.c
kernel/rcu/tree.c