summaryrefslogtreecommitdiffstats
path: root/kernel/rcu
diff options
context:
space:
mode:
authorPaul E. McKenney2019-04-15 23:50:05 +0200
committerPaul E. McKenney2019-05-28 18:06:09 +0200
commit3432d765c59ba026de49bd4f1f0c2adeff0e7a16 (patch)
tree2c68bf2e04c85af0d6dfd43d0b7390b8c070ab42 /kernel/rcu
parentrcutorture: Give the scheduler a chance on PREEMPT && NO_HZ_FULL kernels (diff)
downloadkernel-qcow2-linux-3432d765c59ba026de49bd4f1f0c2adeff0e7a16.tar.gz
kernel-qcow2-linux-3432d765c59ba026de49bd4f1f0c2adeff0e7a16.tar.xz
kernel-qcow2-linux-3432d765c59ba026de49bd4f1f0c2adeff0e7a16.zip
rcutorture: Halt forward-progress checks at end of run
Once removed, an rcu_torture element can be deferred-freed by a chain of call_rcu() invocations, with each callback invoking another round of call_rcu() until either a fixed number of call_rcu() invocations have been chained or until the test ends. This means that if the test ends, some of the rcu_torture elements will be "stranded" partway through the deferred-free process, which results in false-positive warnings from rcu_torture_writer() due to lack of forward progress should the test end just at the end of a stutter interval. This commit therefore suppresses rcu_torture_writer()'s forward-progress checks when the test ends in order to avoid these false-positive reports.. Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
Diffstat (limited to 'kernel/rcu')
-rw-r--r--kernel/rcu/rcutorture.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index ef6f6dedf4c4..a3f5488a319a 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1014,7 +1014,8 @@ rcu_torture_writer(void *arg)
rcu_torture_writer_state = RTWS_STUTTER;
if (stutter_wait("rcu_torture_writer") &&
!READ_ONCE(rcu_fwd_cb_nodelay) &&
- !cur_ops->slow_gps)
+ !cur_ops->slow_gps &&
+ !torture_must_stop())
for (i = 0; i < ARRAY_SIZE(rcu_tortures); i++)
if (list_empty(&rcu_tortures[i].rtort_free) &&
rcu_access_pointer(rcu_torture_current) !=