* Parse the boot-time rcu_nocb_mask CPU list from the kernel parameters.
  * If the list is invalid, a warning is emitted and all CPUs are offloaded.
  */
+
+static bool rcu_nocb_is_setup;
+
 static int __init rcu_nocb_setup(char *str)
 {
        alloc_bootmem_cpumask_var(&rcu_nocb_mask);
                pr_warn("rcu_nocbs= bad CPU range, all CPUs set\n");
                cpumask_setall(rcu_nocb_mask);
        }
+       rcu_nocb_is_setup = true;
        return 1;
 }
 __setup("rcu_nocbs=", rcu_nocb_setup);
                need_rcu_nocb_mask = true;
 #endif /* #if defined(CONFIG_NO_HZ_FULL) */
 
-       if (!cpumask_available(rcu_nocb_mask) && need_rcu_nocb_mask) {
-               if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
-                       pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n");
-                       return;
+       if (need_rcu_nocb_mask) {
+               if (!cpumask_available(rcu_nocb_mask)) {
+                       if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
+                               pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n");
+                               return;
+                       }
                }
+               rcu_nocb_is_setup = true;
        }
-       if (!cpumask_available(rcu_nocb_mask))
+
+       if (!rcu_nocb_is_setup)
                return;
 
 #if defined(CONFIG_NO_HZ_FULL)
 {
        int cpu;
 
-       for_each_online_cpu(cpu)
-               rcu_spawn_cpu_nocb_kthread(cpu);
+       if (rcu_nocb_is_setup) {
+               for_each_online_cpu(cpu)
+                       rcu_spawn_cpu_nocb_kthread(cpu);
+       }
 }
 
 /* How many CB CPU IDs per GP kthread?  Default of -1 for sqrt(nr_cpu_ids). */