Lines Matching defs:vmexit

1269 	VMX_CTR3(vcpu, "%s %s vmexit at 0x%0lx",
1277 VMX_CTR1(vcpu, "astpending vmexit at 0x%0lx", rip);
1696 struct vm_exit *vmexit)
2082 vmexit_inst_emul(struct vm_exit *vmexit, uint64_t gpa, uint64_t gla)
2087 paging = &vmexit->u.inst_emul.paging;
2089 vmexit->exitcode = VM_EXITCODE_INST_EMUL;
2090 vmexit->inst_length = 0;
2091 vmexit->u.inst_emul.gpa = gpa;
2092 vmexit->u.inst_emul.gla = gla;
2096 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
2097 vmexit->u.inst_emul.cs_d = 0;
2101 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
2103 vmexit->u.inst_emul.cs_d = SEG_DESC_DEF32(csar);
2106 vmexit->u.inst_emul.cs_base = 0;
2107 vmexit->u.inst_emul.cs_d = 0;
2110 vie_init(&vmexit->u.inst_emul.vie, NULL, 0);
2254 vmx_handle_apic_access(struct vmx_vcpu *vcpu, struct vm_exit *vmexit)
2262 qual = vmexit->u.vmx.exit_qualification;
2304 vmexit_inst_emul(vmexit, DEFAULT_APIC_BASE + offset,
2380 vmx_exit_process(struct vmx *vmx, struct vmx_vcpu *vcpu, struct vm_exit *vmexit)
2404 qual = vmexit->u.vmx.exit_qualification;
2405 reason = vmexit->u.vmx.exit_reason;
2406 vmexit->exitcode = VM_EXITCODE_BOGUS;
2409 SDT_PROBE3(vmm, vmx, exit, entry, vmx, vcpuid, vmexit);
2469 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2475 ts = &vmexit->u.task_switch;
2504 vmexit->inst_length = 0;
2511 vmexit->exitcode = VM_EXITCODE_TASK_SWITCH;
2512 SDT_PROBE4(vmm, vmx, exit, taskswitch, vmx, vcpuid, vmexit, ts);
2520 SDT_PROBE4(vmm, vmx, exit, craccess, vmx, vcpuid, vmexit, qual);
2538 SDT_PROBE4(vmm, vmx, exit, rdmsr, vmx, vcpuid, vmexit, ecx);
2541 vmexit->exitcode = VM_EXITCODE_RDMSR;
2542 vmexit->u.msr.code = ecx;
2547 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2559 SDT_PROBE5(vmm, vmx, exit, wrmsr, vmx, vmexit, vcpuid, ecx,
2564 vmexit->exitcode = VM_EXITCODE_WRMSR;
2565 vmexit->u.msr.code = ecx;
2566 vmexit->u.msr.wval = (uint64_t)edx << 32 | eax;
2571 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2577 SDT_PROBE3(vmm, vmx, exit, halt, vmx, vcpuid, vmexit);
2578 vmexit->exitcode = VM_EXITCODE_HLT;
2579 vmexit->u.hlt.rflags = vmcs_read(VMCS_GUEST_RFLAGS);
2581 vmexit->u.hlt.intr_status =
2584 vmexit->u.hlt.intr_status = 0;
2588 SDT_PROBE3(vmm, vmx, exit, mtrap, vmx, vcpuid, vmexit);
2589 vmexit->exitcode = VM_EXITCODE_MTRAP;
2590 vmexit->inst_length = 0;
2594 SDT_PROBE3(vmm, vmx, exit, pause, vmx, vcpuid, vmexit);
2595 vmexit->exitcode = VM_EXITCODE_PAUSE;
2599 SDT_PROBE3(vmm, vmx, exit, intrwindow, vmx, vcpuid, vmexit);
2614 vmx, vcpuid, vmexit, intr_info);
2634 SDT_PROBE3(vmm, vmx, exit, nmiwindow, vmx, vcpuid, vmexit);
2643 vmexit->exitcode = VM_EXITCODE_INOUT;
2644 vmexit->u.inout.bytes = (qual & 0x7) + 1;
2645 vmexit->u.inout.in = in = (qual & 0x8) ? 1 : 0;
2646 vmexit->u.inout.string = (qual & 0x10) ? 1 : 0;
2647 vmexit->u.inout.rep = (qual & 0x20) ? 1 : 0;
2648 vmexit->u.inout.port = (uint16_t)(qual >> 16);
2649 vmexit->u.inout.eax = (uint32_t)(vmxctx->guest_rax);
2650 if (vmexit->u.inout.string) {
2652 vmexit->exitcode = VM_EXITCODE_INOUT_STR;
2653 vis = &vmexit->u.inout_str;
2662 SDT_PROBE3(vmm, vmx, exit, inout, vmx, vcpuid, vmexit);
2666 SDT_PROBE3(vmm, vmx, exit, cpuid, vmx, vcpuid, vmexit);
2714 vmexit->exitcode = VM_EXITCODE_BPT;
2715 vmexit->u.bpt.inst_length = vmexit->inst_length;
2716 vmexit->inst_length = 0;
2733 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2744 vmx, vcpuid, vmexit, intr_vec, errcode);
2760 vmexit->exitcode = VM_EXITCODE_PAGING;
2761 vmexit->inst_length = 0;
2762 vmexit->u.paging.gpa = gpa;
2763 vmexit->u.paging.fault_type = ept_fault_type(qual);
2766 vmx, vcpuid, vmexit, gpa, qual);
2768 vmexit_inst_emul(vmexit, gpa, vmcs_gla());
2771 vmx, vcpuid, vmexit, gpa);
2786 vmexit->exitcode = VM_EXITCODE_IOAPIC_EOI;
2787 vmexit->u.ioapic_eoi.vector = qual & 0xFF;
2788 SDT_PROBE3(vmm, vmx, exit, eoi, vmx, vcpuid, vmexit);
2789 vmexit->inst_length = 0; /* trap-like */
2792 SDT_PROBE3(vmm, vmx, exit, apicaccess, vmx, vcpuid, vmexit);
2793 handled = vmx_handle_apic_access(vcpu, vmexit);
2800 vmexit->inst_length = 0;
2803 vmx, vcpuid, vmexit, vlapic);
2807 SDT_PROBE3(vmm, vmx, exit, xsetbv, vmx, vcpuid, vmexit);
2808 handled = vmx_emulate_xsetbv(vmx, vcpu, vmexit);
2811 SDT_PROBE3(vmm, vmx, exit, monitor, vmx, vcpuid, vmexit);
2812 vmexit->exitcode = VM_EXITCODE_MONITOR;
2815 SDT_PROBE3(vmm, vmx, exit, mwait, vmx, vcpuid, vmexit);
2816 vmexit->exitcode = VM_EXITCODE_MWAIT;
2821 vmexit->inst_length = 0;
2834 SDT_PROBE3(vmm, vmx, exit, vminsn, vmx, vcpuid, vmexit);
2835 vmexit->exitcode = VM_EXITCODE_VMINSN;
2844 vmx, vcpuid, vmexit, reason);
2858 * guest rip in the VMCS and in 'vmexit'.
2860 vmexit->rip += vmexit->inst_length;
2861 vmexit->inst_length = 0;
2862 vmcs_write(VMCS_GUEST_RIP, vmexit->rip);
2864 if (vmexit->exitcode == VM_EXITCODE_BOGUS) {
2869 vmexit->exitcode = VM_EXITCODE_VMX;
2870 vmexit->u.vmx.status = VM_SUCCESS;
2871 vmexit->u.vmx.inst_type = 0;
2872 vmexit->u.vmx.inst_error = 0;
2882 vmx, vcpuid, vmexit, handled);
2887 vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit)
2894 vmexit->inst_length = 0;
2895 vmexit->exitcode = VM_EXITCODE_VMX;
2896 vmexit->u.vmx.status = vmxctx->inst_fail_status;
2897 vmexit->u.vmx.inst_error = vmcs_instruction_error();
2898 vmexit->u.vmx.exit_reason = ~0;
2899 vmexit->u.vmx.exit_qualification = ~0;
2904 vmexit->u.vmx.inst_type = rc;
2920 vmx_exit_handle_nmi(struct vmx_vcpu *vcpu, struct vm_exit *vmexit)
2926 if (vmexit->u.vmx.exit_reason != EXIT_REASON_EXCEPTION)
3041 struct vm_exit *vmexit;
3052 vmexit = vm_exitinfo(vcpu->vcpu);
3200 vmexit->rip = rip = vmcs_guest_rip();
3201 vmexit->inst_length = vmexit_instruction_length();
3202 vmexit->u.vmx.exit_reason = exit_reason = vmcs_exit_reason();
3203 vmexit->u.vmx.exit_qualification = vmcs_exit_qualification();
3209 vmx_exit_handle_nmi(vcpu, vmexit);
3211 handled = vmx_exit_process(vmx, vcpu, vmexit);
3214 vmx_exit_inst_error(vmxctx, rc, vmexit);
3218 rip = vmexit->rip;
3225 if ((handled && vmexit->exitcode != VM_EXITCODE_BOGUS) ||
3226 (!handled && vmexit->exitcode == VM_EXITCODE_BOGUS)) {
3228 handled, vmexit->exitcode);
3232 vmexit->exitcode);
3815 struct vm_exit *vmexit;
3835 vmexit = vm_exitinfo(vlapic->vcpu);
3836 KASSERT(vmexit->exitcode == VM_EXITCODE_HLT,
3838 rvi = vmexit->u.hlt.intr_status & APIC_TPR_INT;