diff options
author | jhb <jhb@FreeBSD.org> | 2013-01-17 21:32:25 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2013-01-17 21:32:25 +0000 |
commit | 4a3c4478d3346235378985c52457d9bd03d7f401 (patch) | |
tree | 75d5ceedc94644a0695195b809e8f66831fa17ab /sys/x86 | |
parent | d8067c27f54c1f0d1bc952da140a4f0b469b19ea (diff) | |
download | FreeBSD-src-4a3c4478d3346235378985c52457d9bd03d7f401.zip FreeBSD-src-4a3c4478d3346235378985c52457d9bd03d7f401.tar.gz |
Don't attempt to use clflush on the local APIC register window. Various
CPUs exhibit bad behavior if this is done (Intel Errata AAJ3, hangs on
Pentium-M, and trashing of the local APIC registers on a VIA C7). The
local APIC is implicitly mapped UC already via MTRRs, so the clflush isn't
necessary anyway.
MFC after: 2 weeks
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/x86/local_apic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index e994172..fc85abf3 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -227,8 +227,8 @@ lapic_init(vm_paddr_t addr) /* Map the local APIC and setup the spurious interrupt handler. */ KASSERT(trunc_page(addr) == addr, ("local APIC not aligned on a page boundary")); - lapic = pmap_mapdev(addr, sizeof(lapic_t)); lapic_paddr = addr; + lapic = pmap_mapdev(addr, sizeof(lapic_t)); setidt(APIC_SPURIOUS_INT, IDTVEC(spuriousint), SDT_APIC, SEL_KPL, GSEL_APIC); |