• Paul E. McKenney's avatar
    rcutorture: Don't count CPU-stalled time against priority boosting · 063f5a4d
    Paul E. McKenney authored
    It will frequently be the case that rcu_torture_boost() will get a
    ->start_gp_poll() cookie that needs almost all of the current grace period
    plus an additional grace period to elapse before ->poll_gp_state() will
    return true.  It is quite possible that the current grace period will have
    (say) two seconds of stall by a CPU failing to pass through a quiescent
    state, followed by 300 milliseconds of delay due to a preempted reader.
    The next grace period might suffer only one second of stall by a CPU,
    followed by another 300 milliseconds of delay due to a preempted reader.
    This is an example of RCU priority boosting doing its job, but the full
    elapsed time of 3.6 seconds exceeds the 3.5-second limit.  In addition,
    there is no CPU stall in force at the 3.5-second mark, so this would
    nevertheless currently be counted as an RCU priority boosting failure.
    
    This commit therefore avoids this sort of false positive by resetting
    the gp_state_time timestamp any time that the current grace period is
    being blocked by a CPU.  This results in extremely frequent calls to
    the ->check_boost_failed() function, so this commit provides a lockless
    fastpath that is selected by supplying a NULL CPU-number pointer.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    063f5a4d
rcutorture.c 96 KB