diff options
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r-- | kernel/rcu/tree.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 5243ebea0fc1..abef9c358d47 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
@@ -1533,6 +1533,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) | |||
1533 | rdp = this_cpu_ptr(rsp->rda); | 1533 | rdp = this_cpu_ptr(rsp->rda); |
1534 | if (rnp == rdp->mynode) | 1534 | if (rnp == rdp->mynode) |
1535 | __note_gp_changes(rsp, rnp, rdp); | 1535 | __note_gp_changes(rsp, rnp, rdp); |
1536 | /* smp_mb() provided by prior unlock-lock pair. */ | ||
1536 | nocb += rcu_future_gp_cleanup(rsp, rnp); | 1537 | nocb += rcu_future_gp_cleanup(rsp, rnp); |
1537 | raw_spin_unlock_irq(&rnp->lock); | 1538 | raw_spin_unlock_irq(&rnp->lock); |
1538 | cond_resched(); | 1539 | cond_resched(); |
@@ -1577,6 +1578,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
1577 | wait_event_interruptible(rsp->gp_wq, | 1578 | wait_event_interruptible(rsp->gp_wq, |
1578 | ACCESS_ONCE(rsp->gp_flags) & | 1579 | ACCESS_ONCE(rsp->gp_flags) & |
1579 | RCU_GP_FLAG_INIT); | 1580 | RCU_GP_FLAG_INIT); |
1581 | /* Locking provides needed memory barrier. */ | ||
1580 | if (rcu_gp_init(rsp)) | 1582 | if (rcu_gp_init(rsp)) |
1581 | break; | 1583 | break; |
1582 | cond_resched(); | 1584 | cond_resched(); |
@@ -1606,6 +1608,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
1606 | (!ACCESS_ONCE(rnp->qsmask) && | 1608 | (!ACCESS_ONCE(rnp->qsmask) && |
1607 | !rcu_preempt_blocked_readers_cgp(rnp)), | 1609 | !rcu_preempt_blocked_readers_cgp(rnp)), |
1608 | j); | 1610 | j); |
1611 | /* Locking provides needed memory barriers. */ | ||
1609 | /* If grace period done, leave loop. */ | 1612 | /* If grace period done, leave loop. */ |
1610 | if (!ACCESS_ONCE(rnp->qsmask) && | 1613 | if (!ACCESS_ONCE(rnp->qsmask) && |
1611 | !rcu_preempt_blocked_readers_cgp(rnp)) | 1614 | !rcu_preempt_blocked_readers_cgp(rnp)) |