mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-16 03:37:05 +00:00
rcutorture: Apply ACCESS_ONCE() to racy fullstop accesses
Because the fullstop variable can be accessed while it is being updated, this commit avoids any resulting compiler mischief through use of ACCESS_ONCE() for non-initialization accesses to this shared variable. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
628edaa506
commit
57a2fe90fc
1 changed files with 5 additions and 5 deletions
|
|
@ -439,9 +439,9 @@ static int torture_shutdown_notify(struct notifier_block *unused1,
|
||||||
unsigned long unused2, void *unused3)
|
unsigned long unused2, void *unused3)
|
||||||
{
|
{
|
||||||
mutex_lock(&fullstop_mutex);
|
mutex_lock(&fullstop_mutex);
|
||||||
if (fullstop == FULLSTOP_DONTSTOP) {
|
if (ACCESS_ONCE(fullstop) == FULLSTOP_DONTSTOP) {
|
||||||
VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected");
|
VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected");
|
||||||
fullstop = FULLSTOP_SHUTDOWN;
|
ACCESS_ONCE(fullstop) = FULLSTOP_SHUTDOWN;
|
||||||
} else {
|
} else {
|
||||||
pr_warn("Concurrent rmmod and shutdown illegal!\n");
|
pr_warn("Concurrent rmmod and shutdown illegal!\n");
|
||||||
}
|
}
|
||||||
|
|
@ -575,13 +575,13 @@ EXPORT_SYMBOL_GPL(torture_init_end);
|
||||||
bool torture_cleanup(void)
|
bool torture_cleanup(void)
|
||||||
{
|
{
|
||||||
mutex_lock(&fullstop_mutex);
|
mutex_lock(&fullstop_mutex);
|
||||||
if (fullstop == FULLSTOP_SHUTDOWN) {
|
if (ACCESS_ONCE(fullstop) == FULLSTOP_SHUTDOWN) {
|
||||||
pr_warn("Concurrent rmmod and shutdown illegal!\n");
|
pr_warn("Concurrent rmmod and shutdown illegal!\n");
|
||||||
mutex_unlock(&fullstop_mutex);
|
mutex_unlock(&fullstop_mutex);
|
||||||
schedule_timeout_uninterruptible(10);
|
schedule_timeout_uninterruptible(10);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
fullstop = FULLSTOP_RMMOD;
|
ACCESS_ONCE(fullstop) = FULLSTOP_RMMOD;
|
||||||
mutex_unlock(&fullstop_mutex);
|
mutex_unlock(&fullstop_mutex);
|
||||||
unregister_reboot_notifier(&torture_shutdown_nb);
|
unregister_reboot_notifier(&torture_shutdown_nb);
|
||||||
torture_shuffle_cleanup();
|
torture_shuffle_cleanup();
|
||||||
|
|
@ -605,6 +605,6 @@ EXPORT_SYMBOL_GPL(torture_must_stop);
|
||||||
*/
|
*/
|
||||||
bool torture_must_stop_irq(void)
|
bool torture_must_stop_irq(void)
|
||||||
{
|
{
|
||||||
return fullstop != FULLSTOP_DONTSTOP;
|
return ACCESS_ONCE(fullstop) != FULLSTOP_DONTSTOP;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(torture_must_stop_irq);
|
EXPORT_SYMBOL_GPL(torture_must_stop_irq);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue