diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index ff98233d4aa59f..b71dcf77d16616 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -5227,15 +5227,11 @@ void rcutree_migrate_callbacks(int cpu) struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); bool needwake; - if (rcu_rdp_is_offloaded(rdp)) - return; - - raw_spin_lock_irqsave(&rcu_state.barrier_lock, flags); - if (rcu_segcblist_empty(&rdp->cblist)) { - raw_spin_unlock_irqrestore(&rcu_state.barrier_lock, flags); + if (rcu_rdp_is_offloaded(rdp) || + rcu_segcblist_empty(&rdp->cblist)) return; /* No callbacks to migrate. */ - } + raw_spin_lock_irqsave(&rcu_state.barrier_lock, flags); WARN_ON_ONCE(rcu_rdp_cpu_online(rdp)); rcu_barrier_entrain(rdp); my_rdp = this_cpu_ptr(&rcu_data);