• Paul E. McKenney's avatar
    rcu: Stop treating in-kernel CPU-bound workloads as errors · 4914950a
    Paul E. McKenney authored
    Commit 4a81e832 ("Reduce overhead of cond_resched() checks for RCU")
    handles the error case where a nohz_full loops indefinitely in the kernel
    with the scheduling-clock interrupt disabled.  However, this handling
    includes IPIing the CPU running the offending loop, which is not what
    we want for real-time workloads.  And there are starting to be real-time
    CPU-bound in-kernel workloads, and these must be handled without IPIing
    the CPU, at least not in the common case.  Therefore, this situation can
    no longer be dismissed as an error case.
    
    This commit therefore splits the handling out, so that the setting of
    bits in the per-CPU rcu_sched_qs_mask variable is done relatively early,
    but if the problem persists, resched_cpu() is eventually used to IPI the
    CPU containing the offending loop.  Assuming that in-kernel CPU-bound
    loops used by real-time tasks contain frequent calls cond_resched_rcu_qs()
    (as in more than once per few tens of milliseconds), the real-time tasks
    will never be IPIed.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    4914950a
tree.c 142 KB