summaryrefslogtreecommitdiffstats
path: root/kernel/rcutorture.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2010-08-23 11:32:34 +0200
committerIngo Molnar <mingo@elte.hu>2010-08-23 11:32:34 +0200
commita6b9b4d50f492630443b38404d1f436b3b748c14 (patch)
treef3512389c42cecfae50b6a315ec6ab1fa470e30d /kernel/rcutorture.c
parente36c886a0f9d624377977fa6cae309cfd7f362fa (diff)
parent28457ee69c473a903e51e26c7bcd6f1e9eceb93e (diff)
downloadop-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.c6
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)
OpenPOWER on IntegriCloud