• Sebastian Andrzej Siewior's avatar
    rcu: Enable elimination of Tree-RCU softirq processing · 48d07c04
    Sebastian Andrzej Siewior authored
    Some workloads need to change kthread priority for RCU core processing
    without affecting other softirq work.  This commit therefore introduces
    the rcutree.use_softirq kernel boot parameter, which moves the RCU core
    work from softirq to a per-CPU SCHED_OTHER kthread named rcuc.  Use of
    SCHED_OTHER approach avoids the scalability problems that appeared
    with the earlier attempt to move RCU core processing to from softirq
    to kthreads.  That said, kernels built with RCU_BOOST=y will run the
    rcuc kthreads at the RCU-boosting priority.
    
    Note that rcutree.use_softirq=0 must be specified to move RCU core
    processing to the rcuc kthreads: rcutree.use_softirq=1 is the default.
    Reported-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Tested-by: default avatarMike Galbraith <efault@gmx.de>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    [ paulmck: Adjust for invoke_rcu_callbacks() only ever being invoked
      from RCU core processing, in contrast to softirq->rcuc transition
      in old mainline RCU priority boosting. ]
    [ paulmck: Avoid wakeups when scheduler might have invoked rcu_read_unlock()
      while holding rq or pi locks, also possibly fixing a pre-existing latent
      bug involving raise_softirq()-induced wakeups. ]
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.ibm.com>
    48d07c04
tree.h 17.9 KB