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
