• Paul E. McKenney's avatar
    rcu: Invoke rcu_spawn_core_kthreads() from rcu_spawn_gp_kthread() · 8e4b1d2b
    Paul E. McKenney authored
    Currently, rcu_spawn_core_kthreads() is invoked via an early_initcall(),
    which works, except that rcu_spawn_gp_kthread() is also invoked via an
    early_initcall() and rcu_spawn_core_kthreads() relies on adjustments to
    kthread_prio that are carried out by rcu_spawn_gp_kthread().  There is
    no guaranttee of ordering among early_initcall() handlers, and thus no
    guarantee that kthread_prio will be properly checked and range-limited
    at the time that rcu_spawn_core_kthreads() needs it.
    
    In most cases, this bug is harmless.  After all, the only reason that
    rcu_spawn_gp_kthread() adjusts the value of kthread_prio is if the user
    specified a nonsensical value for this boot parameter, which experience
    indicates is rare.
    
    Nevertheless, a bug is a bug.  This commit therefore causes the
    rcu_spawn_core_kthreads() function to be invoked directly from
    rcu_spawn_gp_kthread() after any needed adjustments to kthread_prio have
    been carried out.
    
    Fixes: 48d07c04
    
     ("rcu: Enable elimination of Tree-RCU softirq processing")
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    8e4b1d2b
tree.c 150 KB