freebsd-nq/sys/x86/include
Konstantin Belousov 2d4c4c8dc7 Implements EOI suppression mode, where LAPIC on EOI command for
level-triggered interrupt does not broadcast the EOI message to all
APICs in the system.  Instead, interrupt handler must follow LAPIC EOI
with IOAPIC EOI.  For modern IOAPICs, the later is done by writing to
EOIR register.  Otherwise, Intel provided Linux with a trick of
temporary switching the pin config to edge and then back to level.

Detect presence of EOIR register by reading IO-APIC version.  The
summary table in the comments was taken from the Linux kernel.  For
Intel, newer IO-APICs are only briefly documented as part of the
ICH/PCH datasheet.  According to the BKDG and chipset documentation,
AMD LAPICs do not provide EOI suppression, althought IO-APICs do
declare version 0x21 and implement EOIR.

The trick to temporary switch pin to edge mode to clear IRR was tested
on modern chipset, by pretending that EOIR is not present, i.e. by
forcing io_haseoi to zero.

Tunable hw.lapic_eoi_suppression disables the optimization.

Reviewed by:	neel
Tested by:	pho
Review:	https://reviews.freebsd.org/D1943
Sponsored by:	The FreeBSD Foundation
MFC after:	2 months
2015-02-26 11:02:40 +00:00
..
_align.h
_inttypes.h
_limits.h
_stdint.h
_types.h Rename __wchar_t so it no longer conflicts with __wchar_t from clang 3.4 2014-04-01 14:46:11 +00:00
acpica_machdep.h x86/madt: make the interrupt override parser a public function 2014-08-04 08:58:50 +00:00
apicreg.h Add x2APIC support. Enable it by default if CPU is capable. The 2015-02-09 21:00:56 +00:00
apicvar.h Implements EOI suppression mode, where LAPIC on EOI command for 2015-02-26 11:02:40 +00:00
apm_bios.h
bus.h Update NetBSD Foundation copyrights to 2-clause BSD 2014-03-18 01:40:25 +00:00
busdma_impl.h Remove redundand declaration, fixing the build with gcc. 2013-10-29 07:25:54 +00:00
dump.h Factor out duplicated code from dumpsys() on each architecture into generic 2015-01-07 01:01:39 +00:00
elf.h
endian.h
fdt.h Retire machine/fdt.h as a header used by MI code, as its function is now 2014-01-05 18:46:58 +00:00
float.h
fpu.h Improve support for XSAVE with debuggers. 2014-11-21 20:53:17 +00:00
frame.h
init.h msi: add Xen MSI implementation 2014-09-30 16:46:45 +00:00
legacyvar.h Add support for managing PCI bus numbers. As with BARs and PCI-PCI bridge 2014-02-12 04:30:37 +00:00
mca.h
mptable.h Use fixed-width types for all fields in MP Table structures and pack 2013-12-11 21:19:04 +00:00
ofw_machdep.h Retire machine/fdt.h as a header used by MI code, as its function is now 2014-01-05 18:46:58 +00:00
pci_cfgreg.h
psl.h x86: Allow users to change PSL_RF via ptrace(PT_SETREGS...) 2013-11-14 15:37:20 +00:00
ptrace.h Improve support for XSAVE with debuggers. 2014-11-21 20:53:17 +00:00
pvclock.h Add interface to derive a TSC frequency from the pvclock 2015-02-04 08:33:04 +00:00
reg.h
segments.h Remove ia64. 2014-07-07 00:27:09 +00:00
setjmp.h
sigframe.h
signal.h
specialreg.h Add x2APIC support. Enable it by default if CPU is capable. The 2015-02-09 21:00:56 +00:00
stdarg.h Add a va_copy() to our fall-back stdarg implementation for use with lint(1) 2013-10-07 10:01:23 +00:00
sysarch.h
trap.h Remove references to an unused fasttrap probe hook, and remove the 2013-10-31 02:35:00 +00:00
ucontext.h
vdso.h
vmware.h Detect whether x2APIC on VMWare is usable without interrupt 2015-02-14 09:00:12 +00:00