x86: apic - unify lapic_shutdown

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Cyrill Gorcunov 2008-08-18 20:45:52 +04:00 committed by Ingo Molnar
parent 990b183e58
commit fe4024dcb0
2 changed files with 19 additions and 4 deletions

View File

@ -838,10 +838,13 @@ void lapic_shutdown(void)
local_irq_save(flags);
if (enabled_via_apicbase)
disable_local_APIC();
else
#ifdef CONFIG_X86_32
if (!enabled_via_apicbase)
clear_local_APIC();
else
#endif
disable_local_APIC();
local_irq_restore(flags);
}

View File

@ -707,6 +707,12 @@ void disable_local_APIC(void)
#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)
{
unsigned long flags;
@ -716,7 +722,13 @@ void lapic_shutdown(void)
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);
}