Commit 444da518 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcutorture: Force occasional reader waits



Deferred quiescent states can interact with the scheduler, but
rcu_torture_reader() does not force such interaction all that frequently.
This commit therefore blocks for one jiffy after ten jiffies of read-side
runtime.  This has the beneficial effect of being most likely to block
just after long-running readers, and it is exactly these readers that
are most likely to have been preempted (in CONFIG_PREEMPT=y kernels).
This in turn helps increase the probability that a deferred quiescent
state will be seen by RCU's context-switch hooks.

Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 31e74907
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1387,6 +1387,7 @@ static void rcu_torture_timer(struct timer_list *unused)
static int
rcu_torture_reader(void *arg)
{
	unsigned long lastsleep = jiffies;
	DEFINE_TORTURE_RANDOM(rand);
	struct timer_list t;

@@ -1402,6 +1403,10 @@ rcu_torture_reader(void *arg)
		}
		if (!rcu_torture_one_read(&rand))
			schedule_timeout_interruptible(HZ);
		if (time_after(jiffies, lastsleep)) {
			schedule_timeout_interruptible(1);
			lastsleep = jiffies + 10;
		}
		stutter_wait("rcu_torture_reader");
	} while (!torture_must_stop());
	if (irqreader && cur_ops->irq_capable) {