Lines Matching refs:vmexit

990 	VCPU_CTR3(vmx->vm, vcpu, "%s %s vmexit at 0x%0lx",
1000 VCPU_CTR1(vmx->vm, vcpu, "astpending vmexit at 0x%0lx", rip);
1412 vmx_emulate_xsetbv(struct vmx *vmx, int vcpu, struct vm_exit *vmexit)
1793 vmexit_inst_emul(struct vm_exit *vmexit, uint64_t gpa, uint64_t gla)
1798 paging = &vmexit->u.inst_emul.paging;
1800 vmexit->exitcode = VM_EXITCODE_INST_EMUL;
1801 vmexit->inst_length = 0;
1802 vmexit->u.inst_emul.gpa = gpa;
1803 vmexit->u.inst_emul.gla = gla;
1807 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
1808 vmexit->u.inst_emul.cs_d = 0;
1812 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
1814 vmexit->u.inst_emul.cs_d = SEG_DESC_DEF32(csar);
1817 vmexit->u.inst_emul.cs_base = 0;
1818 vmexit->u.inst_emul.cs_d = 0;
1821 vie_init(&vmexit->u.inst_emul.vie, NULL, 0);
1965 vmx_handle_apic_access(struct vmx *vmx, int vcpuid, struct vm_exit *vmexit)
1973 qual = vmexit->u.vmx.exit_qualification;
2015 vmexit_inst_emul(vmexit, DEFAULT_APIC_BASE + offset,
2091 vmx_exit_process(struct vmx *vmx, int vcpu, struct vm_exit *vmexit)
2109 qual = vmexit->u.vmx.exit_qualification;
2110 reason = vmexit->u.vmx.exit_reason;
2111 vmexit->exitcode = VM_EXITCODE_BOGUS;
2173 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2179 ts = &vmexit->u.task_switch;
2208 vmexit->inst_length = 0;
2215 vmexit->exitcode = VM_EXITCODE_TASK_SWITCH;
2242 vmexit->exitcode = VM_EXITCODE_RDMSR;
2243 vmexit->u.msr.code = ecx;
2248 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2263 vmexit->exitcode = VM_EXITCODE_WRMSR;
2264 vmexit->u.msr.code = ecx;
2265 vmexit->u.msr.wval = (uint64_t)edx << 32 | eax;
2270 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2276 vmexit->exitcode = VM_EXITCODE_HLT;
2277 vmexit->u.hlt.rflags = vmcs_read(VMCS_GUEST_RFLAGS);
2281 vmexit->exitcode = VM_EXITCODE_MTRAP;
2282 vmexit->inst_length = 0;
2286 vmexit->exitcode = VM_EXITCODE_PAUSE;
2330 vmexit->exitcode = VM_EXITCODE_INOUT;
2331 vmexit->u.inout.bytes = (qual & 0x7) + 1;
2332 vmexit->u.inout.in = in = (qual & 0x8) ? 1 : 0;
2333 vmexit->u.inout.string = (qual & 0x10) ? 1 : 0;
2334 vmexit->u.inout.rep = (qual & 0x20) ? 1 : 0;
2335 vmexit->u.inout.port = (uint16_t)(qual >> 16);
2336 vmexit->u.inout.eax = (uint32_t)(vmxctx->guest_rax);
2337 if (vmexit->u.inout.string) {
2339 vmexit->exitcode = VM_EXITCODE_INOUT_STR;
2340 vis = &vmexit->u.inout_str;
2406 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2431 vmexit->exitcode = VM_EXITCODE_PAGING;
2432 vmexit->inst_length = 0;
2433 vmexit->u.paging.gpa = gpa;
2434 vmexit->u.paging.fault_type = ept_fault_type(qual);
2437 vmexit_inst_emul(vmexit, gpa, vmcs_gla());
2453 vmexit->exitcode = VM_EXITCODE_IOAPIC_EOI;
2454 vmexit->u.ioapic_eoi.vector = qual & 0xFF;
2455 vmexit->inst_length = 0; /* trap-like */
2458 handled = vmx_handle_apic_access(vmx, vcpu, vmexit);
2465 vmexit->inst_length = 0;
2470 handled = vmx_emulate_xsetbv(vmx, vcpu, vmexit);
2473 vmexit->exitcode = VM_EXITCODE_MONITOR;
2476 vmexit->exitcode = VM_EXITCODE_MWAIT;
2492 * guest rip in the VMCS and in 'vmexit'.
2494 vmexit->rip += vmexit->inst_length;
2495 vmexit->inst_length = 0;
2496 vmcs_write(VMCS_GUEST_RIP, vmexit->rip);
2498 if (vmexit->exitcode == VM_EXITCODE_BOGUS) {
2503 vmexit->exitcode = VM_EXITCODE_VMX;
2504 vmexit->u.vmx.status = VM_SUCCESS;
2505 vmexit->u.vmx.inst_type = 0;
2506 vmexit->u.vmx.inst_error = 0;
2518 vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit)
2525 vmexit->inst_length = 0;
2526 vmexit->exitcode = VM_EXITCODE_VMX;
2527 vmexit->u.vmx.status = vmxctx->inst_fail_status;
2528 vmexit->u.vmx.inst_error = vmcs_instruction_error();
2529 vmexit->u.vmx.exit_reason = ~0;
2530 vmexit->u.vmx.exit_qualification = ~0;
2536 vmexit->u.vmx.inst_type = rc;
2552 vmx_exit_handle_nmi(struct vmx *vmx, int vcpuid, struct vm_exit *vmexit)
2558 if (vmexit->u.vmx.exit_reason != EXIT_REASON_EXCEPTION)
2582 struct vm_exit *vmexit;
2591 vmexit = vm_exitinfo(vm, vcpu);
2674 vmexit->rip = rip = vmcs_guest_rip();
2675 vmexit->inst_length = vmexit_instruction_length();
2676 vmexit->u.vmx.exit_reason = exit_reason = vmcs_exit_reason();
2677 vmexit->u.vmx.exit_qualification = vmcs_exit_qualification();
2683 vmx_exit_handle_nmi(vmx, vcpu, vmexit);
2685 handled = vmx_exit_process(vmx, vcpu, vmexit);
2688 vmx_exit_inst_error(vmxctx, rc, vmexit);
2692 rip = vmexit->rip;
2699 if ((handled && vmexit->exitcode != VM_EXITCODE_BOGUS) ||
2700 (!handled && vmexit->exitcode == VM_EXITCODE_BOGUS)) {
2702 handled, vmexit->exitcode);
2709 vmexit->exitcode);