rcutorture: Limit reader duration if irq or bh disabled
Subsystems (2)
RFC PATCH 1/1 rcutorture: Limit reader duration if irq or bh disabled
Hello, Thomas,
As discussed on IRC. Thoughts?
Thanx, Paul
commit 6ba3f37d31b614d7a41c3a1eb472dfc4e44944af
Author: Paul E. McKenney <[email protected]> Date: Fri Jul 20 12:04:12 2018 -0700
rcutorture: Limit reader duration if irq or bh disabled
There are debug checks in some environments that will complain if the duration of a bh-disabled region of code exceeds about 50 milliseconds. Because rcu_read_delay() can produce a 50-millisecond delay and because there could be up to eight reader segments with such delays, this commit limits the maximum delay to 10 milliseconds if either interrupts or softirqs are disabled.
Reported-by Thomas Gleixner <[email protected]>
Signed-off-by Paul E. McKenney <[email protected]>
kernel/rcu/rcutorture.c +3 -1
@@ -341,7 +341,7 @@ rcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg * rtrsp)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
@@ -351,6 +351,8 @@ rcu_read_delay(struct torture_random_state *rrsp, struct rt_read_seg * rtrsp)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); rtrsp->rt_delay_ms = longdelay_ms; completed = cur_ops->get_gp_seq ();