diff options
author | jhb <jhb@FreeBSD.org> | 2012-02-27 17:33:16 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2012-02-27 17:33:16 +0000 |
commit | cd789537e38aab07a2a0eb3311196cedf96cb930 (patch) | |
tree | bdcfd7499b965136133095fd6bd9b62d9b4df739 /sys/x86 | |
parent | 41e2dd95b7b468f75601d1d94d5558a7e83d6ce6 (diff) | |
download | FreeBSD-src-cd789537e38aab07a2a0eb3311196cedf96cb930.zip FreeBSD-src-cd789537e38aab07a2a0eb3311196cedf96cb930.tar.gz |
- Panic up front if a kernel does not include 'device atpic' and an
APIC is not found.
- Don't panic if lapic_enable_cmc() is called and the APIC is not enabled.
This can happen due to booting a kernel with APIC disabled on a CPU that
supports CMCI.
- Wrap a long line.
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/x86/local_apic.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index dfef3a7..99a681b 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -34,6 +34,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_atpic.h" #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -308,7 +309,8 @@ lapic_create(u_int apic_id, int boot_cpu) lapics[apic_id].la_ioint_irqs[APIC_TIMER_INT - APIC_IO_INTS] = IRQ_TIMER; #ifdef KDTRACE_HOOKS - lapics[apic_id].la_ioint_irqs[IDT_DTRACE_RET - APIC_IO_INTS] = IRQ_DTRACE_RET; + lapics[apic_id].la_ioint_irqs[IDT_DTRACE_RET - APIC_IO_INTS] = + IRQ_DTRACE_RET; #endif @@ -890,6 +892,10 @@ lapic_enable_cmc(void) { u_int apic_id; +#ifdef DEV_ATPIC + if (lapic == NULL) + return; +#endif apic_id = PCPU_GET(apic_id); KASSERT(lapics[apic_id].la_present, ("%s: missing APIC %u", __func__, apic_id)); @@ -1286,6 +1292,9 @@ apic_init(void *dummy __unused) if (best_enum == NULL) { if (bootverbose) printf("APIC: Could not find any APICs.\n"); +#ifndef DEV_ATPIC + panic("running without device atpic requires a local APIC"); +#endif return; } |