aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/rcu/tree.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 72adf97458e3..6275ed3925e9 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3710,7 +3710,12 @@ void rcu_cpu_starting(unsigned int cpu)
3710 nbits = bitmap_weight(&oldmask, BITS_PER_LONG); 3710 nbits = bitmap_weight(&oldmask, BITS_PER_LONG);
3711 /* Allow lockless access for expedited grace periods. */ 3711 /* Allow lockless access for expedited grace periods. */
3712 smp_store_release(&rsp->ncpus, rsp->ncpus + nbits); /* ^^^ */ 3712 smp_store_release(&rsp->ncpus, rsp->ncpus + nbits); /* ^^^ */
3713 raw_spin_unlock_irqrestore_rcu_node(rnp, flags); 3713 if (rnp->qsmask & mask) { /* RCU waiting on incoming CPU? */
3714 /* Report QS -after- changing ->qsmaskinitnext! */
3715 rcu_report_qs_rnp(mask, rsp, rnp, rnp->gp_seq, flags);
3716 } else {
3717 raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
3718 }
3714 } 3719 }
3715 smp_mb(); /* Ensure RCU read-side usage follows above initialization. */ 3720 smp_mb(); /* Ensure RCU read-side usage follows above initialization. */
3716} 3721}