Skip to content

Commit

Permalink
x86: apic - unify lapic_shutdown
Browse files Browse the repository at this point in the history
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Cyrill Gorcunov authored and Ingo Molnar committed Aug 19, 2008
1 parent 990b183 commit fe4024d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
9 changes: 6 additions & 3 deletions arch/x86/kernel/apic_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
14 changes: 13 additions & 1 deletion arch/x86/kernel/apic_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Expand Down

0 comments on commit fe4024d

Please sign in to comment.