summaryrefslogtreecommitdiffstats
path: root/sys/x86
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2012-02-27 17:33:16 +0000
committerjhb <jhb@FreeBSD.org>2012-02-27 17:33:16 +0000
commitcd789537e38aab07a2a0eb3311196cedf96cb930 (patch)
treebdcfd7499b965136133095fd6bd9b62d9b4df739 /sys/x86
parent41e2dd95b7b468f75601d1d94d5558a7e83d6ce6 (diff)
downloadFreeBSD-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.c11
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;
}
OpenPOWER on IntegriCloud