ia64: initialize cpu maps early
All information necessary to initialize cpu possible and present maps are available once early_acpi_boot_init() is complete. Reorganize setup_arch() and acpi init functions such that, * CPU information is printed after LAPIC entries are parsed in early_acpi_boot_init(). * smp_build_cpu_map() is called by setup_arch() instead of acpi functions. * smp_build_cpu_map() is called once all CPU related information is available before memory is initialized. This is primarily to allow find_memory() to use cpu maps but is also a general cleanup. Please note that with this change, the somewhat ad-hoc early_cpu_possible_map defined and used for NUMA configurations is probably unnecessary. Something to clean up another day. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: linux-ia64 <linux-ia64@vger.kernel.org>
This commit is contained in:
parent
126b3fcdec
commit
12cda81777
|
@ -702,11 +702,23 @@ int __init early_acpi_boot_init(void)
|
||||||
printk(KERN_ERR PREFIX
|
printk(KERN_ERR PREFIX
|
||||||
"Error parsing MADT - no LAPIC entries\n");
|
"Error parsing MADT - no LAPIC entries\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
if (available_cpus == 0) {
|
||||||
|
printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n");
|
||||||
|
printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id());
|
||||||
|
smp_boot_data.cpu_phys_id[available_cpus] =
|
||||||
|
hard_smp_processor_id();
|
||||||
|
available_cpus = 1; /* We've got at least one of these, no? */
|
||||||
|
}
|
||||||
|
smp_boot_data.cpu_count = available_cpus;
|
||||||
|
#endif
|
||||||
|
/* Make boot-up look pretty */
|
||||||
|
printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus,
|
||||||
|
total_cpus);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int __init acpi_boot_init(void)
|
int __init acpi_boot_init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -769,18 +781,8 @@ int __init acpi_boot_init(void)
|
||||||
if (acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt))
|
if (acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt))
|
||||||
printk(KERN_ERR PREFIX "Can't find FADT\n");
|
printk(KERN_ERR PREFIX "Can't find FADT\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI_NUMA
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
if (available_cpus == 0) {
|
|
||||||
printk(KERN_INFO "ACPI: Found 0 CPUS; assuming 1\n");
|
|
||||||
printk(KERN_INFO "CPU 0 (0x%04x)", hard_smp_processor_id());
|
|
||||||
smp_boot_data.cpu_phys_id[available_cpus] =
|
|
||||||
hard_smp_processor_id();
|
|
||||||
available_cpus = 1; /* We've got at least one of these, no? */
|
|
||||||
}
|
|
||||||
smp_boot_data.cpu_count = available_cpus;
|
|
||||||
|
|
||||||
smp_build_cpu_map();
|
|
||||||
# ifdef CONFIG_ACPI_NUMA
|
|
||||||
if (srat_num_cpus == 0) {
|
if (srat_num_cpus == 0) {
|
||||||
int cpu, i = 1;
|
int cpu, i = 1;
|
||||||
for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++)
|
for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++)
|
||||||
|
@ -789,14 +791,9 @@ int __init acpi_boot_init(void)
|
||||||
node_cpuid[i++].phys_id =
|
node_cpuid[i++].phys_id =
|
||||||
smp_boot_data.cpu_phys_id[cpu];
|
smp_boot_data.cpu_phys_id[cpu];
|
||||||
}
|
}
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ACPI_NUMA
|
|
||||||
build_cpu_to_node_map();
|
build_cpu_to_node_map();
|
||||||
#endif
|
#endif
|
||||||
/* Make boot-up look pretty */
|
|
||||||
printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus,
|
|
||||||
total_cpus);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -566,19 +566,18 @@ setup_arch (char **cmdline_p)
|
||||||
early_acpi_boot_init();
|
early_acpi_boot_init();
|
||||||
# ifdef CONFIG_ACPI_NUMA
|
# ifdef CONFIG_ACPI_NUMA
|
||||||
acpi_numa_init();
|
acpi_numa_init();
|
||||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
# ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||||
prefill_possible_map();
|
prefill_possible_map();
|
||||||
#endif
|
# endif
|
||||||
per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ?
|
per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ?
|
||||||
32 : cpus_weight(early_cpu_possible_map)),
|
32 : cpus_weight(early_cpu_possible_map)),
|
||||||
additional_cpus > 0 ? additional_cpus : 0);
|
additional_cpus > 0 ? additional_cpus : 0);
|
||||||
# endif
|
# endif
|
||||||
#else
|
|
||||||
# ifdef CONFIG_SMP
|
|
||||||
smp_build_cpu_map(); /* happens, e.g., with the Ski simulator */
|
|
||||||
# endif
|
|
||||||
#endif /* CONFIG_APCI_BOOT */
|
#endif /* CONFIG_APCI_BOOT */
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
smp_build_cpu_map();
|
||||||
|
#endif
|
||||||
find_memory();
|
find_memory();
|
||||||
|
|
||||||
/* process SAL system table: */
|
/* process SAL system table: */
|
||||||
|
|
Reference in New Issue