|
@@ -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);
|
|
|
}
|