rcutorture: Check GP completion at stutter end
The rcu_torture_writer() function invokes stutter_wait() at the end of each writer pass, which occasionally blocks for an extended time period in order to ensure that RCU can handle intermittent loads. But part of handling a busy period is invoking all the callbacks before the end of the idle period induced by stutter_wait(). This commit therefore adds a return value to stutter_wait() indicating whether stutter_wait() actually waited. In addition, this commit causes rcu_torture_writer() to test this value and if set, checks that all the elements of the rcu_tortures[] array have been freed up. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
f4de46ed5b
commit
474e59b476
|
@ -77,7 +77,7 @@ void torture_shutdown_absorb(const char *title);
|
|||
int torture_shutdown_init(int ssecs, void (*cleanup)(void));
|
||||
|
||||
/* Task stuttering, which forces load/no-load transitions. */
|
||||
void stutter_wait(const char *title);
|
||||
bool stutter_wait(const char *title);
|
||||
int torture_stutter_init(int s);
|
||||
|
||||
/* Initialization and cleanup. */
|
||||
|
|
|
@ -1144,7 +1144,10 @@ rcu_torture_writer(void *arg)
|
|||
!rcu_gp_is_normal();
|
||||
}
|
||||
rcu_torture_writer_state = RTWS_STUTTER;
|
||||
stutter_wait("rcu_torture_writer");
|
||||
if (stutter_wait("rcu_torture_writer"))
|
||||
for (i = 0; i < ARRAY_SIZE(rcu_tortures); i++)
|
||||
if (list_empty(&rcu_tortures[i].rtort_free))
|
||||
WARN_ON_ONCE(1);
|
||||
} while (!torture_must_stop());
|
||||
/* Reset expediting back to unexpedited. */
|
||||
if (expediting > 0)
|
||||
|
|
|
@ -573,7 +573,7 @@ static int stutter;
|
|||
* Block until the stutter interval ends. This must be called periodically
|
||||
* by all running kthreads that need to be subject to stuttering.
|
||||
*/
|
||||
void stutter_wait(const char *title)
|
||||
bool stutter_wait(const char *title)
|
||||
{
|
||||
int spt;
|
||||
|
||||
|
@ -590,6 +590,7 @@ void stutter_wait(const char *title)
|
|||
}
|
||||
torture_shutdown_absorb(title);
|
||||
}
|
||||
return !!spt;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(stutter_wait);
|
||||
|
||||
|
|
Loading…
Reference in New Issue