vmm: Add support for changing VMX controls
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 17 Aug 2017 19:13:41 +0000 (15:13 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 25 Aug 2017 18:41:49 +0000 (14:41 -0400)
commite6c980a37b064bdddbb4758187fee813aeb4ff16
treed54ae2cb1fdd55a916efe7482cd6a18f30f0b63e
parent5261bcfc854032f3ad28e79f4e6b9f27482467fc
vmm: Add support for changing VMX controls

This adds internal support for changing pin-based, cpu-based, and secondary
cpu-based VMX controls.  VMMs will want to change some of them on the fly,
such as "vmexit on halt."  It's not enough to set them once at startup
either, since the 2LS's decision may depend on the number of cores
available dynamically.

Later patches will add support for userspace to change the flags in
vmx_vmm.  Once those bits are changed, the next time a GPC reloads, it will
have the new controls.  At a minimum, GPCs reload any time we run a VM and
were previously in userspace.  That should be sufficient for 2LSs.  The
alternative is to set those VMCS fields on every pop, which will slightly
slow down kernel vmexit handling.

The VMCS writes are only a few nsec each - basically the minimum cost of
any similar instruction.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/vmm/intel/vmx.c
kern/arch/x86/vmm/intel/vmx.h
kern/arch/x86/vmm/vmm.c
kern/arch/x86/vmm/vmm.h