vmcb
struct vmcb *vmcb;
vmcb = svm_get_vmcb(svm_sc, vcpu);
state = &vmcb->state;
ctrl = &vmcb->ctrl;
struct vmcb *vmcb;
vmcb = svm_get_vmcb(sc, vcpu);
*val = (vmcb->ctrl.intr_shadow != 0) ? 1 : 0;
fieldp = vmcb_regptr(vmcb, ident, NULL);
seg = vmcb_segptr(vmcb, ident);
struct vmcb *vmcb;
vmcb = svm_get_vmcb(sc, vcpu);
vmcb->ctrl.intr_shadow = (val != 0) ? 1 : 0;
fieldp = vmcb_regptr(vmcb, ident, &dirty);
fieldp = vmcb_regptr(vmcb, ident, &dirty);
seg = vmcb_segptr(vmcb, ident);
struct vmcb *vmcb;
vmcb = svm_get_vmcb(sc, vcpu);
seg = vmcb_segptr(vmcb, reg);
vmcb->state.cpl = SEG_DESC_DPL(desc->access);
seg = vmcb_segptr(vmcb, reg);
struct vmcb *vmcb;
vmcb = svm_get_vmcb(sc, vcpu);
seg = vmcb_segptr(vmcb, reg);
(vmcb->state.cpl & SEG_DESC_DPL_MASK) <<
seg = vmcb_segptr(vmcb, reg);
seg = vmcb_segptr(vmcb, reg);
struct vmcb *vmcb = svm_get_vmcb(sc, vcpu);
const uint64_t *msrp = vmcb_msr_ptr(vmcb, msr, NULL);
struct vmcb *vmcb = svm_get_vmcb(sc, vcpu);
uint64_t *msrp = vmcb_msr_ptr(vmcb, msr, &dirty);
vcpu->vmcb_pa = vtophys(&vcpu->vmcb);
svm_vcpu_mode(struct vmcb *vmcb)
state = &vmcb->state;
seg = vmcb_segptr(vmcb, VM_REG_GUEST_CS);
svm_paging_info(struct vmcb *vmcb, struct vm_guest_paging *paging)
state = &vmcb->state;
paging->cpu_mode = svm_vcpu_mode(vmcb);
struct vmcb *vmcb;
vmcb = svm_get_vmcb(svm_sc, vcpu);
ctrl = &vmcb->ctrl;
svm_paging_info(vmcb, &paging);
seg = vmcb_segptr(vmcb, VM_REG_GUEST_CS);
seg = vmcb_segptr(vmcb, VM_REG_GUEST_CS);
struct vmcb *vmcb;
vmcb = svm_get_vmcb(svm_sc, vcpu);
*val = vmcb->state.cr0 | (regctx->sctx_cr0_shadow & ~SVM_CR0_MASK);
return (&(sc->vcpu[vcpu].vmcb.ctrl));
struct vmcb vmcb; /* hardware saved vcpu context */
static __inline struct vmcb *
return (&(sc->vcpu[vcpu].vmcb));
return (&(sc->vcpu[vcpu].vmcb.state));
vmcb_msr_ptr(struct vmcb *vmcb, uint32_t msr, uint32_t *dirtyp)
struct vmcb_state *state = &vmcb->state;
vmcb_segptr(struct vmcb *vmcb, int type)
struct vmcb_state *state = &vmcb->state;
vmcb_regptr(struct vmcb *vmcb, int ident, uint32_t *dirtyp)
state = &vmcb->state;
CTASSERT(sizeof (struct vmcb) == PAGE_SIZE);
CTASSERT(offsetof(struct vmcb, state) == 0x400);
struct vmcb_segment *vmcb_segptr(struct vmcb *vmcb, int type);
uint64_t *vmcb_regptr(struct vmcb *vmcb, int ident, uint32_t *dirtyp);
uint64_t *vmcb_msr_ptr(struct vmcb *vmcb, uint32_t ident, uint32_t *dirtyp);