ACPI: boot correctly with "nosmp" or "maxcpus=0"
In MPS mode, "nosmp" and "maxcpus=0" boot a UP kernel with IOAPIC disabled. However, in ACPI mode, these parameters didn't completely disable the IO APIC initialization code and boot failed. init/main.c: Disable the IO_APIC if "nosmp" or "maxcpus=0" undefine disable_ioapic_setup() when it doesn't apply. i386: delete ioapic_setup(), it was a duplicate of parse_noapic() delete undefinition of disable_ioapic_setup() x86_64: rename disable_ioapic_setup() to parse_noapic() to match i386 define disable_ioapic_setup() in header to match i386 http://bugzilla.kernel.org/show_bug.cgi?id=1641 Acked-by: Andi Kleen <ak@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
12
init/main.c
12
init/main.c
@@ -146,9 +146,14 @@ static unsigned int __initdata max_cpus = NR_CPUS;
|
||||
* greater than 0, limits the maximum number of CPUs activated in
|
||||
* SMP mode to <NUM>.
|
||||
*/
|
||||
#ifndef CONFIG_X86_IO_APIC
|
||||
static inline void disable_ioapic_setup(void) {};
|
||||
#endif
|
||||
|
||||
static int __init nosmp(char *str)
|
||||
{
|
||||
max_cpus = 0;
|
||||
disable_ioapic_setup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -157,10 +162,13 @@ early_param("nosmp", nosmp);
|
||||
static int __init maxcpus(char *str)
|
||||
{
|
||||
get_option(&str, &max_cpus);
|
||||
return 1;
|
||||
if (max_cpus == 0)
|
||||
disable_ioapic_setup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
__setup("maxcpus=", maxcpus);
|
||||
early_param("maxcpus=", maxcpus);
|
||||
#else
|
||||
#define max_cpus NR_CPUS
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user