aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/rcutree.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 52c3102dc5f7..ddc6acc85d26 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1151,7 +1151,7 @@ static int __noreturn rcu_gp_kthread(void *arg)
1151 * completed. 1151 * completed.
1152 */ 1152 */
1153 if (*rdp->nxttail[RCU_WAIT_TAIL] == NULL) { 1153 if (*rdp->nxttail[RCU_WAIT_TAIL] == NULL) {
1154 raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */ 1154 raw_spin_unlock_irq(&rnp->lock);
1155 1155
1156 /* 1156 /*
1157 * Propagate new ->completed value to rcu_node 1157 * Propagate new ->completed value to rcu_node
@@ -1160,14 +1160,13 @@ static int __noreturn rcu_gp_kthread(void *arg)
1160 * to process their callbacks. 1160 * to process their callbacks.
1161 */ 1161 */
1162 rcu_for_each_node_breadth_first(rsp, rnp) { 1162 rcu_for_each_node_breadth_first(rsp, rnp) {
1163 /* irqs already disabled. */ 1163 raw_spin_lock_irq(&rnp->lock);
1164 raw_spin_lock(&rnp->lock);
1165 rnp->completed = rsp->gpnum; 1164 rnp->completed = rsp->gpnum;
1166 /* irqs remain disabled. */ 1165 raw_spin_unlock_irq(&rnp->lock);
1167 raw_spin_unlock(&rnp->lock); 1166 cond_resched();
1168 } 1167 }
1169 rnp = rcu_get_root(rsp); 1168 rnp = rcu_get_root(rsp);
1170 raw_spin_lock(&rnp->lock); /* irqs already disabled. */ 1169 raw_spin_lock_irq(&rnp->lock);
1171 } 1170 }
1172 1171
1173 rsp->completed = rsp->gpnum; /* Declare grace period done. */ 1172 rsp->completed = rsp->gpnum; /* Declare grace period done. */