diff options
| -rw-r--r-- | kernel/rcu/tree.c | 7 |
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 | } |
