vmxctx
struct vmxctx *vmxctx;
vmxctx = &vmx->ctx[vcpu];
if (vmxctx->guest_rcx != 0) {
xcrval = vmxctx->guest_rdx << 32 | (vmxctx->guest_rax & 0xffffffff);
const struct vmxctx *vmxctx;
vmxctx = &vmx->ctx[vcpu];
return (vmxctx->guest_rax);
return (vmxctx->guest_rcx);
return (vmxctx->guest_rdx);
return (vmxctx->guest_rbx);
return (vmxctx->guest_rbp);
return (vmxctx->guest_rsi);
return (vmxctx->guest_rdi);
return (vmxctx->guest_r8);
return (vmxctx->guest_r9);
return (vmxctx->guest_r10);
return (vmxctx->guest_r11);
return (vmxctx->guest_r12);
return (vmxctx->guest_r13);
return (vmxctx->guest_r14);
return (vmxctx->guest_r15);
struct vmxctx *vmxctx;
vmxctx = &vmx->ctx[vcpu];
vmxctx->guest_rax = regval;
vmxctx->guest_rcx = regval;
vmxctx->guest_rdx = regval;
vmxctx->guest_rbx = regval;
vmxctx->guest_rbp = regval;
vmxctx->guest_rsi = regval;
vmxctx->guest_rdi = regval;
vmxctx->guest_r8 = regval;
vmxctx->guest_r9 = regval;
vmxctx->guest_r10 = regval;
vmxctx->guest_r11 = regval;
vmxctx->guest_r12 = regval;
vmxctx->guest_r13 = regval;
vmxctx->guest_r14 = regval;
vmxctx->guest_r15 = regval;
struct vmxctx *vmxctx = &vmx->ctx[vcpuid];
const uint32_t ecx = vmxctx->guest_rcx;
val = vmxctx->guest_rdx << 32 | (uint32_t)vmxctx->guest_rax;
vmxctx->guest_rax = (uint32_t)val;
vmxctx->guest_rdx = val >> 32;
struct vmxctx *vmxctx;
vmxctx = &vmx->ctx[vcpu];
vmexit_inout(vmexit, vie, qual, (uint32_t)vmxctx->guest_rax);
(uint64_t *)&vmxctx->guest_rax,
(uint64_t *)&vmxctx->guest_rbx,
(uint64_t *)&vmxctx->guest_rcx,
(uint64_t *)&vmxctx->guest_rdx);
vmxctx->guest_cr2 = qual;
vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit)
KASSERT(vmxctx->inst_fail_status != VM_SUCCESS,
vmxctx->inst_fail_status));
vmexit->u.vmx.status = vmxctx->inst_fail_status;
vmx_dr_enter_guest(struct vmxctx *vmxctx)
vmxctx->host_dr7 = rdr7();
vmxctx->host_debugctl = rdmsr(MSR_DEBUGCTLMSR);
vmxctx->host_tf = rflags & PSL_T;
vmxctx->host_dr0 = rdr0();
vmxctx->host_dr1 = rdr1();
vmxctx->host_dr2 = rdr2();
vmxctx->host_dr3 = rdr3();
vmxctx->host_dr6 = rdr6();
load_dr0(vmxctx->guest_dr0);
load_dr1(vmxctx->guest_dr1);
load_dr2(vmxctx->guest_dr2);
load_dr3(vmxctx->guest_dr3);
load_dr6(vmxctx->guest_dr6);
vmx_dr_leave_guest(struct vmxctx *vmxctx)
vmxctx->guest_dr0 = rdr0();
vmxctx->guest_dr1 = rdr1();
vmxctx->guest_dr2 = rdr2();
vmxctx->guest_dr3 = rdr3();
vmxctx->guest_dr6 = rdr6();
load_dr0(vmxctx->host_dr0);
load_dr1(vmxctx->host_dr1);
load_dr2(vmxctx->host_dr2);
load_dr3(vmxctx->host_dr3);
load_dr6(vmxctx->host_dr6);
wrmsr(MSR_DEBUGCTLMSR, vmxctx->host_debugctl);
load_dr7(vmxctx->host_dr7);
write_rflags(read_rflags() | vmxctx->host_tf);
struct vmxctx *vmxctx;
vmxctx = &vmx->ctx[vcpu];
vmx_dr_enter_guest(vmxctx);
rc = vmx_enter_guest(vmxctx, vmx, launched);
vmx_dr_leave_guest(vmxctx);
vmx_exit_inst_error(vmxctx, rc, vmexit);
vmxctx_regptr(struct vmxctx *vmxctx, int reg)
return (&vmxctx->guest_rax);
return (&vmxctx->guest_rbx);
return (&vmxctx->guest_rcx);
return (&vmxctx->guest_rdx);
return (&vmxctx->guest_rsi);
return (&vmxctx->guest_rdi);
return (&vmxctx->guest_rbp);
return (&vmxctx->guest_r8);
return (&vmxctx->guest_r9);
return (&vmxctx->guest_r10);
return (&vmxctx->guest_r11);
return (&vmxctx->guest_r12);
return (&vmxctx->guest_r13);
return (&vmxctx->guest_r14);
return (&vmxctx->guest_r15);
return (&vmxctx->guest_cr2);
return (&vmxctx->guest_dr0);
return (&vmxctx->guest_dr1);
return (&vmxctx->guest_dr2);
return (&vmxctx->guest_dr3);
return (&vmxctx->guest_dr6);
struct vmxctx ctx[VM_MAXCPU];
int vmx_enter_guest(struct vmxctx *ctx, struct vmx *vmx, int launched);