|
@@ -1215,9 +1215,17 @@ __init void prefill_possible_map(void)
|
|
if (!num_processors)
|
|
if (!num_processors)
|
|
num_processors = 1;
|
|
num_processors = 1;
|
|
|
|
|
|
- if (setup_possible_cpus == -1)
|
|
|
|
- possible = num_processors + disabled_cpus;
|
|
|
|
- else
|
|
|
|
|
|
+ i = setup_max_cpus ?: 1;
|
|
|
|
+ if (setup_possible_cpus == -1) {
|
|
|
|
+ possible = num_processors;
|
|
|
|
+#ifdef CONFIG_HOTPLUG_CPU
|
|
|
|
+ if (setup_max_cpus)
|
|
|
|
+ possible += disabled_cpus;
|
|
|
|
+#else
|
|
|
|
+ if (possible > i)
|
|
|
|
+ possible = i;
|
|
|
|
+#endif
|
|
|
|
+ } else
|
|
possible = setup_possible_cpus;
|
|
possible = setup_possible_cpus;
|
|
|
|
|
|
total_cpus = max_t(int, possible, num_processors + disabled_cpus);
|
|
total_cpus = max_t(int, possible, num_processors + disabled_cpus);
|
|
@@ -1230,11 +1238,23 @@ __init void prefill_possible_map(void)
|
|
possible = nr_cpu_ids;
|
|
possible = nr_cpu_ids;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_HOTPLUG_CPU
|
|
|
|
+ if (!setup_max_cpus)
|
|
|
|
+#endif
|
|
|
|
+ if (possible > i) {
|
|
|
|
+ printk(KERN_WARNING
|
|
|
|
+ "%d Processors exceeds max_cpus limit of %u\n",
|
|
|
|
+ possible, setup_max_cpus);
|
|
|
|
+ possible = i;
|
|
|
|
+ }
|
|
|
|
+
|
|
printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
|
|
printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
|
|
possible, max_t(int, possible - num_processors, 0));
|
|
possible, max_t(int, possible - num_processors, 0));
|
|
|
|
|
|
for (i = 0; i < possible; i++)
|
|
for (i = 0; i < possible; i++)
|
|
set_cpu_possible(i, true);
|
|
set_cpu_possible(i, true);
|
|
|
|
+ for (; i < NR_CPUS; i++)
|
|
|
|
+ set_cpu_possible(i, false);
|
|
|
|
|
|
nr_cpu_ids = possible;
|
|
nr_cpu_ids = possible;
|
|
}
|
|
}
|