Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 14201
b: refs/heads/master
c: 420f8f6
h: refs/heads/master
i:
  14199: 330c620
v: v3
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Nov 15, 2005
1 parent 30c3820 commit 1899b54
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 485832a5d928facd82f1525270d9f048da2063a1
refs/heads/master: 420f8f68c9c5148dddf946bebdbc7eacde2172cb
3 changes: 3 additions & 0 deletions trunk/Documentation/x86_64/boot-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ SMP

cpumask=MASK only use cpus with bits set in mask

additional_cpus=NUM Allow NUM more CPUs for hotplug
(defaults are specified by the BIOS or half the available CPUs)

NUMA

numa=off Only set up a single NUMA node spanning all memory.
Expand Down
8 changes: 6 additions & 2 deletions trunk/arch/x86_64/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ unsigned long mp_lapic_addr = 0;
/* Processor that is doing the boot up */
unsigned int boot_cpu_id = -1U;
/* Internal processor count */
static unsigned int num_processors = 0;
unsigned int num_processors __initdata = 0;

unsigned disabled_cpus __initdata;

/* Bitmask of physically existing CPUs */
physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE;
Expand Down Expand Up @@ -109,8 +111,10 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
int ver, cpu;
static int found_bsp=0;

if (!(m->mpc_cpuflag & CPU_ENABLED))
if (!(m->mpc_cpuflag & CPU_ENABLED)) {
disabled_cpus++;
return;
}

printk(KERN_INFO "Processor #%d %d:%d APIC version %d\n",
m->mpc_apicid,
Expand Down
39 changes: 36 additions & 3 deletions trunk/arch/x86_64/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -880,6 +880,9 @@ static __init void disable_smp(void)
}

#ifdef CONFIG_HOTPLUG_CPU

int additional_cpus __initdata = -1;

/*
* cpu_possible_map should be static, it cannot change as cpu's
* are onlined, or offlined. The reason is per-cpu data-structures
Expand All @@ -888,14 +891,38 @@ static __init void disable_smp(void)
* cpu_present_map on the other hand can change dynamically.
* In case when cpu_hotplug is not compiled, then we resort to current
* behaviour, which is cpu_possible == cpu_present.
* If cpu-hotplug is supported, then we need to preallocate for all
* those NR_CPUS, hence cpu_possible_map represents entire NR_CPUS range.
* - Ashok Raj
*
* Three ways to find out the number of additional hotplug CPUs:
* - If the BIOS specified disabled CPUs in ACPI/mptables use that.
* - otherwise use half of the available CPUs or 2, whatever is more.
* - The user can overwrite it with additional_cpus=NUM
* We do this because additional CPUs waste a lot of memory.
* -AK
*/
__init void prefill_possible_map(void)
{
int i;
for (i = 0; i < NR_CPUS; i++)
int possible;

if (additional_cpus == -1) {
if (disabled_cpus > 0) {
additional_cpus = disabled_cpus;
} else {
additional_cpus = num_processors / 2;
if (additional_cpus == 0)
additional_cpus = 2;
}
}
possible = num_processors + additional_cpus;
if (possible > NR_CPUS)
possible = NR_CPUS;

printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
possible,
max_t(int, possible - num_processors, 0));

for (i = 0; i < possible; i++)
cpu_set(i, cpu_possible_map);
}
#endif
Expand Down Expand Up @@ -1151,6 +1178,12 @@ void __cpu_die(unsigned int cpu)
printk(KERN_ERR "CPU %u didn't die...\n", cpu);
}

static __init int setup_additional_cpus(char *s)
{
return get_option(&s, &additional_cpus);
}
__setup("additional_cpus=", setup_additional_cpus);

#else /* ... !CONFIG_HOTPLUG_CPU */

int __cpu_disable(void)
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/asm-x86_64/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ extern int safe_smp_processor_id(void);
extern int __cpu_disable(void);
extern void __cpu_die(unsigned int cpu);
extern void prefill_possible_map(void);
extern unsigned num_processors;
extern unsigned disabled_cpus;

#endif /* !ASSEMBLY */

Expand Down

0 comments on commit 1899b54

Please sign in to comment.