diff options
author | Ingo Molnar <mingo@elte.hu> | 2010-08-23 11:32:34 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-08-23 11:32:34 +0200 |
commit | a6b9b4d50f492630443b38404d1f436b3b748c14 (patch) | |
tree | f3512389c42cecfae50b6a315ec6ab1fa470e30d /kernel/rcutorture.c | |
parent | e36c886a0f9d624377977fa6cae309cfd7f362fa (diff) | |
parent | 28457ee69c473a903e51e26c7bcd6f1e9eceb93e (diff) | |
download | op-kernel-dev-a6b9b4d50f492630443b38404d1f436b3b748c14.zip op-kernel-dev-a6b9b4d50f492630443b38404d1f436b3b748c14.tar.gz |
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu into core/rcu
Diffstat (limited to 'kernel/rcutorture.c')
-rw-r--r-- | kernel/rcutorture.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index 2e2726d..7297102 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c @@ -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) |