|
@@ -1846,6 +1846,7 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp,
|
|
|
struct rcu_data *rdp)
|
|
|
{
|
|
|
bool ret;
|
|
|
+ bool need_gp;
|
|
|
|
|
|
/* Handle the ends of any preceding grace periods first. */
|
|
|
if (rdp->completed == rnp->completed &&
|
|
@@ -1872,9 +1873,10 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp,
|
|
|
*/
|
|
|
rdp->gpnum = rnp->gpnum;
|
|
|
trace_rcu_grace_period(rsp->name, rdp->gpnum, TPS("cpustart"));
|
|
|
- rdp->cpu_no_qs.b.norm = true;
|
|
|
+ need_gp = !!(rnp->qsmask & rdp->grpmask);
|
|
|
+ rdp->cpu_no_qs.b.norm = need_gp;
|
|
|
rdp->rcu_qs_ctr_snap = __this_cpu_read(rcu_qs_ctr);
|
|
|
- rdp->core_needs_qs = !!(rnp->qsmask & rdp->grpmask);
|
|
|
+ rdp->core_needs_qs = need_gp;
|
|
|
zero_cpu_stall_ticks(rdp);
|
|
|
WRITE_ONCE(rdp->gpwrap, false);
|
|
|
}
|