Lines Matching defs:vmexit
783 svm_handle_io(struct svm_vcpu *vcpu, struct vm_exit *vmexit)
809 vmexit->exitcode = VM_EXITCODE_INOUT;
810 vmexit->u.inout.in = (info1 & BIT(0)) ? 1 : 0;
811 vmexit->u.inout.string = inout_string;
812 vmexit->u.inout.rep = (info1 & BIT(3)) ? 1 : 0;
813 vmexit->u.inout.bytes = (info1 >> 4) & 0x7;
814 vmexit->u.inout.port = (uint16_t)(info1 >> 16);
815 vmexit->u.inout.eax = (uint32_t)(state->rax);
818 vmexit->exitcode = VM_EXITCODE_INOUT_STR;
819 vis = &vmexit->u.inout_str;
823 vis->index = svm_inout_str_index(regs, vmexit->u.inout.in);
824 vis->count = svm_inout_str_count(regs, vmexit->u.inout.rep);
826 svm_inout_str_seginfo(vcpu, info1, vmexit->u.inout.in, vis);
864 svm_handle_inst_emul(struct vmcb *vmcb, uint64_t gpa, struct vm_exit *vmexit)
873 paging = &vmexit->u.inst_emul.paging;
875 vmexit->exitcode = VM_EXITCODE_INST_EMUL;
876 vmexit->u.inst_emul.gpa = gpa;
877 vmexit->u.inst_emul.gla = VIE_INVALID_GLA;
885 vmexit->u.inst_emul.cs_base = seg.base;
886 vmexit->u.inst_emul.cs_d = 0;
890 vmexit->u.inst_emul.cs_base = seg.base;
895 vmexit->u.inst_emul.cs_d = (seg.attrib & VMCB_CS_ATTRIB_D) ?
899 vmexit->u.inst_emul.cs_base = 0;
900 vmexit->u.inst_emul.cs_d = 0;
914 vie_init(&vmexit->u.inst_emul.vie, inst_bytes, inst_len);
1332 struct vm_exit *vmexit)
1353 vmexit->exitcode = VM_EXITCODE_BOGUS;
1354 vmexit->rip = state->rip;
1355 vmexit->inst_length = nrip_valid(code) ? ctrl->nrip - state->rip : 0;
1365 vm_exit_svm(vmexit, code, info1, info2);
1372 KASSERT(vmexit->inst_length >= 0 && vmexit->inst_length <= 15,
1374 vmexit->inst_length, code, info1, info2));
1384 vmexit->inst_length = 0;
1433 * and bounce vmexit to userland.
1441 vmexit->exitcode = VM_EXITCODE_DB;
1442 vmexit->u.dbg.trace_trap = 1;
1443 vmexit->u.dbg.pushf_intercept = 0;
1475 vmexit->u.dbg.pushf_intercept = 1;
1476 vmexit->u.dbg.tf_shadow_val =
1479 &vmexit->u.dbg.paging);
1494 vmexit->exitcode = VM_EXITCODE_BPT;
1495 vmexit->u.bpt.inst_length = vmexit->inst_length;
1496 vmexit->inst_length = 0;
1513 vmexit->inst_length, idtvec);
1514 vmexit->inst_length = 0;
1523 KASSERT(vmexit->inst_length == 0,
1526 vmexit->inst_length, idtvec));
1548 vmexit->exitcode = VM_EXITCODE_WRMSR;
1549 vmexit->u.msr.code = ecx;
1550 vmexit->u.msr.wval = val;
1554 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
1561 vmexit->exitcode = VM_EXITCODE_RDMSR;
1562 vmexit->u.msr.code = ecx;
1566 KASSERT(vmexit->exitcode != VM_EXITCODE_BOGUS,
1572 handled = svm_handle_io(vcpu, vmexit);
1583 vmexit->exitcode = VM_EXITCODE_HLT;
1584 vmexit->u.hlt.rflags = state->rflags;
1587 vmexit->exitcode = VM_EXITCODE_PAUSE;
1597 vmexit->exitcode = VM_EXITCODE_PAGING;
1598 vmexit->u.paging.gpa = info2;
1599 vmexit->u.paging.fault_type = npf_fault_type(info1);
1605 svm_handle_inst_emul(vmcb, info2, vmexit);
1613 vmexit->exitcode = VM_EXITCODE_MONITOR;
1616 vmexit->exitcode = VM_EXITCODE_MWAIT;
1624 vmexit->inst_length = 0;
1643 vmexit->inst_length = 0;
1677 SVM_CTR4(vcpu, "%s %s vmexit at %#lx/%d",
1679 vmexit->rip, vmexit->inst_length);
1682 vmexit->rip += vmexit->inst_length;
1683 vmexit->inst_length = 0;
1684 state->rip = vmexit->rip;
1686 if (vmexit->exitcode == VM_EXITCODE_BOGUS) {
1691 vm_exit_svm(vmexit, code, info1, info2);
2113 struct vm_exit *vmexit;
2123 vmexit = vm_exitinfo(vcpu->vcpu);
2246 handled = svm_vmexit(svm_sc, vcpu, vmexit);