vmm(4): add quiesce/wakeup hooks to sync vcpu state.
authordv <dv@openbsd.org>
Mon, 28 Mar 2022 00:22:20 +0000 (00:22 +0000)
committerdv <dv@openbsd.org>
Mon, 28 Mar 2022 00:22:20 +0000 (00:22 +0000)
commitc0f44e363efa61ae9c08e033ec7078e1551dc4e0
tree8cc7ce6c859ab3003290174c162468ff50c15b9b
parent0c431463fcbffcd5d96cf34a7b9b47936e30882d
vmm(4): add quiesce/wakeup hooks to sync vcpu state.

If a host suspends or hibernates, a task in the middle of using
vcpu state may be rescheduled to another cpu. This is primarily a
problem for Intel hosts as vcpu state is kept local to the physical
cpu and must be flushed back to physical memory before another cpu
can issue certain vmx instructions.

This change ensures no tasks are actively using the vmm device,
flushes all vcpu state (if Intel hardware), and turns off virtualization
mode on the host cpus. Upon wakeup, we reverse the process.

Reported on bugs@ by mpi@. OK mlarkin@
sys/arch/amd64/amd64/vmm.c