提交 f7c0e6ad 编写于 作者: P Paul E. McKenney

rcutorture: Re-enable testing of dynamic expediting

During boot, normal grace periods are processed as expedited.  When
rcutorture is built into the kernel, it starts during boot and thus
detects that normal grace periods are unconditionally expedited.
Therefore, rcutorture concludes that there is no point in trying
to dynamically enable expediting, do it disables this aspect of testing,
which is a bit of an overreaction to the temporary boot-time expediting.

This commit therefore rechecks forced expediting throughout the test,
enabling dynamic expediting if normal grace periods are processed
normally at any point.
Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
上级 eb033993
...@@ -909,14 +909,10 @@ rcu_torture_writer(void *arg) ...@@ -909,14 +909,10 @@ rcu_torture_writer(void *arg)
int nsynctypes = 0; int nsynctypes = 0;
VERBOSE_TOROUT_STRING("rcu_torture_writer task started"); VERBOSE_TOROUT_STRING("rcu_torture_writer task started");
if (!can_expedite) { if (!can_expedite)
pr_alert("%s" TORTURE_FLAG pr_alert("%s" TORTURE_FLAG
" GP expediting controlled from boot/sysfs for %s,\n", " GP expediting controlled from boot/sysfs for %s.\n",
torture_type, cur_ops->name); torture_type, cur_ops->name);
pr_alert("%s" TORTURE_FLAG
" Disabled dynamic grace-period expediting.\n",
torture_type);
}
/* Initialize synctype[] array. If none set, take default. */ /* Initialize synctype[] array. If none set, take default. */
if (!gp_cond1 && !gp_exp1 && !gp_normal1 && !gp_sync1) if (!gp_cond1 && !gp_exp1 && !gp_normal1 && !gp_sync1)
...@@ -1011,6 +1007,9 @@ rcu_torture_writer(void *arg) ...@@ -1011,6 +1007,9 @@ rcu_torture_writer(void *arg)
rcu_unexpedite_gp(); rcu_unexpedite_gp();
if (++expediting > 3) if (++expediting > 3)
expediting = -expediting; expediting = -expediting;
} else if (!can_expedite) { /* Disabled during boot, recheck. */
can_expedite = !rcu_gp_is_expedited() &&
!rcu_gp_is_normal();
} }
rcu_torture_writer_state = RTWS_STUTTER; rcu_torture_writer_state = RTWS_STUTTER;
stutter_wait("rcu_torture_writer"); stutter_wait("rcu_torture_writer");
...@@ -1021,6 +1020,10 @@ rcu_torture_writer(void *arg) ...@@ -1021,6 +1020,10 @@ rcu_torture_writer(void *arg)
while (can_expedite && expediting++ < 0) while (can_expedite && expediting++ < 0)
rcu_unexpedite_gp(); rcu_unexpedite_gp();
WARN_ON_ONCE(can_expedite && rcu_gp_is_expedited()); WARN_ON_ONCE(can_expedite && rcu_gp_is_expedited());
if (!can_expedite)
pr_alert("%s" TORTURE_FLAG
" Dynamic grace-period expediting was disabled.\n",
torture_type);
rcu_torture_writer_state = RTWS_STOPPING; rcu_torture_writer_state = RTWS_STOPPING;
torture_kthread_stopping("rcu_torture_writer"); torture_kthread_stopping("rcu_torture_writer");
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册