diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-07-19 22:07:20 +0200 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2018-08-29 18:20:48 +0200 |
commit | 08a7a2ec68348ebc6d8bf5f20df23815fc0d332b (patch) | |
tree | da28486608c70a53dff7dc4276053e45b8405c35 /kernel/rcu/rcutorture.c | |
parent | rcutorture: Avoid no-test complaint if too few forward-progress tries (diff) | |
download | linux-08a7a2ec68348ebc6d8bf5f20df23815fc0d332b.tar.xz linux-08a7a2ec68348ebc6d8bf5f20df23815fc0d332b.zip |
rcutorture: Vary forward-progress test interval
Some of the Linux kernel's RCU implementations provide several mechanisms
to promote forward progress that operate over different timeframes.
This commit therefore causes rcu_torture_fwd_prog() to vary the duration
of its forward-progress testing in order to test each such mechanism.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/rcutorture.c')
-rw-r--r-- | kernel/rcu/rcutorture.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 8ab23143c244..89cc4d9c9a0c 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1676,16 +1676,21 @@ static int rcu_torture_fwd_prog(void *args) unsigned long cver; unsigned long gps; int idx; + int sd; + int sd4; unsigned long stopat; bool tested = false; int tested_tries = 0; + static DEFINE_TORTURE_RANDOM(trs); VERBOSE_TOROUT_STRING("rcu_torture_fwd_progress task started"); do { schedule_timeout_interruptible(fwd_progress_holdoff * HZ); cver = READ_ONCE(rcu_torture_current_version); gps = cur_ops->get_gp_seq(); - stopat = jiffies + cur_ops->stall_dur() / fwd_progress_div; + sd = cur_ops->stall_dur() + 1; + sd4 = (sd + fwd_progress_div - 1) / fwd_progress_div; + stopat = jiffies + sd4 + torture_random(&trs) % (sd - sd4); while (time_before(jiffies, stopat) && !torture_must_stop()) { idx = cur_ops->readlock(); udelay(10); |