|
@@ -323,7 +323,7 @@ static void rcu_read_delay(struct torture_random_state *rrsp)
|
|
|
unsigned long started;
|
|
|
unsigned long completed;
|
|
|
const unsigned long shortdelay_us = 200;
|
|
|
- const unsigned long longdelay_ms = 300;
|
|
|
+ unsigned long longdelay_ms = 300;
|
|
|
unsigned long long ts;
|
|
|
|
|
|
/* We want a short delay sometimes to make a reader delay the grace
|
|
@@ -333,6 +333,8 @@ static void rcu_read_delay(struct torture_random_state *rrsp)
|
|
|
if (!(torture_random(rrsp) % (nrealreaders * 2000 * longdelay_ms))) {
|
|
|
started = cur_ops->get_gp_seq();
|
|
|
ts = rcu_trace_clock_local();
|
|
|
+ if (preempt_count() & (SOFTIRQ_MASK | HARDIRQ_MASK))
|
|
|
+ longdelay_ms = 5; /* Avoid triggering BH limits. */
|
|
|
mdelay(longdelay_ms);
|
|
|
completed = cur_ops->get_gp_seq();
|
|
|
do_trace_rcu_torture_read(cur_ops->name, NULL, ts,
|