• Zqiang's avatar
    rcu: Use IRQ_WORK_INIT_HARD() to avoid rcu_read_unlock() hangs · f596e2ce
    Zqiang authored
    When booting kernels built with both CONFIG_RCU_STRICT_GRACE_PERIOD=y
    and CONFIG_PREEMPT_RT=y, the rcu_read_unlock_special() function's
    invocation of irq_work_queue_on() the init_irq_work() causes the
    rcu_preempt_deferred_qs_handler() function to work execute in SCHED_FIFO
    irq_work kthreads.  Because rcu_read_unlock_special() is invoked on each
    rcu_read_unlock() in such kernels, the amount of work just keeps piling
    up, resulting in a boot-time hang.
    
    This commit therefore avoids this hang by using IRQ_WORK_INIT_HARD()
    instead of init_irq_work(), but only in kernels built with both
    CONFIG_PREEMPT_RT=y and CONFIG_RCU_STRICT_GRACE_PERIOD=y.
    Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    f596e2ce
tree_plugin.h 43.2 KB