|
|
@@ -1807,10 +1807,12 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp,
|
|
|
rdp->rcu_qs_ctr_snap = __this_cpu_read(rcu_dynticks.rcu_qs_ctr);
|
|
|
rdp->core_needs_qs = need_gp;
|
|
|
zero_cpu_stall_ticks(rdp);
|
|
|
- WRITE_ONCE(rdp->gpwrap, false);
|
|
|
- rcu_gpnum_ovf(rnp, rdp);
|
|
|
}
|
|
|
rdp->gp_seq = rnp->gp_seq; /* Remember new grace-period state. */
|
|
|
+ if (ULONG_CMP_GE(rnp->gp_seq_needed, rdp->gp_seq_needed) || rdp->gpwrap)
|
|
|
+ rdp->gp_seq_needed = rnp->gp_seq_needed;
|
|
|
+ WRITE_ONCE(rdp->gpwrap, false);
|
|
|
+ rcu_gpnum_ovf(rnp, rdp);
|
|
|
return ret;
|
|
|
}
|
|
|
|