opnsense-src/sys/amd64/include
Konstantin Belousov 3e902b3d76 Make WRFSBASE and WRGSBASE instructions functional.
Right now, we enable the CR4.FSGSBASE bit on CPUs which support the
facility (Ivy and later), to allow usermode to read fs and gs bases
without syscalls. This bit also controls the write access to bases
from userspace, but WRFSBASE and WRGSBASE instructions currently
cannot be used, because return path from both exceptions or interrupts
overrides bases with the values from pcb.

Supporting the instructions is useful because this means that usermode
can implement green-threads completely in userspace without issuing
syscalls to change all of the machine context.

Support is implemented by saving the fs base and user gs base when
PCB_FULL_IRET flag is set. The flag is set on the context switch,
which potentially causes clobber of the bases due to activation of
another context, and when explicit modification of the user context by
a syscall or exception handler is performed. In particular, the patch
moves setting of the flag before syscalls change context.

The changes to doreti_exit and PUSH_FRAME to clear PCB_FULL_IRET on
entry from userspace can be considered a bug fixes on its own.

Reviewed by:	jhb (previous version)
Tested by:	pho (previous version)
Sponsored by:	The FreeBSD Foundation
MFC after:	3 weeks
Differential revision:	https://reviews.freebsd.org/D12023
2017-08-21 17:38:02 +00:00
..
pc Add more UEFI/e820 memory types from latest specifications. 2016-07-24 09:15:11 +00:00
xen x86/xen: Consolidate xen-os.h in a single place 2015-10-21 10:04:35 +00:00
_align.h
_bus.h
_inttypes.h
_limits.h
_stdint.h
_types.h
acpica_machdep.h
apm_bios.h
asm.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
asmacros.h Make WRFSBASE and WRGSBASE instructions functional. 2017-08-21 17:38:02 +00:00
atomic.h - Remove 'struct vmmeter' from 'struct pcpu', leaving only global vmmeter 2017-04-17 17:34:47 +00:00
bus.h
bus_dma.h Clean up MD pollution of bus_dma.h: 2017-07-01 05:35:29 +00:00
clock.h
counter.h - Remove 'struct vmmeter' from 'struct pcpu', leaving only global vmmeter 2017-04-17 17:34:47 +00:00
cpu.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
cpufunc.h Add support for Intel Software Guard Extensions (Intel SGX). 2017-08-16 10:38:06 +00:00
cputypes.h Remove 'cpu' and 'cpu_class' on amd64. 2016-09-15 17:05:54 +00:00
db_machdep.h Fix printing of negative offsets (typically from frame pointers) again. 2017-03-26 18:46:35 +00:00
dump.h Factor out duplicated code from dumpsys() on each architecture into generic 2015-01-07 01:01:39 +00:00
efi.h Fail to open efirt device when no EFI on system. 2017-08-08 20:44:16 +00:00
elf.h
endian.h
exec.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
fdt.h
float.h
floatingpoint.h
fpu.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
frame.h
gdb_machdep.h
ieeefp.h
in_cksum.h Rationalize BSD license on sys/*/include/in_cksum.h 2015-08-05 19:05:12 +00:00
intr_machdep.h x86: Add dynamic interrupt rebalancing 2017-08-16 18:48:53 +00:00
iodev.h
kdb.h
limits.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
md_var.h Lower the amd64 shared page, which contains the signal trampoline, 2017-08-02 01:43:35 +00:00
memdev.h
metadata.h Move amd64 metadata.h to x86 and share with i386 2016-01-07 19:47:26 +00:00
minidump.h
mp_watchdog.h
nexusvar.h
npx.h
ofw_machdep.h
param.h Enable DEVICE_NUMA with up to 8 domains by default on amd64. 2016-04-12 21:23:44 +00:00
pcb.h Make WRFSBASE and WRGSBASE instructions functional. 2017-08-21 17:38:02 +00:00
pci_cfgreg.h
pcpu.h - Remove 'struct vmmeter' from 'struct pcpu', leaving only global vmmeter 2017-04-17 17:34:47 +00:00
pmap.h Add support for pmap_enter(..., psind=1) to the amd64 pmap. In other words, 2017-07-23 06:33:58 +00:00
pmc_mdep.h Use single instance of the identical INKERNEL() and PMC_IN_KERNEL() 2015-07-02 14:37:21 +00:00
ppireg.h
proc.h Make struct syscall_args visible to userspace compilation environment 2017-06-12 20:53:44 +00:00
profile.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
psl.h
ptrace.h
pvclock.h Generalized parts of the XEN timer code into a generic pvclock 2015-02-04 08:26:43 +00:00
reg.h
reloc.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
resource.h
runq.h
segments.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
setjmp.h
sf_buf.h
sgx.h Add support for Intel Software Guard Extensions (Intel SGX). 2017-08-16 10:38:06 +00:00
sgxreg.h Add support for Intel Software Guard Extensions (Intel SGX). 2017-08-16 10:38:06 +00:00
sigframe.h
signal.h
smp.h Move declarations of invpcid_works and pmap_pcid_enabled to pmap.h. 2016-10-31 18:37:05 +00:00
specialreg.h
stack.h Merge stack(9) implementations for i386 and amd64 under x86/. 2015-09-11 03:24:07 +00:00
stdarg.h
sysarch.h
timerreg.h
trap.h
tss.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
ucontext.h
varargs.h
vdso.h
vm.h Reassign copyright statements on several files from Advanced 2015-04-23 14:22:20 +00:00
vmm.h sys/amd64: Small spelling fixes. 2016-05-03 22:13:04 +00:00
vmm_dev.h Restructure memory allocation in bhyve to support "devmem". 2015-06-18 06:00:17 +00:00
vmm_instruction_emul.h Deprecate the 3-way return values from vm_gla2gpa() and vm_copy_setup(). 2015-05-06 16:25:20 +00:00
vmparam.h Bump default MAXTSIZ (kern.maxtsiz) from 128MB to 32GB. The old limit 2017-05-17 08:38:41 +00:00