Commit 570a73eb authored by Fenghua Yu's avatar Fenghua Yu Committed by Greg Kroah-Hartman

x86/apic: Disable I/O APIC before shutdown of the local APIC

commit 522e6646 upstream.

In reboot and crash path, when we shut down the local APIC, the I/O APIC is
still active. This may cause issues because external interrupts
can still come in and disturb the local APIC during shutdown process.

To quiet external interrupts, disable I/O APIC before shutdown local APIC.
Signed-off-by: default avatarFenghua Yu <fenghua.yu@intel.com>
Link: http://lkml.kernel.org/r/1382578212-4677-1-git-send-email-fenghua.yu@intel.com
[ I suppose the 'issue' is a hang during shutdown. It's a fine change nevertheless. ]
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
Cc: Rui Xiang <rui.xiang@huawei.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1ad128f9
...@@ -95,10 +95,10 @@ void native_machine_crash_shutdown(struct pt_regs *regs) ...@@ -95,10 +95,10 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
cpu_emergency_vmxoff(); cpu_emergency_vmxoff();
cpu_emergency_svm_disable(); cpu_emergency_svm_disable();
lapic_shutdown();
#if defined(CONFIG_X86_IO_APIC) #if defined(CONFIG_X86_IO_APIC)
disable_IO_APIC(); disable_IO_APIC();
#endif #endif
lapic_shutdown();
#ifdef CONFIG_HPET_TIMER #ifdef CONFIG_HPET_TIMER
hpet_disable(); hpet_disable();
#endif #endif
......
...@@ -668,6 +668,13 @@ void native_machine_shutdown(void) ...@@ -668,6 +668,13 @@ void native_machine_shutdown(void)
/* The boot cpu is always logical cpu 0 */ /* The boot cpu is always logical cpu 0 */
int reboot_cpu_id = 0; int reboot_cpu_id = 0;
#endif
#ifdef CONFIG_X86_IO_APIC
disable_IO_APIC();
#endif
#ifdef CONFIG_SMP
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
/* See if there has been given a command line override */ /* See if there has been given a command line override */
...@@ -691,10 +698,6 @@ void native_machine_shutdown(void) ...@@ -691,10 +698,6 @@ void native_machine_shutdown(void)
lapic_shutdown(); lapic_shutdown();
#ifdef CONFIG_X86_IO_APIC
disable_IO_APIC();
#endif
#ifdef CONFIG_HPET_TIMER #ifdef CONFIG_HPET_TIMER
hpet_disable(); hpet_disable();
#endif #endif
......
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