Commit e51959fa authored by Zachary Amsden's avatar Zachary Amsden Committed by Linus Torvalds

[PATCH] Fix potential interrupts during alternative patching

Interrupts must be disabled during alternative instruction patching.  On
systems with high timer IRQ rates, or when running in an emulator, timing
differences can result in random kernel panics because of running partially
patched instructions.  This doesn't yet fix NMIs, which requires extricating
the patch code from the late bug checking and is logically separate (and also
less likely to cause problems).
Signed-off-by: default avatarZachary Amsden <zach@vmware.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a90b061c
...@@ -344,6 +344,7 @@ void alternatives_smp_switch(int smp) ...@@ -344,6 +344,7 @@ void alternatives_smp_switch(int smp)
void __init alternative_instructions(void) void __init alternative_instructions(void)
{ {
unsigned long flags;
if (no_replacement) { if (no_replacement) {
printk(KERN_INFO "(SMP-)alternatives turned off\n"); printk(KERN_INFO "(SMP-)alternatives turned off\n");
free_init_pages("SMP alternatives", free_init_pages("SMP alternatives",
...@@ -351,6 +352,8 @@ void __init alternative_instructions(void) ...@@ -351,6 +352,8 @@ void __init alternative_instructions(void)
(unsigned long)__smp_alt_end); (unsigned long)__smp_alt_end);
return; return;
} }
local_irq_save(flags);
apply_alternatives(__alt_instructions, __alt_instructions_end); apply_alternatives(__alt_instructions, __alt_instructions_end);
/* switch to patch-once-at-boottime-only mode and free the /* switch to patch-once-at-boottime-only mode and free the
...@@ -386,4 +389,5 @@ void __init alternative_instructions(void) ...@@ -386,4 +389,5 @@ void __init alternative_instructions(void)
alternatives_smp_switch(0); alternatives_smp_switch(0);
} }
#endif #endif
local_irq_restore(flags);
} }
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