vmxon
if (vmx->nested.vmxon)
if (!vmx->nested.vmxon && !vmx->nested.smm.vmxon)
vmx->nested.vmxon = false;
vmx->nested.smm.vmxon = false;
if (!to_vmx(vcpu)->nested.vmxon) {
vmx->nested.vmxon = true;
if (vmx->nested.vmxon)
(vmx->nested.vmxon || vmx->nested.smm.vmxon)) {
if (vmx->nested.smm.vmxon)
vmx->nested.smm.vmxon = true;
vmx->nested.vmxon = false;
vmx->nested.vmxon)
if (to_vmx(vcpu)->nested.vmxon)
if (to_vmx(vcpu)->nested.vmxon && !nested_cr4_valid(vcpu, cr4))
vmx->nested.smm.vmxon = vmx->nested.vmxon;
vmx->nested.vmxon = false;
if (vmx->nested.smm.vmxon) {
vmx->nested.vmxon = true;
vmx->nested.smm.vmxon = false;
return to_vmx(vcpu)->nested.vmxon && !is_guest_mode(vcpu);
bool vmxon;
bool vmxon;
void *vmxon;
*(uint32_t *)(vmx->vmxon) = vmcs_revision();
if (vmxon(vmx->vmxon_gpa))
vmx->vmxon = (void *)vm_vaddr_alloc_page(vm);
vmx->vmxon_hva = addr_gva2hva(vm, (uintptr_t)vmx->vmxon);
vmx->vmxon_gpa = addr_gva2gpa(vm, (uintptr_t)vmx->vmxon);