diff options
author | Len Brown <len.brown@intel.com> | 2007-08-16 03:34:22 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-08-21 00:33:35 -0400 |
commit | 61ec7567db103d537329b0db9a887db570431ff4 (patch) | |
tree | 7287eb4bd00c09434fc2dd0babadfd0eb7ddc832 /init | |
parent | 28e8351ac22de25034e048c680014ad824323c65 (diff) |
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>
Diffstat (limited to 'init')
-rw-r--r-- | init/main.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/init/main.c b/init/main.c index d3bcb3b11620..cc0653ec081d 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -146,9 +146,14 @@ static unsigned int __initdata max_cpus = NR_CPUS; | |||
146 | * greater than 0, limits the maximum number of CPUs activated in | 146 | * greater than 0, limits the maximum number of CPUs activated in |
147 | * SMP mode to <NUM>. | 147 | * SMP mode to <NUM>. |
148 | */ | 148 | */ |
149 | #ifndef CONFIG_X86_IO_APIC | ||
150 | static inline void disable_ioapic_setup(void) {}; | ||
151 | #endif | ||
152 | |||
149 | static int __init nosmp(char *str) | 153 | static int __init nosmp(char *str) |
150 | { | 154 | { |
151 | max_cpus = 0; | 155 | max_cpus = 0; |
156 | disable_ioapic_setup(); | ||
152 | return 0; | 157 | return 0; |
153 | } | 158 | } |
154 | 159 | ||
@@ -157,10 +162,13 @@ early_param("nosmp", nosmp); | |||
157 | static int __init maxcpus(char *str) | 162 | static int __init maxcpus(char *str) |
158 | { | 163 | { |
159 | get_option(&str, &max_cpus); | 164 | get_option(&str, &max_cpus); |
160 | return 1; | 165 | if (max_cpus == 0) |
166 | disable_ioapic_setup(); | ||
167 | |||
168 | return 0; | ||
161 | } | 169 | } |
162 | 170 | ||
163 | __setup("maxcpus=", maxcpus); | 171 | early_param("maxcpus=", maxcpus); |
164 | #else | 172 | #else |
165 | #define max_cpus NR_CPUS | 173 | #define max_cpus NR_CPUS |
166 | #endif | 174 | #endif |