vmcs
vmcs_getreg(struct vmcs *vmcs, int running, int ident, uint64_t *retval)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_setreg(struct vmcs *vmcs, int running, int ident, uint64_t val)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_setdesc(struct vmcs *vmcs, int running, int seg, struct seg_desc *desc)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_getdesc(struct vmcs *vmcs, int running, int seg, struct seg_desc *desc)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_set_msr_save(struct vmcs *vmcs, u_long g_area, u_int g_count)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_init(struct vmcs *vmcs)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_getany(struct vmcs *vmcs, int running, int ident, uint64_t *val)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_setany(struct vmcs *vmcs, int running, int ident, uint64_t val)
VMPTRLD(vmcs);
VMCLEAR(vmcs);
vmcs_snapshot_reg(struct vmcs *vmcs, int running, int ident,
ret = vmcs_getreg(vmcs, running, ident, &val);
ret = vmcs_setreg(vmcs, running, ident, val);
vmcs_snapshot_desc(struct vmcs *vmcs, int running, int seg,
ret = vmcs_getdesc(vmcs, running, seg, &desc);
ret = vmcs_setdesc(vmcs, running, seg, &desc);
vmcs_snapshot_any(struct vmcs *vmcs, int running, int ident,
ret = vmcs_getany(vmcs, running, ident, &val);
ret = vmcs_setany(vmcs, running, ident, val);
DB_SHOW_COMMAND(vmcs, db_show_vmcs)
CTASSERT(sizeof(struct vmcs) == PAGE_SIZE);
int vmcs_set_msr_save(struct vmcs *vmcs, u_long g_area, u_int g_count);
int vmcs_init(struct vmcs *vmcs);
int vmcs_getreg(struct vmcs *vmcs, int running, int ident, uint64_t *rv);
int vmcs_setreg(struct vmcs *vmcs, int running, int ident, uint64_t val);
int vmcs_getdesc(struct vmcs *vmcs, int running, int ident,
int vmcs_setdesc(struct vmcs *vmcs, int running, int ident,
int vmcs_getany(struct vmcs *vmcs, int running, int ident, uint64_t *val);
int vmcs_setany(struct vmcs *vmcs, int running, int ident, uint64_t val);
int vmcs_snapshot_reg(struct vmcs *vmcs, int running, int ident,
int vmcs_snapshot_desc(struct vmcs *vmcs, int running, int seg,
int vmcs_snapshot_any(struct vmcs *vmcs, int running, int ident,
vmx_setup_cr_shadow(int which, struct vmcs *vmcs, uint32_t initial)
error = vmcs_setreg(vmcs, 0, VMCS_IDENT(mask_ident), mask_value);
error = vmcs_setreg(vmcs, 0, VMCS_IDENT(shadow_ident), initial);
#define vmx_setup_cr0_shadow(vmcs,init) vmx_setup_cr_shadow(0, (vmcs), (init))
#define vmx_setup_cr4_shadow(vmcs,init) vmx_setup_cr_shadow(4, (vmcs), (init))
struct vmcs *vmcs;
vcpu->vmcs = malloc_aligned(sizeof(*vmcs), PAGE_SIZE, M_VMX,
vmcs = vcpu->vmcs;
vmcs->identifier = vmx_revision();
error = vmclear(vmcs);
error = vmcs_init(vmcs);
VMPTRLD(vmcs);
VMCLEAR(vmcs);
error = vmx_setup_cr0_shadow(vmcs, 0x60000010);
error = vmx_setup_cr4_shadow(vmcs, 0);
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
free(vcpu->vmcs, M_VMX);
error = vmcs_getreg(vcpu->vmcs, running,
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
error = vmcs_getreg(vmcs, running, ident, &gi);
error = vmcs_setreg(vmcs, running, ident, gi);
return (vmcs_getreg(vcpu->vmcs, running, reg, retval));
error = vmcs_setreg(vcpu->vmcs, running, reg, val);
vmcs_getreg(vcpu->vmcs, running,
vmcs_setreg(vcpu->vmcs, running,
error = vmcs_setreg(vcpu->vmcs, running,
return (vmcs_getdesc(vcpu->vmcs, running, reg, desc));
return (vmcs_setdesc(vcpu->vmcs, running, reg, desc));
struct vmcs *vmcs = vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
struct vmcs *vmcs;
vmcs = vlapic_vtx->vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_CR0, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_CR3, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_CR4, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_DR7, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_RSP, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_RIP, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_RFLAGS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_ES, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_ES, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_CS, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_CS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_SS, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_SS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_DS, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_DS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_FS, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_FS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_GS, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_GS, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_TR, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_TR, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_LDTR, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_LDTR, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_EFER, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_IDTR, meta);
err += vmcs_snapshot_desc(vmcs, run, VM_REG_GUEST_GDTR, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_PDPTE0, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_PDPTE1, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_PDPTE2, meta);
err += vmcs_snapshot_reg(vmcs, run, VM_REG_GUEST_PDPTE3, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_GUEST_IA32_SYSENTER_CS, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_GUEST_IA32_SYSENTER_ESP, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_GUEST_IA32_SYSENTER_EIP, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_GUEST_INTERRUPTIBILITY, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_GUEST_ACTIVITY, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_ENTRY_CTLS, meta);
err += vmcs_snapshot_any(vmcs, run, VMCS_EXIT_CTLS, meta);
struct vmcs *vmcs;
vmcs = vcpu->vmcs;
VMPTRLD(vmcs);
VMCLEAR(vmcs);
struct vmcs *vmcs;
vmptrld(struct vmcs *vmcs)
addr = vtophys(vmcs);
VMCLEAR(struct vmcs *vmcs)
err = vmclear(vmcs);
panic("%s: vmclear(%p) error %d", __func__, vmcs, err);
VMPTRLD(struct vmcs *vmcs)
err = vmptrld(vmcs);
panic("%s: vmptrld(%p) error %d", __func__, vmcs, err);
struct vmcs;
vmclear(struct vmcs *vmcs)
addr = vtophys(vmcs);