diff options
author | Ashok Raj <ashok.raj@intel.com> | 2006-02-03 15:51:50 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-04 19:43:15 -0500 |
commit | 7f66ae48de27bc9506cff0f2991d74901a0c2f8d (patch) | |
tree | ec38f237d1b32f051ce4eed4e1a5bdcae148f6c7 /arch/i386 | |
parent | d646bce4c77af72f5a293a96fbf14174c9f2a9c2 (diff) |
[PATCH] x86_64: Dont record local apic ids when they are disabled in MADT
Some broken BIOS's had processors disabled, but
same apic id as a valid processor. This causes
acpi_processor_start() to think this disabled
cpu is ok, and croak. So we dont record bad
apicid's anymore.
http://bugzilla.kernel.org/show_bug.cgi?id=5930
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/kernel/acpi/boot.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index f21fa0d4482f..79577f0ace98 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -248,10 +248,17 @@ acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end) | |||
248 | 248 | ||
249 | acpi_table_print_madt_entry(header); | 249 | acpi_table_print_madt_entry(header); |
250 | 250 | ||
251 | /* Register even disabled CPUs for cpu hotplug */ | 251 | /* Record local apic id only when enabled */ |
252 | 252 | if (processor->flags.enabled) | |
253 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; | 253 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; |
254 | 254 | ||
255 | /* | ||
256 | * We need to register disabled CPU as well to permit | ||
257 | * counting disabled CPUs. This allows us to size | ||
258 | * cpus_possible_map more accurately, to permit | ||
259 | * to not preallocating memory for all NR_CPUS | ||
260 | * when we use CPU hotplug. | ||
261 | */ | ||
255 | mp_register_lapic(processor->id, /* APIC ID */ | 262 | mp_register_lapic(processor->id, /* APIC ID */ |
256 | processor->flags.enabled); /* Enabled? */ | 263 | processor->flags.enabled); /* Enabled? */ |
257 | 264 | ||