diff options
-rw-r--r-- | kernel/rcutorture.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index b33db539a8ad..328a8257c885 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c | |||
@@ -281,14 +281,17 @@ static int rcu_torture_read_lock(void) __acquires(RCU) | |||
281 | 281 | ||
282 | static void rcu_read_delay(struct rcu_random_state *rrsp) | 282 | static void rcu_read_delay(struct rcu_random_state *rrsp) |
283 | { | 283 | { |
284 | long delay; | 284 | const unsigned long shortdelay_us = 200; |
285 | const long longdelay = 200; | 285 | const unsigned long longdelay_ms = 50; |
286 | 286 | ||
287 | /* We want there to be long-running readers, but not all the time. */ | 287 | /* We want a short delay sometimes to make a reader delay the grace |
288 | * period, and we want a long delay occasionally to trigger | ||
289 | * force_quiescent_state. */ | ||
288 | 290 | ||
289 | delay = rcu_random(rrsp) % (nrealreaders * 2 * longdelay); | 291 | if (!(rcu_random(rrsp) % (nrealreaders * 2000 * longdelay_ms))) |
290 | if (!delay) | 292 | mdelay(longdelay_ms); |
291 | udelay(longdelay); | 293 | if (!(rcu_random(rrsp) % (nrealreaders * 2 * shortdelay_us))) |
294 | udelay(shortdelay_us); | ||
292 | } | 295 | } |
293 | 296 | ||
294 | static void rcu_torture_read_unlock(int idx) __releases(RCU) | 297 | static void rcu_torture_read_unlock(int idx) __releases(RCU) |