x86_64: set cpu_index to NR_CPUS instead of 0
PATCH 1/1 x86_64: set cpu_index to NR_CPUS instead of 0
[PATCH] x86_64: set cpu_index to NR_CPUS instead of 0
same BIOS will support two/four dualcore/quadcore system, and 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 as bunch of NULL cpus with cpu_index=0
so assign impossible cpu_index value at first instead of 0.
arch/x86/kernel/smpboot_64.c +13 -0
@@ -861,6 +861,18 @@ void __init smp_set_apicids(void) x86_cpu_to_apicid_ptr =NULL ; } +static void __init smp_cpu_index_default (void ) +{ +int i; +struct cpuinfo_x86 *c; + +for_each_cpu_mask (i, cpu_possible_map) { + c = &cpu_data (i); +/* mark all to hotplug */ + c->cpu_index =NR_CPUS ; + } +} +/* * Prepare for SMP bootup. The MP table or ACPI has been read * earlier. Just do some sanity checking here and enable APIC mode.
@@ -868,6 +880,7 @@ void __init smp_set_apicids(void)void __init smp_prepare_cpus (unsigned int max_cpus) {nmi_watchdog_default (); +smp_cpu_index_default (); current_cpu_data = boot_cpu_data;current_thread_info ()->cpu =0 ;/* needed? */ smp_set_apicids ();