mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
rcu: Remove redundant READ_ONCE() of rcu_state.gp_flags in tree.c
Although it is functionally OK to do READ_ONCE() of a variable that cannot change, it is confusing and at best an accident waiting to happen. This commit therefore removes a number of READ_ONCE(rcu_state.gp_flags) instances from kernel/rcu/tree.c that are not needed due to updates to this field being excluded by virtue of holding the root rcu_node structure's ->lock. Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Closes: https://lore.kernel.org/lkml/4857c5ef-bd8f-4670-87ac-0600a1699d05@paulmck-laptop/T/#mccb23c2a4902da4d3c750165329f8de056903c58 Reported-by: Julia Lawall <julia.lawall@inria.fr> Closes: https://lore.kernel.org/lkml/4857c5ef-bd8f-4670-87ac-0600a1699d05@paulmck-laptop/T/#md1b5c026584f9c3c7b0fbc9240dd7de584597b73 Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
This commit is contained in:
parent
11b8b378c5
commit
62bb24c4b0
@ -1463,7 +1463,7 @@ static noinline_for_stack bool rcu_gp_init(void)
|
||||
|
||||
WRITE_ONCE(rcu_state.gp_activity, jiffies);
|
||||
raw_spin_lock_irq_rcu_node(rnp);
|
||||
if (!READ_ONCE(rcu_state.gp_flags)) {
|
||||
if (!rcu_state.gp_flags) {
|
||||
/* Spurious wakeup, tell caller to go back to sleep. */
|
||||
raw_spin_unlock_irq_rcu_node(rnp);
|
||||
return false;
|
||||
@ -1648,8 +1648,7 @@ static void rcu_gp_fqs(bool first_time)
|
||||
/* Clear flag to prevent immediate re-entry. */
|
||||
if (READ_ONCE(rcu_state.gp_flags) & RCU_GP_FLAG_FQS) {
|
||||
raw_spin_lock_irq_rcu_node(rnp);
|
||||
WRITE_ONCE(rcu_state.gp_flags,
|
||||
READ_ONCE(rcu_state.gp_flags) & ~RCU_GP_FLAG_FQS);
|
||||
WRITE_ONCE(rcu_state.gp_flags, rcu_state.gp_flags & ~RCU_GP_FLAG_FQS);
|
||||
raw_spin_unlock_irq_rcu_node(rnp);
|
||||
}
|
||||
}
|
||||
@ -1910,8 +1909,7 @@ static void rcu_report_qs_rsp(unsigned long flags)
|
||||
{
|
||||
raw_lockdep_assert_held_rcu_node(rcu_get_root());
|
||||
WARN_ON_ONCE(!rcu_gp_in_progress());
|
||||
WRITE_ONCE(rcu_state.gp_flags,
|
||||
READ_ONCE(rcu_state.gp_flags) | RCU_GP_FLAG_FQS);
|
||||
WRITE_ONCE(rcu_state.gp_flags, rcu_state.gp_flags | RCU_GP_FLAG_FQS);
|
||||
raw_spin_unlock_irqrestore_rcu_node(rcu_get_root(), flags);
|
||||
rcu_gp_kthread_wake();
|
||||
}
|
||||
@ -2426,8 +2424,7 @@ void rcu_force_quiescent_state(void)
|
||||
raw_spin_unlock_irqrestore_rcu_node(rnp_old, flags);
|
||||
return; /* Someone beat us to it. */
|
||||
}
|
||||
WRITE_ONCE(rcu_state.gp_flags,
|
||||
READ_ONCE(rcu_state.gp_flags) | RCU_GP_FLAG_FQS);
|
||||
WRITE_ONCE(rcu_state.gp_flags, rcu_state.gp_flags | RCU_GP_FLAG_FQS);
|
||||
raw_spin_unlock_irqrestore_rcu_node(rnp_old, flags);
|
||||
rcu_gp_kthread_wake();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user