|
@@ -281,14 +281,17 @@ static int rcu_torture_read_lock(void) __acquires(RCU)
|
|
|
|
|
|
static void rcu_read_delay(struct rcu_random_state *rrsp)
|
|
static void rcu_read_delay(struct rcu_random_state *rrsp)
|
|
{
|
|
{
|
|
- long delay;
|
|
|
|
- const long longdelay = 200;
|
|
|
|
|
|
+ const unsigned long shortdelay_us = 200;
|
|
|
|
+ const unsigned long longdelay_ms = 50;
|
|
|
|
|
|
- /* We want there to be long-running readers, but not all the time. */
|
|
|
|
|
|
+ /* We want a short delay sometimes to make a reader delay the grace
|
|
|
|
+ * period, and we want a long delay occasionally to trigger
|
|
|
|
+ * force_quiescent_state. */
|
|
|
|
|
|
- delay = rcu_random(rrsp) % (nrealreaders * 2 * longdelay);
|
|
|
|
- if (!delay)
|
|
|
|
- udelay(longdelay);
|
|
|
|
|
|
+ if (!(rcu_random(rrsp) % (nrealreaders * 2000 * longdelay_ms)))
|
|
|
|
+ mdelay(longdelay_ms);
|
|
|
|
+ if (!(rcu_random(rrsp) % (nrealreaders * 2 * shortdelay_us)))
|
|
|
|
+ udelay(shortdelay_us);
|
|
}
|
|
}
|
|
|
|
|
|
static void rcu_torture_read_unlock(int idx) __releases(RCU)
|
|
static void rcu_torture_read_unlock(int idx) __releases(RCU)
|