aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/setup.c
diff options
context:
space:
mode:
authorDoug Chapman <doug.chapman@hp.com>2008-11-05 17:57:52 -0500
committerTony Luck <tony.luck@intel.com>2008-11-06 12:28:27 -0500
commit62ee0540f5e5a804b79cae8b3c0185a85f02436b (patch)
tree371f35ceddba751ad1f09a78f10559c56c64581e /arch/ia64/kernel/setup.c
parent1547a01226bcc3fd575fd5383b8b55476a02b518 (diff)
[IA64] fix boot panic caused by offline CPUs
This fixes a regression introduced by 2c6e6db41f01b6b4eb98809350827c9678996698 "Minimize per_cpu reservations." That patch incorrectly used information about what CPUs are possible that was not yet initialized by ACPI. The end result was that per_cpu structures for offline CPUs were not initialized causing a NULL pointer reference. Since we cannot do the full acpi_boot_init() call any earlier, the simplest fix is to just parse the MADT for SAPIC entries early to find the CPU info. This should also allow for some cleanup of the code added by the "Minimize per_cpu reservations". This patch just fixes the regressions, the cleanup will come in a later patch. Signed-off-by: Doug Chapman <doug.chapman@hp.com> Signed-off-by: Alex Chiang <achiang@hp.com> CC: Robin Holt <holt@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/setup.c')
-rw-r--r--arch/ia64/kernel/setup.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index ae7911702bf8..bf441f49682c 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -561,8 +561,12 @@ setup_arch (char **cmdline_p)
561#ifdef CONFIG_ACPI 561#ifdef CONFIG_ACPI
562 /* Initialize the ACPI boot-time table parser */ 562 /* Initialize the ACPI boot-time table parser */
563 acpi_table_init(); 563 acpi_table_init();
564 early_acpi_boot_init();
564# ifdef CONFIG_ACPI_NUMA 565# ifdef CONFIG_ACPI_NUMA
565 acpi_numa_init(); 566 acpi_numa_init();
567#ifdef CONFIG_ACPI_HOTPLUG_CPU
568 prefill_possible_map();
569#endif
566 per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ? 570 per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ?
567 32 : cpus_weight(early_cpu_possible_map)), 571 32 : cpus_weight(early_cpu_possible_map)),
568 additional_cpus > 0 ? additional_cpus : 0); 572 additional_cpus > 0 ? additional_cpus : 0);
@@ -853,9 +857,6 @@ void __init
853setup_per_cpu_areas (void) 857setup_per_cpu_areas (void)
854{ 858{
855 /* start_kernel() requires this... */ 859 /* start_kernel() requires this... */
856#ifdef CONFIG_ACPI_HOTPLUG_CPU
857 prefill_possible_map();
858#endif
859} 860}
860 861
861/* 862/*