mirror of https://gitee.com/openkylin/linux.git
rcutorture: add random preemption
Add random preemption to help we to torture the preemptable rcu. srcu_read_delay() also calls rcu_read_delay() for shorter delays. Added comment to preempt_schedule() call indicating that no quiescent states happen if preemption is disabled. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
84483ea42c
commit
e546f485e1
|
@ -303,6 +303,10 @@ static void rcu_read_delay(struct rcu_random_state *rrsp)
|
|||
mdelay(longdelay_ms);
|
||||
if (!(rcu_random(rrsp) % (nrealreaders * 2 * shortdelay_us)))
|
||||
udelay(shortdelay_us);
|
||||
#ifdef CONFIG_PREEMPT
|
||||
if (!preempt_count() && !(rcu_random(rrsp) % (nrealreaders * 20000)))
|
||||
preempt_schedule(); /* No QS if preempt_disable() in effect */
|
||||
#endif
|
||||
}
|
||||
|
||||
static void rcu_torture_read_unlock(int idx) __releases(RCU)
|
||||
|
@ -536,6 +540,8 @@ static void srcu_read_delay(struct rcu_random_state *rrsp)
|
|||
delay = rcu_random(rrsp) % (nrealreaders * 2 * longdelay * uspertick);
|
||||
if (!delay)
|
||||
schedule_timeout_interruptible(longdelay);
|
||||
else
|
||||
rcu_read_delay(rrsp);
|
||||
}
|
||||
|
||||
static void srcu_torture_read_unlock(int idx) __releases(&srcu_ctl)
|
||||
|
|
Loading…
Reference in New Issue