]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
rcutorture: Make rcu_torture_reader() use cond_resched()
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 12 Mar 2014 17:26:35 +0000 (10:26 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 14 May 2014 16:46:13 +0000 (09:46 -0700)
The rcu_torture_reader() function currently uses schedule().  This commit
therefore speeds things up a bit by substituting cond_resched().
This change makes rcu_torture_reader() more CPU-bound, so this commit
also adjusts the number of readers (the "nreaders" module parameter,
which feeds into the "nrealreaders" variable) to allow one CPU to be
free of readers on SMP systems.  The point of this is to increase the
probability that readers will be watching while an updater makes a change.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
kernel/rcu/rcutorture.c

index 37ae5e1d4a1dc787bc2abacf60eec9cc5b3a77c4..693a90fcee83873b5107664b41f20a6c92b78512 100644 (file)
@@ -942,7 +942,7 @@ rcu_torture_reader(void *arg)
                __this_cpu_inc(rcu_torture_batch[completed]);
                preempt_enable();
                cur_ops->readunlock(idx);
-               schedule();
+               cond_resched();
                stutter_wait("rcu_torture_reader");
        } while (!torture_must_stop());
        if (irqreader && cur_ops->irq_capable)
@@ -1482,10 +1482,13 @@ rcu_torture_init(void)
        if (cur_ops->init)
                cur_ops->init(); /* no "goto unwind" prior to this point!!! */
 
-       if (nreaders >= 0)
+       if (nreaders >= 0) {
                nrealreaders = nreaders;
-       else
-               nrealreaders = 2 * num_online_cpus();
+       } else {
+               nrealreaders = num_online_cpus() - 1;
+               if (nrealreaders <= 0)
+                       nrealreaders = 1;
+       }
        rcu_torture_print_module_parms(cur_ops, "Start of test");
 
        /* Set up the freelist. */