提交 fe4024dc 编写于 作者: C Cyrill Gorcunov 提交者: Ingo Molnar

x86: apic - unify lapic_shutdown

Signed-off-by: NCyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 990b183e
...@@ -838,10 +838,13 @@ void lapic_shutdown(void) ...@@ -838,10 +838,13 @@ void lapic_shutdown(void)
local_irq_save(flags); local_irq_save(flags);
if (enabled_via_apicbase) #ifdef CONFIG_X86_32
disable_local_APIC(); if (!enabled_via_apicbase)
else
clear_local_APIC(); clear_local_APIC();
else
#endif
disable_local_APIC();
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -707,6 +707,12 @@ void disable_local_APIC(void) ...@@ -707,6 +707,12 @@ void disable_local_APIC(void)
#endif #endif
} }
/*
* If Linux enabled the LAPIC against the BIOS default disable it down before
* re-entering the BIOS on shutdown. Otherwise the BIOS may get confused and
* not power-off. Additionally clear all LVT entries before disable_local_APIC
* for the case where Linux didn't enable the LAPIC.
*/
void lapic_shutdown(void) void lapic_shutdown(void)
{ {
unsigned long flags; unsigned long flags;
...@@ -716,7 +722,13 @@ void lapic_shutdown(void) ...@@ -716,7 +722,13 @@ void lapic_shutdown(void)
local_irq_save(flags); local_irq_save(flags);
disable_local_APIC(); #ifdef CONFIG_X86_32
if (!enabled_via_apicbase)
clear_local_APIC();
else
#endif
disable_local_APIC();
local_irq_restore(flags); local_irq_restore(flags);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册