Commit 12cda817 authored by Tejun Heo's avatar Tejun Heo

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: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarTony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: linux-ia64 <linux-ia64@vger.kernel.org>
parent 126b3fcd
...@@ -702,11 +702,23 @@ int __init early_acpi_boot_init(void) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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: */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment