On Fri, 18 Sep 2026 15:10:30 +0000, [email protected] wrote:
> However, the per-cpu rtp_exit_list list head cannot be statically
> initialized and is dynamically initialized via cblist_init_generic() from
> a core_initcall. Since core_initcalls are executed much later by the
> kernel_init thread, any preemption before that phase will attempt to
> list_add() to a zero-initialized (null) rtp_exit_list.

No, cblist_init_generic() is not run from the core_initcall. It is run
from rcu_init() -> tasks_cblist_init_generic(), which start_kernel()
calls with interrupts still disabled (the function asserts as much) and
well before its local_irq_enable(). The core_initcall only spawns the
grace-period kthread. So the per-CPU rtp_exit_list heads exist before
the first interrupt can be taken, let alone an irq-exit preemption; the
classic flavor's exit_tasks_rcu_start() already depends on the same
ordering for the same list.

Thanks,

Josef

Reply via email to