vmcs_write
void vmcs_write(uint32_t encoding, uint64_t val);
vmcs_write(VMCS_HOST_IA32_SYSENTER_ESP, rdmsr(MSR_SYSENTER_ESP_MSR));
vmcs_write(VMCS_HOST_IDTR_BASE, vmm_get_host_idtrbase());
vmcs_write(VMCS_HOST_TR_BASE, vmm_get_host_trbase());
vmcs_write(VMCS_HOST_GDTR_BASE, vmm_get_host_gdtrbase());
vmcs_write(VMCS_HOST_GS_BASE, vmm_get_host_gsbase());
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, vmx->cap[vcpu].proc_ctls);
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, vmx->cap[vcpu].proc_ctls);
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, vmx->cap[vcpu].proc_ctls);
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, vmx->cap[vcpu].proc_ctls);
vmcs_write(VMCS_TSC_OFFSET, offset);
vmcs_write(VMCS_ENTRY_INTR_INFO, 0);
vmcs_write(VMCS_ENTRY_EXCEPTION_ERROR, 0);
vmcs_write(VMCS_ENTRY_EXCEPTION_ERROR,
vmcs_write(VMCS_ENTRY_INTR_INFO, inject);
vmcs_write(VMCS_ENTRY_INTR_INFO,
vmcs_write(VMCS_GUEST_INTERRUPTIBILITY, gi);
vmcs_write(VMCS_ENTRY_INTR_INFO,
vmcs_write(VMCS_GUEST_INTR_STATUS, status_new);
vmcs_write(VMCS_ENTRY_INTR_INFO,
vmcs_write(VMCS_GUEST_INTERRUPTIBILITY, gi);
vmcs_write(VMCS_GUEST_INTERRUPTIBILITY, gi);
vmcs_write(VMCS_GUEST_RSP, regval);
vmcs_write(VMCS_ENTRY_CTLS, ctrl);
vmcs_write(VMCS_CR0_SHADOW, regval);
vmcs_write(VMCS_GUEST_CR0, crval);
vmcs_write(VMCS_GUEST_IA32_EFER, efer);
vmcs_write(VMCS_CR4_SHADOW, regval);
vmcs_write(VMCS_GUEST_CR4, crval);
vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
vmcs_write(VMCS_GUEST_RIP, vmexit->rip);
vmcs_write(VMCS_HOST_CR3, rcr3());
vmcs_write(VMCS_GUEST_RIP, rip);
vmcs_write(VMCS_GUEST_INTERRUPTIBILITY, gi);
vmcs_write(encoding, val);
vmcs_write(VMCS_CR0_SHADOW, val);
vmcs_write(encoding, vmx_fix_cr0(val));
vmcs_write(VMCS_CR4_SHADOW, val);
vmcs_write(encoding, vmx_fix_cr4(val));
vmcs_write(encoding, val);
vmcs_write(encoding, val);
vmcs_write(base, desc->base);
vmcs_write(limit, desc->limit);
vmcs_write(access, desc->access);
vmcs_write(vmcs_enc, val);
vmcs_write(reg, baseval);
vmcs_write(VMCS_EOI_EXIT0, ((uint64_t)tmrs[1] << 32) | tmrs[0]);
vmcs_write(VMCS_EOI_EXIT1, ((uint64_t)tmrs[3] << 32) | tmrs[2]);
vmcs_write(VMCS_EOI_EXIT2, ((uint64_t)tmrs[5] << 32) | tmrs[4]);
vmcs_write(VMCS_EOI_EXIT3, ((uint64_t)tmrs[7] << 32) | tmrs[6]);
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, proc_ctls);
vmcs_write(VMCS_SEC_PROC_BASED_CTLS, proc_ctls2);
vmcs_write(VMCS_TPR_THRESHOLD, vlapic_get_cr8(vlapic));
vmcs_write(VMCS_HOST_IA32_PAT, vmm_get_host_pat());
vmcs_write(VMCS_HOST_IA32_EFER, vmm_get_host_efer());
vmcs_write(VMCS_HOST_CR0, vmm_get_host_cr0());
vmcs_write(VMCS_HOST_CR4, vmm_get_host_cr4() | CR4_VMXE);
vmcs_write(VMCS_HOST_CS_SELECTOR, vmm_get_host_codesel());
vmcs_write(VMCS_HOST_ES_SELECTOR, datasel);
vmcs_write(VMCS_HOST_SS_SELECTOR, datasel);
vmcs_write(VMCS_HOST_DS_SELECTOR, datasel);
vmcs_write(VMCS_HOST_FS_SELECTOR, vmm_get_host_fssel());
vmcs_write(VMCS_HOST_GS_SELECTOR, vmm_get_host_gssel());
vmcs_write(VMCS_HOST_TR_SELECTOR, vmm_get_host_tsssel());
vmcs_write(VMCS_HOST_IA32_SYSENTER_CS, KCS_SEL);
vmcs_write(VMCS_HOST_IA32_SYSENTER_EIP,
vmcs_write(VMCS_HOST_RIP, (uint64_t)vmx_exit_guest);
vmcs_write(VMCS_LINK_POINTER, ~0);
vmcs_write(VMCS_EPTP, vmx->eptp);
vmcs_write(VMCS_PIN_BASED_CTLS, pin_ctls);
vmcs_write(VMCS_PRI_PROC_BASED_CTLS, proc_ctls);
vmcs_write(VMCS_SEC_PROC_BASED_CTLS, use_proc2_ctls);
vmcs_write(VMCS_EXIT_CTLS, exit_ctls);
vmcs_write(VMCS_ENTRY_CTLS, entry_ctls);
vmcs_write(VMCS_MSR_BITMAP, msr_bitmap_pa);
vmcs_write(VMCS_VPID, vpid[i]);
vmcs_write(VMCS_ENTRY_MSR_LOAD,
vmcs_write(VMCS_ENTRY_MSR_LOAD_COUNT,
vmcs_write(VMCS_EXIT_MSR_STORE, 0);
vmcs_write(VMCS_EXIT_MSR_STORE_COUNT, 0);
vmcs_write(VMCS_EXCEPTION_BITMAP, exc_bitmap);
vmcs_write(VMCS_GUEST_DR7, DBREG_DR7_RESERVED1);
vmcs_write(VMCS_VIRTUAL_APIC, apic_page_pa);
vmcs_write(VMCS_APIC_ACCESS, apic_access_pa);
vmcs_write(VMCS_EOI_EXIT0, 0);
vmcs_write(VMCS_EOI_EXIT1, 0);
vmcs_write(VMCS_EOI_EXIT2, 0);
vmcs_write(VMCS_EOI_EXIT3, 0);
vmcs_write(VMCS_PIR_VECTOR, pirvec);
vmcs_write(VMCS_PIR_DESC, pir_desc_pa);
vmcs_write(VMCS_CR0_MASK, cr0_ones_mask | cr0_zeros_mask);
vmcs_write(VMCS_CR0_SHADOW, 0x60000010);
vmcs_write(VMCS_CR4_MASK, cr4_ones_mask | cr4_zeros_mask);
vmcs_write(VMCS_CR4_SHADOW, 0);