rcutorture: Forgive RCU boost failures when CPUs don't pass through QS
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 8 Apr 2021 20:01:14 +0000 (13:01 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 10 May 2021 23:05:07 +0000 (16:05 -0700)
commit0260b92e1c39412b1e345e202355c43169c16274
tree8884aa3e0337720828f0bb872e96ff7cf487b3d3
parentd4240d628f989efe32b3ad10a78d6921f8e28bd6
rcutorture: Forgive RCU boost failures when CPUs don't pass through QS

Currently, rcu_torture_boost() runs CPU-bound at real-time priority
to force RCU priority inversions.  It then checks that grace periods
progress during this CPU-bound time.  If grace periods fail to progress,
it reports and RCU priority boosting failure.

However, it is possible (and sometimes does happen) that the grace period
fails to progress due to a CPU failing to pass through a quiescent state
for an extended time period (3.5 seconds by default).  This can happen
due to vCPU preemption, long-running interrupts, and much else besides.
There is nothing that RCU priority boosting can do about these situations,
and so they should not be counted as RCU priority boosting failures.

This commit therefore checks for CPUs (as opposed to preempted tasks)
holding up a grace period, and flags the resulting RCU priority boosting
failures, but does not splat nor count them as errors.  It does rate-limit
them to avoid flooding the console log.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/rcu.h
kernel/rcu/rcutorture.c
kernel/rcu/tree_stall.h