diff options
author | Yinghai Lu <Yinghai.Lu@Sun.COM> | 2008-01-30 07:30:46 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:30:46 -0500 |
commit | 949ec325c79add68af13705b68a885a1efb84234 (patch) | |
tree | e589f0577ebeabb49b06d1898169f5acd0b04d67 /arch | |
parent | b3ca74a2bfc66262d21443b160815eb26d6699e6 (diff) |
x86: set cpu_index to nr_cpus instead of 0
Some BIOSes that support two/four dualcore/quadcore systems, will get:
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:1 APIC version 16
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
Processor #1 15:1 APIC version 16
ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled)
Processor #2 15:1 APIC version 16
ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled)
Processor #3 15:1 APIC version 16
ACPI: LAPIC (acpi_id[0x05] lapic_id[0x84] disabled)
ACPI: LAPIC (acpi_id[0x06] lapic_id[0x85] disabled)
ACPI: LAPIC (acpi_id[0x07] lapic_id[0x86] disabled)
ACPI: LAPIC (acpi_id[0x08] lapic_id[0x87] disabled)
ACPI: LAPIC (acpi_id[0x09] lapic_id[0x88] disabled)
ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x89] disabled)
ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x8a] disabled)
ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x8b] disabled)
ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x8c] disabled)
ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x8d] disabled)
ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x8e] disabled)
ACPI: LAPIC (acpi_id[0x10] lapic_id[0x8f] disabled)
SMP: Allowing 16 CPUs, 12 hotplug CPUs
the /proc/cpuinfo will show a bunch of NULL cpus with cpu_index=0
so assign impossible cpu_index value at first instead of 0.
Signed-off-by: Yinghai Lu <yinghai.lu@sun.com>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/smpboot_64.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c index ddefb38c53fb..8ac8eb620428 100644 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c | |||
@@ -861,6 +861,18 @@ void __init smp_set_apicids(void) | |||
861 | x86_cpu_to_apicid_ptr = NULL; | 861 | x86_cpu_to_apicid_ptr = NULL; |
862 | } | 862 | } |
863 | 863 | ||
864 | static void __init smp_cpu_index_default(void) | ||
865 | { | ||
866 | int i; | ||
867 | struct cpuinfo_x86 *c; | ||
868 | |||
869 | for_each_cpu_mask(i, cpu_possible_map) { | ||
870 | c = &cpu_data(i); | ||
871 | /* mark all to hotplug */ | ||
872 | c->cpu_index = NR_CPUS; | ||
873 | } | ||
874 | } | ||
875 | |||
864 | /* | 876 | /* |
865 | * Prepare for SMP bootup. The MP table or ACPI has been read | 877 | * Prepare for SMP bootup. The MP table or ACPI has been read |
866 | * earlier. Just do some sanity checking here and enable APIC mode. | 878 | * earlier. Just do some sanity checking here and enable APIC mode. |
@@ -868,6 +880,7 @@ void __init smp_set_apicids(void) | |||
868 | void __init smp_prepare_cpus(unsigned int max_cpus) | 880 | void __init smp_prepare_cpus(unsigned int max_cpus) |
869 | { | 881 | { |
870 | nmi_watchdog_default(); | 882 | nmi_watchdog_default(); |
883 | smp_cpu_index_default(); | ||
871 | current_cpu_data = boot_cpu_data; | 884 | current_cpu_data = boot_cpu_data; |
872 | current_thread_info()->cpu = 0; /* needed? */ | 885 | current_thread_info()->cpu = 0; /* needed? */ |
873 | smp_set_apicids(); | 886 | smp_set_apicids(); |