aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/rcu/tree.c5
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}