[PATCH] x86_64: Don't enable interrupt unconditionally in reboot path

When they were disabled before (e.g. after a panic) it's better
to keep them off, otherwise followon panics can happen from timer
interrupt handlers etc.

Drawback is that pageup in the console won't work anymore though.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Andi Kleen 2005-11-05 17:25:54 +01:00 committed by Linus Torvalds
parent a88cde13ba
commit 3506229ff9
2 changed files with 6 additions and 4 deletions

View File

@ -77,6 +77,7 @@ static inline void kb_wait(void)
void machine_shutdown(void) void machine_shutdown(void)
{ {
unsigned long flags;
/* Stop the cpus and apics */ /* Stop the cpus and apics */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
int reboot_cpu_id; int reboot_cpu_id;
@ -98,7 +99,7 @@ void machine_shutdown(void)
smp_send_stop(); smp_send_stop();
#endif #endif
local_irq_disable(); local_irq_save(flags);
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
disable_local_APIC(); disable_local_APIC();
@ -106,7 +107,7 @@ void machine_shutdown(void)
disable_IO_APIC(); disable_IO_APIC();
local_irq_enable(); local_irq_restore(flags);
} }
void machine_emergency_restart(void) void machine_emergency_restart(void)

View File

@ -450,13 +450,14 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
void smp_stop_cpu(void) void smp_stop_cpu(void)
{ {
unsigned long flags;
/* /*
* Remove this CPU: * Remove this CPU:
*/ */
cpu_clear(smp_processor_id(), cpu_online_map); cpu_clear(smp_processor_id(), cpu_online_map);
local_irq_disable(); local_irq_save(flags);
disable_local_APIC(); disable_local_APIC();
local_irq_enable(); local_irq_restore(flags);
} }
static void smp_really_stop_cpu(void *dummy) static void smp_really_stop_cpu(void *dummy)