diff --git a/[refs] b/[refs] index dacca15ad828..3e320e37dc34 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 20377f32dcb77941d450728da18cce5b1a7faec5 +refs/heads/master: 5ff8e6f0535fe730e921ca347bc38dcb9e01791a diff --git a/trunk/kernel/rcutree.c b/trunk/kernel/rcutree.c index 916f42b39f1e..8105271fc10e 100644 --- a/trunk/kernel/rcutree.c +++ b/trunk/kernel/rcutree.c @@ -679,6 +679,15 @@ __rcu_process_gp_end(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_dat /* Remember that we saw this grace-period completion. */ rdp->completed = rnp->completed; + /* + * If we were in an extended quiescent state, we may have + * missed some grace periods that others CPUs took care on + * our behalf. Catch up with this state to avoid noting + * spurious new grace periods. + */ + if (rdp->completed > rdp->gpnum) + rdp->gpnum = rdp->completed; + /* * If another CPU handled our extended quiescent states and * we have no more grace period to complete yet, then stop