Lines Matching defs:vmexit

1139 	VCPU_CTR3(vmx->vm, vcpu, "%s %s vmexit at 0x%0lx",
1149 VCPU_CTR1(vmx->vm, vcpu, "astpending vmexit at 0x%0lx", rip);
1561 vmx_emulate_xsetbv(struct vmx *vmx, int vcpu, struct vm_exit *vmexit)
1942 vmexit_inst_emul(struct vm_exit *vmexit, uint64_t gpa, uint64_t gla)
1947 paging = &vmexit->u.inst_emul.paging;
1949 vmexit->exitcode = VM_EXITCODE_INST_EMUL;
1950 vmexit->inst_length = 0;
1951 vmexit->u.inst_emul.gpa = gpa;
1952 vmexit->u.inst_emul.gla = gla;
1956 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
1957 vmexit->u.inst_emul.cs_d = 0;
1961 vmexit->u.inst_emul.cs_base = vmcs_read(VMCS_GUEST_CS_BASE);
1963 vmexit->u.inst_emul.cs_d = SEG_DESC_DEF32(csar);
1966 vmexit->u.inst_emul.cs_base = 0;
1967 vmexit->u.inst_emul.cs_d = 0;
1970 vie_init(&vmexit->u.inst_emul.vie, NULL, 0);
2114 vmx_handle_apic_access(struct vmx *vmx, int vcpuid, struct vm_exit *vmexit)
2122 qual = vmexit->u.vmx.exit_qualification;
2164 vmexit_inst_emul(vmexit, DEFAULT_APIC_BASE + offset,
2240 vmx_exit_process(struct vmx *vmx, int vcpu, struct vm_exit *vmexit)
2258 qual = vmexit->u.vmx.exit_qualification;
2259 reason = vmexit->u.vmx.exit_reason;
2260 vmexit->exitcode = VM_EXITCODE_BOGUS;
2263 SDT_PROBE3(vmm, vmx, exit, entry, vmx, vcpu, vmexit);
2323 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2329 ts = &vmexit->u.task_switch;
2358 vmexit->inst_length = 0;
2365 vmexit->exitcode = VM_EXITCODE_TASK_SWITCH;
2366 SDT_PROBE4(vmm, vmx, exit, taskswitch, vmx, vcpu, vmexit, ts);
2374 SDT_PROBE4(vmm, vmx, exit, craccess, vmx, vcpu, vmexit, qual);
2392 SDT_PROBE4(vmm, vmx, exit, rdmsr, vmx, vcpu, vmexit, ecx);
2395 vmexit->exitcode = VM_EXITCODE_RDMSR;
2396 vmexit->u.msr.code = ecx;
2401 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2413 SDT_PROBE5(vmm, vmx, exit, wrmsr, vmx, vmexit, vcpu, ecx,
2418 vmexit->exitcode = VM_EXITCODE_WRMSR;
2419 vmexit->u.msr.code = ecx;
2420 vmexit->u.msr.wval = (uint64_t)edx << 32 | eax;
2425 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
2431 SDT_PROBE3(vmm, vmx, exit, halt, vmx, vcpu, vmexit);
2432 vmexit->exitcode = VM_EXITCODE_HLT;
2433 vmexit->u.hlt.rflags = vmcs_read(VMCS_GUEST_RFLAGS);
2435 vmexit->u.hlt.intr_status =
2438 vmexit->u.hlt.intr_status = 0;
2442 SDT_PROBE3(vmm, vmx, exit, mtrap, vmx, vcpu, vmexit);
2443 vmexit->exitcode = VM_EXITCODE_MTRAP;
2444 vmexit->inst_length = 0;
2448 SDT_PROBE3(vmm, vmx, exit, pause, vmx, vcpu, vmexit);
2449 vmexit->exitcode = VM_EXITCODE_PAUSE;
2453 SDT_PROBE3(vmm, vmx, exit, intrwindow, vmx, vcpu, vmexit);
2468 vmx, vcpu, vmexit, intr_info);
2488 SDT_PROBE3(vmm, vmx, exit, nmiwindow, vmx, vcpu, vmexit);
2497 vmexit->exitcode = VM_EXITCODE_INOUT;
2498 vmexit->u.inout.bytes = (qual & 0x7) + 1;
2499 vmexit->u.inout.in = in = (qual & 0x8) ? 1 : 0;
2500 vmexit->u.inout.string = (qual & 0x10) ? 1 : 0;
2501 vmexit->u.inout.rep = (qual & 0x20) ? 1 : 0;
2502 vmexit->u.inout.port = (uint16_t)(qual >> 16);
2503 vmexit->u.inout.eax = (uint32_t)(vmxctx->guest_rax);
2504 if (vmexit->u.inout.string) {
2506 vmexit->exitcode = VM_EXITCODE_INOUT_STR;
2507 vis = &vmexit->u.inout_str;
2516 SDT_PROBE3(vmm, vmx, exit, inout, vmx, vcpu, vmexit);
2520 SDT_PROBE3(vmm, vmx, exit, cpuid, vmx, vcpu, vmexit);
2575 vmcs_write(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length);
2586 vmx, vcpu, vmexit, intr_vec, errcode);
2602 vmexit->exitcode = VM_EXITCODE_PAGING;
2603 vmexit->inst_length = 0;
2604 vmexit->u.paging.gpa = gpa;
2605 vmexit->u.paging.fault_type = ept_fault_type(qual);
2608 vmx, vcpu, vmexit, gpa, qual);
2610 vmexit_inst_emul(vmexit, gpa, vmcs_gla());
2613 vmx, vcpu, vmexit, gpa);
2628 vmexit->exitcode = VM_EXITCODE_IOAPIC_EOI;
2629 vmexit->u.ioapic_eoi.vector = qual & 0xFF;
2630 SDT_PROBE3(vmm, vmx, exit, eoi, vmx, vcpu, vmexit);
2631 vmexit->inst_length = 0; /* trap-like */
2634 SDT_PROBE3(vmm, vmx, exit, apicaccess, vmx, vcpu, vmexit);
2635 handled = vmx_handle_apic_access(vmx, vcpu, vmexit);
2642 vmexit->inst_length = 0;
2645 vmx, vcpu, vmexit, vlapic);
2649 SDT_PROBE3(vmm, vmx, exit, xsetbv, vmx, vcpu, vmexit);
2650 handled = vmx_emulate_xsetbv(vmx, vcpu, vmexit);
2653 SDT_PROBE3(vmm, vmx, exit, monitor, vmx, vcpu, vmexit);
2654 vmexit->exitcode = VM_EXITCODE_MONITOR;
2657 SDT_PROBE3(vmm, vmx, exit, mwait, vmx, vcpu, vmexit);
2658 vmexit->exitcode = VM_EXITCODE_MWAIT;
2663 vmexit->inst_length = 0;
2676 SDT_PROBE3(vmm, vmx, exit, vminsn, vmx, vcpu, vmexit);
2677 vmexit->exitcode = VM_EXITCODE_VMINSN;
2681 vmx, vcpu, vmexit, reason);
2695 * guest rip in the VMCS and in 'vmexit'.
2697 vmexit->rip += vmexit->inst_length;
2698 vmexit->inst_length = 0;
2699 vmcs_write(VMCS_GUEST_RIP, vmexit->rip);
2701 if (vmexit->exitcode == VM_EXITCODE_BOGUS) {
2706 vmexit->exitcode = VM_EXITCODE_VMX;
2707 vmexit->u.vmx.status = VM_SUCCESS;
2708 vmexit->u.vmx.inst_type = 0;
2709 vmexit->u.vmx.inst_error = 0;
2719 vmx, vcpu, vmexit, handled);
2724 vmx_exit_inst_error(struct vmxctx *vmxctx, int rc, struct vm_exit *vmexit)
2731 vmexit->inst_length = 0;
2732 vmexit->exitcode = VM_EXITCODE_VMX;
2733 vmexit->u.vmx.status = vmxctx->inst_fail_status;
2734 vmexit->u.vmx.inst_error = vmcs_instruction_error();
2735 vmexit->u.vmx.exit_reason = ~0;
2736 vmexit->u.vmx.exit_qualification = ~0;
2742 vmexit->u.vmx.inst_type = rc;
2758 vmx_exit_handle_nmi(struct vmx *vmx, int vcpuid, struct vm_exit *vmexit)
2764 if (vmexit->u.vmx.exit_reason != EXIT_REASON_EXCEPTION)
2855 struct vm_exit *vmexit;
2866 vmexit = vm_exitinfo(vm, vcpu);
2981 vmexit->rip = rip = vmcs_guest_rip();
2982 vmexit->inst_length = vmexit_instruction_length();
2983 vmexit->u.vmx.exit_reason = exit_reason = vmcs_exit_reason();
2984 vmexit->u.vmx.exit_qualification = vmcs_exit_qualification();
2990 vmx_exit_handle_nmi(vmx, vcpu, vmexit);
2992 handled = vmx_exit_process(vmx, vcpu, vmexit);
2995 vmx_exit_inst_error(vmxctx, rc, vmexit);
2999 rip = vmexit->rip;
3006 if ((handled && vmexit->exitcode != VM_EXITCODE_BOGUS) ||
3007 (!handled && vmexit->exitcode == VM_EXITCODE_BOGUS)) {
3009 handled, vmexit->exitcode);
3016 vmexit->exitcode);
3540 struct vm_exit *vmexit;
3543 vmexit = vm_exitinfo(vlapic->vm, vlapic->vcpuid);
3544 KASSERT(vmexit->exitcode == VM_EXITCODE_HLT,
3546 rvi = vmexit->u.hlt.intr_status & APIC_TPR_INT;