summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-03-04 11:03:21 -0800
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-05-14 09:46:02 -0700
commitab7d45053f99f44f81a221eb5c9fbe253ee94524 (patch)
treee4d5726c3b6dc260eb1c53ad97002d56764180b5
parentfff35c4e9fbb0982aef6230cbf713c2492925eca (diff)
downloadlinux-ab7d45053f99f44f81a221eb5c9fbe253ee94524.tar.gz
linux-ab7d45053f99f44f81a221eb5c9fbe253ee94524.tar.bz2
linux-ab7d45053f99f44f81a221eb5c9fbe253ee94524.zip
torture: Increase stutter-end intensity
Currently, all stuttered kthreads block a jiffy at a time, which can result in them starting at different times. (Note: This is not an energy-efficiency problem unless you run torture tests in production, in which case you have other problems!) This commit increases the intensity of the restart event by causing kthreads to spin through the last jiffy, restarting when they see the variable change. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
-rw-r--r--kernel/torture.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/kernel/torture.c b/kernel/torture.c
index e5af6be2594d..bc0ee382b3c8 100644
--- a/kernel/torture.c
+++ b/kernel/torture.c
@@ -533,7 +533,11 @@ void stutter_wait(const char *title)
while (ACCESS_ONCE(stutter_pause_test) ||
(torture_runnable && !ACCESS_ONCE(*torture_runnable))) {
if (stutter_pause_test)
- schedule_timeout_interruptible(1);
+ if (ACCESS_ONCE(stutter_pause_test) == 1)
+ schedule_timeout_interruptible(1);
+ else
+ while (ACCESS_ONCE(stutter_pause_test))
+ cond_resched();
else
schedule_timeout_interruptible(round_jiffies_relative(HZ));
torture_shutdown_absorb(title);
@@ -550,7 +554,11 @@ static int torture_stutter(void *arg)
VERBOSE_TOROUT_STRING("torture_stutter task started");
do {
if (!torture_must_stop()) {
- schedule_timeout_interruptible(stutter);
+ if (stutter > 1) {
+ schedule_timeout_interruptible(stutter - 1);
+ ACCESS_ONCE(stutter_pause_test) = 2;
+ }
+ schedule_timeout_interruptible(1);
ACCESS_ONCE(stutter_pause_test) = 1;
}
if (!torture_must_stop())