Lines Matching defs:vmxctx
316 static int vmxctx_setreg(struct vmxctx *vmxctx, int reg, uint64_t val);
1249 vmx_handle_cpuid(struct vmx_vcpu *vcpu, struct vmxctx *vmxctx)
1253 handled = x86_emulate_cpuid(vcpu->vcpu, (uint64_t *)&vmxctx->guest_rax,
1254 (uint64_t *)&vmxctx->guest_rbx, (uint64_t *)&vmxctx->guest_rcx,
1255 (uint64_t *)&vmxctx->guest_rdx);
1698 struct vmxctx *vmxctx;
1702 vmxctx = &vcpu->ctx;
1712 if (vmxctx->guest_rcx != 0) {
1723 xcrval = vmxctx->guest_rdx << 32 | (vmxctx->guest_rax & 0xffffffff);
1774 const struct vmxctx *vmxctx;
1776 vmxctx = &vcpu->ctx;
1780 return (vmxctx->guest_rax);
1782 return (vmxctx->guest_rcx);
1784 return (vmxctx->guest_rdx);
1786 return (vmxctx->guest_rbx);
1790 return (vmxctx->guest_rbp);
1792 return (vmxctx->guest_rsi);
1794 return (vmxctx->guest_rdi);
1796 return (vmxctx->guest_r8);
1798 return (vmxctx->guest_r9);
1800 return (vmxctx->guest_r10);
1802 return (vmxctx->guest_r11);
1804 return (vmxctx->guest_r12);
1806 return (vmxctx->guest_r13);
1808 return (vmxctx->guest_r14);
1810 return (vmxctx->guest_r15);
1819 struct vmxctx *vmxctx;
1821 vmxctx = &vcpu->ctx;
1825 vmxctx->guest_rax = regval;
1828 vmxctx->guest_rcx = regval;
1831 vmxctx->guest_rdx = regval;
1834 vmxctx->guest_rbx = regval;
1840 vmxctx->guest_rbp = regval;
1843 vmxctx->guest_rsi = regval;
1846 vmxctx->guest_rdi = regval;
1849 vmxctx->guest_r8 = regval;
1852 vmxctx->guest_r9 = regval;
1855 vmxctx->guest_r10 = regval;
1858 vmxctx->guest_r11 = regval;
1861 vmxctx->guest_r12 = regval;
1864 vmxctx->guest_r13 = regval;
1867 vmxctx->guest_r14 = regval;
1870 vmxctx->guest_r15 = regval;
2355 struct vmxctx *vmxctx;
2367 vmxctx = &vcpu->ctx;
2368 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_RAX, eax);
2372 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_RDX, edx);
2383 struct vmxctx *vmxctx;
2399 vmxctx = &vcpu->ctx;
2536 ecx = vmxctx->guest_rcx;
2554 eax = vmxctx->guest_rax;
2555 ecx = vmxctx->guest_rcx;
2556 edx = vmxctx->guest_rdx;
2649 vmexit->u.inout.eax = (uint32_t)(vmxctx->guest_rax);
2667 handled = vmx_handle_cpuid(vcpu, vmxctx);
2721 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_CR2, qual);
2887 vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit)
2890 KASSERT(vmxctx->inst_fail_status != VM_SUCCESS,
2892 vmxctx->inst_fail_status));
2896 vmexit->u.vmx.status = vmxctx->inst_fail_status;
2942 vmx_dr_enter_guest(struct vmxctx *vmxctx)
2947 vmxctx->host_dr7 = rdr7();
2948 vmxctx->host_debugctl = rdmsr(MSR_DEBUGCTLMSR);
2965 vmxctx->host_tf = rflags & PSL_T;
2969 vmxctx->host_dr0 = rdr0();
2970 vmxctx->host_dr1 = rdr1();
2971 vmxctx->host_dr2 = rdr2();
2972 vmxctx->host_dr3 = rdr3();
2973 vmxctx->host_dr6 = rdr6();
2976 load_dr0(vmxctx->guest_dr0);
2977 load_dr1(vmxctx->guest_dr1);
2978 load_dr2(vmxctx->guest_dr2);
2979 load_dr3(vmxctx->guest_dr3);
2980 load_dr6(vmxctx->guest_dr6);
2984 vmx_dr_leave_guest(struct vmxctx *vmxctx)
2988 vmxctx->guest_dr0 = rdr0();
2989 vmxctx->guest_dr1 = rdr1();
2990 vmxctx->guest_dr2 = rdr2();
2991 vmxctx->guest_dr3 = rdr3();
2992 vmxctx->guest_dr6 = rdr6();
2998 load_dr0(vmxctx->host_dr0);
2999 load_dr1(vmxctx->host_dr1);
3000 load_dr2(vmxctx->host_dr2);
3001 load_dr3(vmxctx->host_dr3);
3002 load_dr6(vmxctx->host_dr6);
3003 wrmsr(MSR_DEBUGCTLMSR, vmxctx->host_debugctl);
3004 load_dr7(vmxctx->host_dr7);
3005 write_rflags(read_rflags() | vmxctx->host_tf);
3039 struct vmxctx *vmxctx;
3050 vmxctx = &vcpu->ctx;
3055 KASSERT(vmxctx->pmap == pmap,
3056 ("pmap %p different than ctx pmap %p", pmap, vmxctx->pmap));
3180 vmx_dr_enter_guest(vmxctx);
3189 rc = vmx_enter_guest(vmxctx, vmx, launched);
3192 vmx_dr_leave_guest(vmxctx);
3214 vmx_exit_inst_error(vmxctx, rc, vmexit);
3267 vmxctx_regptr(struct vmxctx *vmxctx, int reg)
3272 return (&vmxctx->guest_rax);
3274 return (&vmxctx->guest_rbx);
3276 return (&vmxctx->guest_rcx);
3278 return (&vmxctx->guest_rdx);
3280 return (&vmxctx->guest_rsi);
3282 return (&vmxctx->guest_rdi);
3284 return (&vmxctx->guest_rbp);
3286 return (&vmxctx->guest_r8);
3288 return (&vmxctx->guest_r9);
3290 return (&vmxctx->guest_r10);
3292 return (&vmxctx->guest_r11);
3294 return (&vmxctx->guest_r12);
3296 return (&vmxctx->guest_r13);
3298 return (&vmxctx->guest_r14);
3300 return (&vmxctx->guest_r15);
3302 return (&vmxctx->guest_cr2);
3304 return (&vmxctx->guest_dr0);
3306 return (&vmxctx->guest_dr1);
3308 return (&vmxctx->guest_dr2);
3310 return (&vmxctx->guest_dr3);
3312 return (&vmxctx->guest_dr6);
3320 vmxctx_getreg(struct vmxctx *vmxctx, int reg, uint64_t *retval)
3324 if ((regp = vmxctx_regptr(vmxctx, reg)) != NULL) {
3332 vmxctx_setreg(struct vmxctx *vmxctx, int reg, uint64_t val)
3336 if ((regp = vmxctx_regptr(vmxctx, reg)) != NULL) {
4144 struct vmxctx *vmxctx;
4223 vmxctx = &vcpu->ctx;
4224 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rdi, meta, err, done);
4225 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rsi, meta, err, done);
4226 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rdx, meta, err, done);
4227 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rcx, meta, err, done);
4228 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r8, meta, err, done);
4229 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r9, meta, err, done);
4230 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rax, meta, err, done);
4231 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rbx, meta, err, done);
4232 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rbp, meta, err, done);
4233 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r10, meta, err, done);
4234 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r11, meta, err, done);
4235 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r12, meta, err, done);
4236 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r13, meta, err, done);
4237 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r14, meta, err, done);
4238 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r15, meta, err, done);
4239 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_cr2, meta, err, done);
4240 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr0, meta, err, done);
4241 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr1, meta, err, done);
4242 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr2, meta, err, done);
4243 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr3, meta, err, done);
4244 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr6, meta, err, done);