rcutorture: Enable SRCU readers from timer handler
Now that it is legal to invoke srcu_read_lock() and srcu_read_unlock()
for a given srcu_struct from both process context and {soft,}irq
handlers, it is time to test it. This commit therefore enables
testing of SRCU readers from rcutorture's timer handler, using in_task()
to determine whether or not it is safe to sleep in the SRCU read-side
critical sections.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
@@ -522,7 +522,7 @@ static void srcu_read_delay(struct torture_random_state *rrsp)
|
|||||||
|
|
||||||
delay = torture_random(rrsp) %
|
delay = torture_random(rrsp) %
|
||||||
(nrealreaders * 2 * longdelay * uspertick);
|
(nrealreaders * 2 * longdelay * uspertick);
|
||||||
if (!delay)
|
if (!delay && in_task())
|
||||||
schedule_timeout_interruptible(longdelay);
|
schedule_timeout_interruptible(longdelay);
|
||||||
else
|
else
|
||||||
rcu_read_delay(rrsp);
|
rcu_read_delay(rrsp);
|
||||||
@@ -583,6 +583,7 @@ static struct rcu_torture_ops srcu_ops = {
|
|||||||
.call = srcu_torture_call,
|
.call = srcu_torture_call,
|
||||||
.cb_barrier = srcu_torture_barrier,
|
.cb_barrier = srcu_torture_barrier,
|
||||||
.stats = srcu_torture_stats,
|
.stats = srcu_torture_stats,
|
||||||
|
.irq_capable = 1,
|
||||||
.name = "srcu"
|
.name = "srcu"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -615,6 +616,7 @@ static struct rcu_torture_ops srcud_ops = {
|
|||||||
.call = srcu_torture_call,
|
.call = srcu_torture_call,
|
||||||
.cb_barrier = srcu_torture_barrier,
|
.cb_barrier = srcu_torture_barrier,
|
||||||
.stats = srcu_torture_stats,
|
.stats = srcu_torture_stats,
|
||||||
|
.irq_capable = 1,
|
||||||
.name = "srcud"
|
.name = "srcud"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user