diff options
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r-- | kernel/rcu/tree.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index f5acf34247fb..aeea697d6f9f 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
@@ -3862,10 +3862,6 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, | |||
3862 | { | 3862 | { |
3863 | lockdep_assert_held(&rsp->orphan_lock); | 3863 | lockdep_assert_held(&rsp->orphan_lock); |
3864 | 3864 | ||
3865 | /* No-CBs CPUs do not have orphanable callbacks. */ | ||
3866 | if (!IS_ENABLED(CONFIG_HOTPLUG_CPU) || rcu_is_nocb_cpu(rdp->cpu)) | ||
3867 | return; | ||
3868 | |||
3869 | /* | 3865 | /* |
3870 | * Orphan the callbacks. First adjust the counts. This is safe | 3866 | * Orphan the callbacks. First adjust the counts. This is safe |
3871 | * because _rcu_barrier() excludes CPU-hotplug operations, so it | 3867 | * because _rcu_barrier() excludes CPU-hotplug operations, so it |
@@ -3935,6 +3931,9 @@ static void rcu_migrate_callbacks(int cpu, struct rcu_state *rsp) | |||
3935 | struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu); | 3931 | struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu); |
3936 | struct rcu_node *rnp = rdp->mynode; /* Outgoing CPU's rdp & rnp. */ | 3932 | struct rcu_node *rnp = rdp->mynode; /* Outgoing CPU's rdp & rnp. */ |
3937 | 3933 | ||
3934 | if (rcu_is_nocb_cpu(cpu) || rcu_segcblist_empty(&rdp->cblist)) | ||
3935 | return; /* No callbacks to migrate. */ | ||
3936 | |||
3938 | raw_spin_lock_irqsave(&rsp->orphan_lock, flags); | 3937 | raw_spin_lock_irqsave(&rsp->orphan_lock, flags); |
3939 | rcu_send_cbs_to_orphanage(cpu, rsp, rnp, rdp); | 3938 | rcu_send_cbs_to_orphanage(cpu, rsp, rnp, rdp); |
3940 | rcu_adopt_orphan_cbs(rsp, flags); | 3939 | rcu_adopt_orphan_cbs(rsp, flags); |