summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshok Raj <ashok.raj@intel.com>2006-02-16 14:01:48 -0800
committerTony Luck <tony.luck@intel.com>2006-02-16 14:10:50 -0800
commit8f8b1138fc9f65e3591aac83a4ee394fef34ac1d (patch)
tree2c4d34391681cb5aa5ed8e5f2def1502a8a4b333
parent6f6d75825dc49b082906b84537b4df28293c2977 (diff)
downloadlinux-8f8b1138fc9f65e3591aac83a4ee394fef34ac1d.tar.bz2
[IA64] Count disabled cpus as potential hot-pluggable CPUs
Minor updates to earlier patch. - Added to documentation to add ia64 as well. - Minor clarification on how to use disabled cpus - used plain max instead of max_t per Andew Morton. Signed-off-by: Ashok Raj <ashok.raj@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r--Documentation/cpu-hotplug.txt14
-rw-r--r--arch/ia64/kernel/acpi.c19
2 files changed, 20 insertions, 13 deletions
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt
index 08c5d04f3086..e05278087ffa 100644
--- a/Documentation/cpu-hotplug.txt
+++ b/Documentation/cpu-hotplug.txt
@@ -44,10 +44,20 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
maxcpus=2 will only boot 2. You can choose to bring the
other cpus later online, read FAQ's for more info.
-additional_cpus=n [x86_64 only] use this to limit hotpluggable cpus.
- This option sets
+additional_cpus*=n Use this to limit hotpluggable cpus. This option sets
cpu_possible_map = cpu_present_map + additional_cpus
+(*) Option valid only for following architectures
+- x86_64, ia64
+
+ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
+to determine the number of potentially hot-pluggable cpus. The implementation
+should only rely on this to count the #of cpus, but *MUST* not rely on the
+apicid values in those tables for disabled apics. In the event BIOS doesnt
+mark such hot-pluggable cpus as disabled entries, one could use this
+parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
+
+
CPU maps and such
-----------------
[More on cpumaps and primitive to manipulate, please check
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 34795ede72e0..ecd44bdc8394 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -794,24 +794,21 @@ __init void prefill_possible_map(void)
int possible, disabled_cpus;
disabled_cpus = total_cpus - available_cpus;
+
if (additional_cpus == -1) {
- if (disabled_cpus > 0) {
- possible = total_cpus;
+ if (disabled_cpus > 0)
additional_cpus = disabled_cpus;
- }
- else {
- possible = available_cpus;
+ else
additional_cpus = 0;
- }
- } else {
- possible = available_cpus + additional_cpus;
- }
+ }
+
+ possible = available_cpus + additional_cpus;
+
if (possible > NR_CPUS)
possible = NR_CPUS;
printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
- possible,
- max_t(int, additional_cpus, 0));
+ possible, max((possible - available_cpus), 0));
for (i = 0; i < possible; i++)
cpu_set(i, cpu_possible_map);