mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 08:39:52 +00:00
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: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
31e7490741
commit
444da518fd
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user