• Paul E. McKenney's avatar
    rcutorture: Give the scheduler a chance on PREEMPT && NO_HZ_FULL kernels · ab21f608
    Paul E. McKenney authored
    In !PREEMPT kernels, cond_resched() is a no-op.  In NO_HZ_FULL kernels,
    in-kernel execution (such as that of rcutorture's kthreads) might extend
    indefinitely without the scheduler gaining the aid of a scheduling-clock
    interrupt.  This combination can make the interaction of an rcutorture
    forward-progress test and a CPU-hotplug stop_machine operation make less
    forward progress than one might like.  Additionally, Sebastian Siewior
    notes that NO_HZ_FULL kernels have a scheduler check upon return to
    userspace execution, which suggests that in-kernel emulation of tight
    userspace loops containing system calls doing call_rcu() might also need
    explicit checks in the PREEMPT && NO_HZ_FULL case.
    
    This commit therefore introduces a rcu_torture_fwd_prog_cond_resched()
    function that explicitly invokes schedule() in such kernels whenever
    need_resched() returns true, while retaining use of cond_resched()
    for kernels that are either !PREEMPT or !NO_HZ_FULL.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.ibm.com>
    ab21f608
rcutorture.c 71.6 KB