Messages in this thread Patch in this message | | | Date | Tue, 05 Oct 2010 23:34:47 -0400 | From | Steven Rostedt <> | Subject | [PATCH 2/9] jump label/x86: Move arch_init_ideal_nop5 later |
| |
From: Jason Baron <jbaron@redhat.com>
arch_init_ideal_nop5() was being called from setup_arch() before the exception table was setup. Move it later into alternative_instructions().
Fixes a boot hang on OLPC's XO-1 laptop based on Geode LX processor.
Reported-by: Daniel Drake <dsd@laptop.org> Signed-off-by: Jason Baron <jbaron@redhat.com> LKML-Reference: <20101004154633.GA2900@redhat.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> --- arch/x86/kernel/alternative.c | 5 +++++ arch/x86/kernel/setup.c | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index cb0e6d3..d8b5b21 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -454,6 +454,7 @@ extern struct paravirt_patch_site __start_parainstructions[], void __init alternative_instructions(void) { + unsigned long flags; /* The patching is not fully atomic, so try to avoid local interruptions that might execute the to be patched code. Other CPUs are not running. */ @@ -508,6 +509,10 @@ void __init alternative_instructions(void) (unsigned long)__smp_locks_end); restart_nmi(); + + local_irq_save(flags); + arch_init_ideal_nop5(); + local_irq_restore(flags); } /** diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 00e1678..c3a4fbb 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -112,7 +112,6 @@ #include <asm/numa_64.h> #endif #include <asm/mce.h> -#include <asm/alternative.h> /* * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. @@ -727,7 +726,6 @@ void __init setup_arch(char **cmdline_p) { int acpi = 0; int k8 = 0; - unsigned long flags; #ifdef CONFIG_X86_32 memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); @@ -1073,10 +1071,6 @@ void __init setup_arch(char **cmdline_p) x86_init.oem.banner(); mcheck_init(); - - local_irq_save(flags); - arch_init_ideal_nop5(); - local_irq_restore(flags); } #ifdef CONFIG_X86_32 -- 1.7.1
| |