rcu: Move smp_mb() from rcu_seq_snap() to rcu_exp_gp_seq_snap()
The memory barrier in rcu_seq_snap() is needed only for grace periods, so this commit moves it to the grace-period-oriented wrapper rcu_exp_gp_seq_snap(). Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
@@ -3347,7 +3347,6 @@ static unsigned long rcu_seq_snap(unsigned long *sp)
|
|||||||
{
|
{
|
||||||
unsigned long s;
|
unsigned long s;
|
||||||
|
|
||||||
smp_mb(); /* Caller's modifications seen first by other CPUs. */
|
|
||||||
s = (READ_ONCE(*sp) + 3) & ~0x1;
|
s = (READ_ONCE(*sp) + 3) & ~0x1;
|
||||||
smp_mb(); /* Above access must not bleed into critical section. */
|
smp_mb(); /* Above access must not bleed into critical section. */
|
||||||
return s;
|
return s;
|
||||||
@@ -3374,6 +3373,7 @@ static void rcu_exp_gp_seq_end(struct rcu_state *rsp)
|
|||||||
}
|
}
|
||||||
static unsigned long rcu_exp_gp_seq_snap(struct rcu_state *rsp)
|
static unsigned long rcu_exp_gp_seq_snap(struct rcu_state *rsp)
|
||||||
{
|
{
|
||||||
|
smp_mb(); /* Caller's modifications seen first by other CPUs. */
|
||||||
return rcu_seq_snap(&rsp->expedited_sequence);
|
return rcu_seq_snap(&rsp->expedited_sequence);
|
||||||
}
|
}
|
||||||
static bool rcu_exp_gp_seq_done(struct rcu_state *rsp, unsigned long s)
|
static bool rcu_exp_gp_seq_done(struct rcu_state *rsp, unsigned long s)
|
||||||
|
|||||||
Reference in New Issue
Block a user