aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcu/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r--kernel/rcu/tree.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 05f69b787a57..3fe854a15d82 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3479,9 +3479,10 @@ EXPORT_SYMBOL_GPL(rcu_barrier_sched);
3479static void rcu_init_new_rnp(struct rcu_node *rnp_leaf) 3479static void rcu_init_new_rnp(struct rcu_node *rnp_leaf)
3480{ 3480{
3481 long mask; 3481 long mask;
3482 long oldmask;
3482 struct rcu_node *rnp = rnp_leaf; 3483 struct rcu_node *rnp = rnp_leaf;
3483 3484
3484 raw_lockdep_assert_held_rcu_node(rnp); 3485 raw_lockdep_assert_held_rcu_node(rnp_leaf);
3485 WARN_ON_ONCE(rnp->wait_blkd_tasks); 3486 WARN_ON_ONCE(rnp->wait_blkd_tasks);
3486 for (;;) { 3487 for (;;) {
3487 mask = rnp->grpmask; 3488 mask = rnp->grpmask;
@@ -3489,8 +3490,11 @@ static void rcu_init_new_rnp(struct rcu_node *rnp_leaf)
3489 if (rnp == NULL) 3490 if (rnp == NULL)
3490 return; 3491 return;
3491 raw_spin_lock_rcu_node(rnp); /* Interrupts already disabled. */ 3492 raw_spin_lock_rcu_node(rnp); /* Interrupts already disabled. */
3493 oldmask = rnp->qsmaskinit;
3492 rnp->qsmaskinit |= mask; 3494 rnp->qsmaskinit |= mask;
3493 raw_spin_unlock_rcu_node(rnp); /* Interrupts remain disabled. */ 3495 raw_spin_unlock_rcu_node(rnp); /* Interrupts remain disabled. */
3496 if (oldmask)
3497 return;
3494 } 3498 }
3495} 3499}
3496 3500