|
@@ -573,18 +573,21 @@ static int stutter;
|
|
*/
|
|
*/
|
|
void stutter_wait(const char *title)
|
|
void stutter_wait(const char *title)
|
|
{
|
|
{
|
|
|
|
+ int spt;
|
|
|
|
+
|
|
cond_resched_rcu_qs();
|
|
cond_resched_rcu_qs();
|
|
- while (READ_ONCE(stutter_pause_test) ||
|
|
|
|
- (torture_runnable && !READ_ONCE(*torture_runnable))) {
|
|
|
|
- if (stutter_pause_test)
|
|
|
|
- if (READ_ONCE(stutter_pause_test) == 1)
|
|
|
|
- schedule_timeout_interruptible(1);
|
|
|
|
- else
|
|
|
|
- while (READ_ONCE(stutter_pause_test))
|
|
|
|
- cond_resched();
|
|
|
|
- else
|
|
|
|
|
|
+ spt = READ_ONCE(stutter_pause_test);
|
|
|
|
+ while (spt || (torture_runnable && !READ_ONCE(*torture_runnable))) {
|
|
|
|
+ if (spt == 1) {
|
|
|
|
+ schedule_timeout_interruptible(1);
|
|
|
|
+ } else if (spt == 2) {
|
|
|
|
+ while (READ_ONCE(stutter_pause_test))
|
|
|
|
+ cond_resched();
|
|
|
|
+ } else {
|
|
schedule_timeout_interruptible(round_jiffies_relative(HZ));
|
|
schedule_timeout_interruptible(round_jiffies_relative(HZ));
|
|
|
|
+ }
|
|
torture_shutdown_absorb(title);
|
|
torture_shutdown_absorb(title);
|
|
|
|
+ spt = READ_ONCE(stutter_pause_test);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(stutter_wait);
|
|
EXPORT_SYMBOL_GPL(stutter_wait);
|
|
@@ -597,17 +600,15 @@ static int torture_stutter(void *arg)
|
|
{
|
|
{
|
|
VERBOSE_TOROUT_STRING("torture_stutter task started");
|
|
VERBOSE_TOROUT_STRING("torture_stutter task started");
|
|
do {
|
|
do {
|
|
- if (!torture_must_stop()) {
|
|
|
|
- if (stutter > 1) {
|
|
|
|
- schedule_timeout_interruptible(stutter - 1);
|
|
|
|
- WRITE_ONCE(stutter_pause_test, 2);
|
|
|
|
- }
|
|
|
|
- schedule_timeout_interruptible(1);
|
|
|
|
|
|
+ if (!torture_must_stop() && stutter > 1) {
|
|
WRITE_ONCE(stutter_pause_test, 1);
|
|
WRITE_ONCE(stutter_pause_test, 1);
|
|
|
|
+ schedule_timeout_interruptible(stutter - 1);
|
|
|
|
+ WRITE_ONCE(stutter_pause_test, 2);
|
|
|
|
+ schedule_timeout_interruptible(1);
|
|
}
|
|
}
|
|
|
|
+ WRITE_ONCE(stutter_pause_test, 0);
|
|
if (!torture_must_stop())
|
|
if (!torture_must_stop())
|
|
schedule_timeout_interruptible(stutter);
|
|
schedule_timeout_interruptible(stutter);
|
|
- WRITE_ONCE(stutter_pause_test, 0);
|
|
|
|
torture_shutdown_absorb("torture_stutter");
|
|
torture_shutdown_absorb("torture_stutter");
|
|
} while (!torture_must_stop());
|
|
} while (!torture_must_stop());
|
|
torture_kthread_stopping("torture_stutter");
|
|
torture_kthread_stopping("torture_stutter");
|