Lines Matching refs:vmxctx

318 static int vmxctx_setreg(struct vmxctx *vmxctx, int reg, uint64_t val);
1251 vmx_handle_cpuid(struct vmx_vcpu *vcpu, struct vmxctx *vmxctx) in vmx_handle_cpuid() argument
1255 handled = x86_emulate_cpuid(vcpu->vcpu, (uint64_t *)&vmxctx->guest_rax, in vmx_handle_cpuid()
1256 (uint64_t *)&vmxctx->guest_rbx, (uint64_t *)&vmxctx->guest_rcx, in vmx_handle_cpuid()
1257 (uint64_t *)&vmxctx->guest_rdx); in vmx_handle_cpuid()
1700 struct vmxctx *vmxctx; in vmx_emulate_xsetbv() local
1704 vmxctx = &vcpu->ctx; in vmx_emulate_xsetbv()
1714 if (vmxctx->guest_rcx != 0) { in vmx_emulate_xsetbv()
1725 xcrval = vmxctx->guest_rdx << 32 | (vmxctx->guest_rax & 0xffffffff); in vmx_emulate_xsetbv()
1776 const struct vmxctx *vmxctx; in vmx_get_guest_reg() local
1778 vmxctx = &vcpu->ctx; in vmx_get_guest_reg()
1782 return (vmxctx->guest_rax); in vmx_get_guest_reg()
1784 return (vmxctx->guest_rcx); in vmx_get_guest_reg()
1786 return (vmxctx->guest_rdx); in vmx_get_guest_reg()
1788 return (vmxctx->guest_rbx); in vmx_get_guest_reg()
1792 return (vmxctx->guest_rbp); in vmx_get_guest_reg()
1794 return (vmxctx->guest_rsi); in vmx_get_guest_reg()
1796 return (vmxctx->guest_rdi); in vmx_get_guest_reg()
1798 return (vmxctx->guest_r8); in vmx_get_guest_reg()
1800 return (vmxctx->guest_r9); in vmx_get_guest_reg()
1802 return (vmxctx->guest_r10); in vmx_get_guest_reg()
1804 return (vmxctx->guest_r11); in vmx_get_guest_reg()
1806 return (vmxctx->guest_r12); in vmx_get_guest_reg()
1808 return (vmxctx->guest_r13); in vmx_get_guest_reg()
1810 return (vmxctx->guest_r14); in vmx_get_guest_reg()
1812 return (vmxctx->guest_r15); in vmx_get_guest_reg()
1821 struct vmxctx *vmxctx; in vmx_set_guest_reg() local
1823 vmxctx = &vcpu->ctx; in vmx_set_guest_reg()
1827 vmxctx->guest_rax = regval; in vmx_set_guest_reg()
1830 vmxctx->guest_rcx = regval; in vmx_set_guest_reg()
1833 vmxctx->guest_rdx = regval; in vmx_set_guest_reg()
1836 vmxctx->guest_rbx = regval; in vmx_set_guest_reg()
1842 vmxctx->guest_rbp = regval; in vmx_set_guest_reg()
1845 vmxctx->guest_rsi = regval; in vmx_set_guest_reg()
1848 vmxctx->guest_rdi = regval; in vmx_set_guest_reg()
1851 vmxctx->guest_r8 = regval; in vmx_set_guest_reg()
1854 vmxctx->guest_r9 = regval; in vmx_set_guest_reg()
1857 vmxctx->guest_r10 = regval; in vmx_set_guest_reg()
1860 vmxctx->guest_r11 = regval; in vmx_set_guest_reg()
1863 vmxctx->guest_r12 = regval; in vmx_set_guest_reg()
1866 vmxctx->guest_r13 = regval; in vmx_set_guest_reg()
1869 vmxctx->guest_r14 = regval; in vmx_set_guest_reg()
1872 vmxctx->guest_r15 = regval; in vmx_set_guest_reg()
2357 struct vmxctx *vmxctx; in emulate_rdmsr() local
2369 vmxctx = &vcpu->ctx; in emulate_rdmsr()
2370 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_RAX, eax); in emulate_rdmsr()
2374 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_RDX, edx); in emulate_rdmsr()
2385 struct vmxctx *vmxctx; in vmx_exit_process() local
2401 vmxctx = &vcpu->ctx; in vmx_exit_process()
2538 ecx = vmxctx->guest_rcx; in vmx_exit_process()
2556 eax = vmxctx->guest_rax; in vmx_exit_process()
2557 ecx = vmxctx->guest_rcx; in vmx_exit_process()
2558 edx = vmxctx->guest_rdx; in vmx_exit_process()
2651 vmexit->u.inout.eax = (uint32_t)(vmxctx->guest_rax); in vmx_exit_process()
2671 handled = vmx_handle_cpuid(vcpu, vmxctx); in vmx_exit_process()
2725 error = vmxctx_setreg(vmxctx, VM_REG_GUEST_CR2, qual); in vmx_exit_process()
2891 vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit) in vmx_exit_inst_error() argument
2894 KASSERT(vmxctx->inst_fail_status != VM_SUCCESS, in vmx_exit_inst_error()
2896 vmxctx->inst_fail_status)); in vmx_exit_inst_error()
2900 vmexit->u.vmx.status = vmxctx->inst_fail_status; in vmx_exit_inst_error()
2946 vmx_dr_enter_guest(struct vmxctx *vmxctx) in vmx_dr_enter_guest() argument
2951 vmxctx->host_dr7 = rdr7(); in vmx_dr_enter_guest()
2952 vmxctx->host_debugctl = rdmsr(MSR_DEBUGCTLMSR); in vmx_dr_enter_guest()
2969 vmxctx->host_tf = rflags & PSL_T; in vmx_dr_enter_guest()
2973 vmxctx->host_dr0 = rdr0(); in vmx_dr_enter_guest()
2974 vmxctx->host_dr1 = rdr1(); in vmx_dr_enter_guest()
2975 vmxctx->host_dr2 = rdr2(); in vmx_dr_enter_guest()
2976 vmxctx->host_dr3 = rdr3(); in vmx_dr_enter_guest()
2977 vmxctx->host_dr6 = rdr6(); in vmx_dr_enter_guest()
2980 load_dr0(vmxctx->guest_dr0); in vmx_dr_enter_guest()
2981 load_dr1(vmxctx->guest_dr1); in vmx_dr_enter_guest()
2982 load_dr2(vmxctx->guest_dr2); in vmx_dr_enter_guest()
2983 load_dr3(vmxctx->guest_dr3); in vmx_dr_enter_guest()
2984 load_dr6(vmxctx->guest_dr6); in vmx_dr_enter_guest()
2988 vmx_dr_leave_guest(struct vmxctx *vmxctx) in vmx_dr_leave_guest() argument
2992 vmxctx->guest_dr0 = rdr0(); in vmx_dr_leave_guest()
2993 vmxctx->guest_dr1 = rdr1(); in vmx_dr_leave_guest()
2994 vmxctx->guest_dr2 = rdr2(); in vmx_dr_leave_guest()
2995 vmxctx->guest_dr3 = rdr3(); in vmx_dr_leave_guest()
2996 vmxctx->guest_dr6 = rdr6(); in vmx_dr_leave_guest()
3002 load_dr0(vmxctx->host_dr0); in vmx_dr_leave_guest()
3003 load_dr1(vmxctx->host_dr1); in vmx_dr_leave_guest()
3004 load_dr2(vmxctx->host_dr2); in vmx_dr_leave_guest()
3005 load_dr3(vmxctx->host_dr3); in vmx_dr_leave_guest()
3006 load_dr6(vmxctx->host_dr6); in vmx_dr_leave_guest()
3007 wrmsr(MSR_DEBUGCTLMSR, vmxctx->host_debugctl); in vmx_dr_leave_guest()
3008 load_dr7(vmxctx->host_dr7); in vmx_dr_leave_guest()
3009 write_rflags(read_rflags() | vmxctx->host_tf); in vmx_dr_leave_guest()
3043 struct vmxctx *vmxctx; in vmx_run() local
3054 vmxctx = &vcpu->ctx; in vmx_run()
3059 KASSERT(vmxctx->pmap == pmap, in vmx_run()
3060 ("pmap %p different than ctx pmap %p", pmap, vmxctx->pmap)); in vmx_run()
3184 vmx_dr_enter_guest(vmxctx); in vmx_run()
3193 rc = vmx_enter_guest(vmxctx, vmx, launched); in vmx_run()
3196 vmx_dr_leave_guest(vmxctx); in vmx_run()
3218 vmx_exit_inst_error(vmxctx, rc, vmexit); in vmx_run()
3271 vmxctx_regptr(struct vmxctx *vmxctx, int reg) in vmxctx_regptr() argument
3276 return (&vmxctx->guest_rax); in vmxctx_regptr()
3278 return (&vmxctx->guest_rbx); in vmxctx_regptr()
3280 return (&vmxctx->guest_rcx); in vmxctx_regptr()
3282 return (&vmxctx->guest_rdx); in vmxctx_regptr()
3284 return (&vmxctx->guest_rsi); in vmxctx_regptr()
3286 return (&vmxctx->guest_rdi); in vmxctx_regptr()
3288 return (&vmxctx->guest_rbp); in vmxctx_regptr()
3290 return (&vmxctx->guest_r8); in vmxctx_regptr()
3292 return (&vmxctx->guest_r9); in vmxctx_regptr()
3294 return (&vmxctx->guest_r10); in vmxctx_regptr()
3296 return (&vmxctx->guest_r11); in vmxctx_regptr()
3298 return (&vmxctx->guest_r12); in vmxctx_regptr()
3300 return (&vmxctx->guest_r13); in vmxctx_regptr()
3302 return (&vmxctx->guest_r14); in vmxctx_regptr()
3304 return (&vmxctx->guest_r15); in vmxctx_regptr()
3306 return (&vmxctx->guest_cr2); in vmxctx_regptr()
3308 return (&vmxctx->guest_dr0); in vmxctx_regptr()
3310 return (&vmxctx->guest_dr1); in vmxctx_regptr()
3312 return (&vmxctx->guest_dr2); in vmxctx_regptr()
3314 return (&vmxctx->guest_dr3); in vmxctx_regptr()
3316 return (&vmxctx->guest_dr6); in vmxctx_regptr()
3324 vmxctx_getreg(struct vmxctx *vmxctx, int reg, uint64_t *retval) in vmxctx_getreg() argument
3328 if ((regp = vmxctx_regptr(vmxctx, reg)) != NULL) { in vmxctx_getreg()
3336 vmxctx_setreg(struct vmxctx *vmxctx, int reg, uint64_t val) in vmxctx_setreg() argument
3340 if ((regp = vmxctx_regptr(vmxctx, reg)) != NULL) { in vmxctx_setreg()
4148 struct vmxctx *vmxctx; in vmx_vcpu_snapshot() local
4227 vmxctx = &vcpu->ctx; in vmx_vcpu_snapshot()
4228 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rdi, meta, err, done); in vmx_vcpu_snapshot()
4229 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rsi, meta, err, done); in vmx_vcpu_snapshot()
4230 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rdx, meta, err, done); in vmx_vcpu_snapshot()
4231 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rcx, meta, err, done); in vmx_vcpu_snapshot()
4232 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r8, meta, err, done); in vmx_vcpu_snapshot()
4233 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r9, meta, err, done); in vmx_vcpu_snapshot()
4234 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rax, meta, err, done); in vmx_vcpu_snapshot()
4235 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rbx, meta, err, done); in vmx_vcpu_snapshot()
4236 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_rbp, meta, err, done); in vmx_vcpu_snapshot()
4237 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r10, meta, err, done); in vmx_vcpu_snapshot()
4238 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r11, meta, err, done); in vmx_vcpu_snapshot()
4239 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r12, meta, err, done); in vmx_vcpu_snapshot()
4240 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r13, meta, err, done); in vmx_vcpu_snapshot()
4241 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r14, meta, err, done); in vmx_vcpu_snapshot()
4242 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_r15, meta, err, done); in vmx_vcpu_snapshot()
4243 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_cr2, meta, err, done); in vmx_vcpu_snapshot()
4244 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr0, meta, err, done); in vmx_vcpu_snapshot()
4245 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr1, meta, err, done); in vmx_vcpu_snapshot()
4246 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr2, meta, err, done); in vmx_vcpu_snapshot()
4247 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr3, meta, err, done); in vmx_vcpu_snapshot()
4248 SNAPSHOT_VAR_OR_LEAVE(vmxctx->guest_dr6, meta, err, done); in vmx_vcpu_snapshot()