freebsd-dev/sys/i386/include
Conrad Meyer 665919aaaf x86: Implement MWAIT support for stopping a CPU
IPI_STOP is used after panic or when ddb is entered manually.  MONITOR/
MWAIT allows CPUs that support the feature to sleep in a low power way
instead of spinning.  Something similar is already used at idle.

It is perhaps especially useful in oversubscribed VM environments, and is
safe to use even if the panic/ddb thread is not the BSP.  (Except in the
presence of MWAIT errata, which are detected automatically on platforms with
known wakeup problems.)

It can be tuned/sysctled with "machdep.stop_mwait," which defaults to 0
(off).  This commit also introduces the tunable
"machdep.mwait_cpustop_broken," which defaults to 0, unless the CPU has
known errata, but may be set to "1" in loader.conf to signal that mwait
wakeup is broken on CPUs FreeBSD does not yet know about.

Unfortunately, Bhyve doesn't yet support MONITOR extensions, so this doesn't
help bhyve hypervisors running FreeBSD guests.

Submitted by:   Anton Rang <rang AT acm.org> (earlier version)
Reviewed by:	kib
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D20135
2019-05-04 20:34:26 +00:00
..
pc i386 4/4G split. 2018-04-13 20:30:49 +00:00
xen
_align.h
_bus.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
_inttypes.h
_limits.h
_stdint.h
_types.h
acpica_machdep.h
apm_bios.h
apm_segments.h
asm.h Remove lint support from system headers and MD x86 headers. 2017-11-23 11:40:16 +00:00
asmacros.h Fix recent breakages of kernel profiling, mostly on i386 (high resolution 2018-06-02 04:25:09 +00:00
atomic.h Implement missing atomic_fcmpset_XXX() support for i386. 2018-08-09 11:30:13 +00:00
bootinfo.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
bus_dma.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
bus.h
clock.h re-synchronize TSC-s on SMP systems after resume, if necessary 2018-05-25 07:33:20 +00:00
counter.h i386: Do not ever store to other-CPU counter64 slot. 2019-02-03 21:28:58 +00:00
cpu.h Add a custom implementation of cpu_lock_delay() for x86. 2018-11-05 22:54:03 +00:00
cpufunc.h Provide convenience C wrappers for RDPKRU and WRPKRU instructions. 2019-02-19 19:17:20 +00:00
cputypes.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
cserial.h Fix misspellings of transmitter/transmitted 2018-08-10 20:37:32 +00:00
db_machdep.h Cleanups related to debug exceptions on x86. 2018-05-22 00:45:00 +00:00
dump.h
efi.h
elan_mmcr.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
elf.h
endian.h
exec.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
fdt.h
float.h
floatingpoint.h spdx: initial adoption of licensing ID tags. 2017-11-18 14:26:50 +00:00
frame.h i386 4/4G split. 2018-04-13 20:30:49 +00:00
gdb_machdep.h amd64: Protect the kernel text, data, and BSS by setting the RW/NX bits 2018-03-06 14:28:37 +00:00
ieeefp.h Resolve conflicts between macros in fenv.h and ieeefp.h 2018-05-31 20:22:47 +00:00
if_wl_wavelan.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
in_cksum.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
intr_machdep.h Merge amd64 and i386 <machine/intr_machdep.h> headers. 2018-08-20 12:31:39 +00:00
ioctl_bt848.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
ioctl_meteor.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
iodev.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
kdb.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
limits.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
md_var.h i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
memdev.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
metadata.h
minidump.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
mp_watchdog.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
nexusvar.h
npx.h Remove unused error return from API that cannot fail 2018-02-23 20:15:19 +00:00
ofw_machdep.h
param.h i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
pcb_ext.h Remove dead declaration. 2018-05-11 20:47:45 +00:00
pcb.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
pci_cfgreg.h
pcpu.h x86: Implement MWAIT support for stopping a CPU 2019-05-04 20:34:26 +00:00
perfmon.h
pmap_base.h i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
pmap_nopae.h i386 PAE: avoid atomic for pte_store() where possible. 2019-02-26 09:45:44 +00:00
pmap_pae.h i386 PAE: avoid atomic for pte_store() where possible. 2019-02-26 09:45:44 +00:00
pmap.h Add kernel support for Intel userspace protection keys feature on 2019-02-20 09:51:13 +00:00
pmc_mdep.h hwpmc: ABI fixes 2018-06-04 02:05:48 +00:00
ppireg.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
proc.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
procctl.h amd64 KPTI: add control from procctl(2). 2019-03-16 11:44:33 +00:00
profile.h Oops, the last minute reduction in the clobber list for i386 2018-06-02 09:59:27 +00:00
psl.h
ptrace.h
pvclock.h
reg.h
reloc.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
resource.h
runq.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
segments.h i386 4/4G split. 2018-04-13 20:30:49 +00:00
setjmp.h
sf_buf.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
sigframe.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
signal.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
smapi.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
smp.h x86: improve reservation of AP trampoline memory 2018-04-05 14:39:51 +00:00
speaker.h
specialreg.h
stack.h
stdarg.h
sysarch.h
timerreg.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
trap.h
tss.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
ucontext.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
vdso.h
vm86.h i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
vm.h sys/i386: further adoption of SPDX licensing ID tags. 2017-11-27 15:08:52 +00:00
vmparam.h i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00