diff options
Diffstat (limited to 'kernel/rcu/tree.c')
| -rw-r--r-- | kernel/rcu/tree.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index a7773fc72b0c..72adf97458e3 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
| @@ -3731,6 +3731,11 @@ static void rcu_cleanup_dying_idle_cpu(int cpu, struct rcu_state *rsp) | |||
| 3731 | /* Remove outgoing CPU from mask in the leaf rcu_node structure. */ | 3731 | /* Remove outgoing CPU from mask in the leaf rcu_node structure. */ |
| 3732 | mask = rdp->grpmask; | 3732 | mask = rdp->grpmask; |
| 3733 | raw_spin_lock_irqsave_rcu_node(rnp, flags); /* Enforce GP memory-order guarantee. */ | 3733 | raw_spin_lock_irqsave_rcu_node(rnp, flags); /* Enforce GP memory-order guarantee. */ |
| 3734 | if (rnp->qsmask & mask) { /* RCU waiting on outgoing CPU? */ | ||
| 3735 | /* Report quiescent state -before- changing ->qsmaskinitnext! */ | ||
| 3736 | rcu_report_qs_rnp(mask, rsp, rnp, rnp->gp_seq, flags); | ||
| 3737 | raw_spin_lock_irqsave_rcu_node(rnp, flags); | ||
| 3738 | } | ||
| 3734 | rnp->qsmaskinitnext &= ~mask; | 3739 | rnp->qsmaskinitnext &= ~mask; |
| 3735 | raw_spin_unlock_irqrestore_rcu_node(rnp, flags); | 3740 | raw_spin_unlock_irqrestore_rcu_node(rnp, flags); |
| 3736 | } | 3741 | } |
