Changeset 78622 in vbox
- Timestamp:
- May 21, 2019 9:03:53 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r78615 r78622 12577 12577 } 12578 12578 12579 case VMX_EXIT_HLT: 12580 { 12581 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 12582 AssertRCReturn(rc, rc); 12583 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_HLT_EXIT)) 12584 rcStrict = IEMExecVmxVmexitInstr(pVCpu, uExitReason, pVmxTransient->cbInstr); 12585 else 12586 rcStrict = hmR0VmxExitHlt(pVCpu, pVmxTransient); 12587 break; 12588 } 12589 12579 12590 case VMX_EXIT_RDTSC: 12580 12591 { … … 12652 12663 } 12653 12664 12665 case VMX_EXIT_INVLPG: 12666 { 12667 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_INVLPG_EXIT)) 12668 { 12669 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 12670 rc |= hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 12671 AssertRCReturn(rc, rc); 12672 12673 VMXVEXITINFO ExitInfo; 12674 RT_ZERO(ExitInfo); 12675 ExitInfo.uReason = uExitReason; 12676 ExitInfo.cbInstr = pVmxTransient->cbInstr; 12677 ExitInfo.u64Qual = pVmxTransient->uExitQual; 12678 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 12679 } 12680 else 12681 rcStrict = hmR0VmxExitInvlpg(pVCpu, pVmxTransient); 12682 break; 12683 } 12684 12685 case VMX_EXIT_INVPCID: 12686 { 12687 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_INVLPG_EXIT)) 12688 { 12689 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 12690 rc |= hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 12691 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 12692 AssertRCReturn(rc, rc); 12693 12694 VMXVEXITINFO ExitInfo; 12695 RT_ZERO(ExitInfo); 12696 ExitInfo.uReason = uExitReason; 12697 ExitInfo.cbInstr = pVmxTransient->cbInstr; 12698 ExitInfo.u64Qual = pVmxTransient->uExitQual; 12699 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 12700 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 12701 } 12702 else 12703 rcStrict = hmR0VmxExitInvpcid(pVCpu, pVmxTransient); 12704 break; 12705 } 12706 12654 12707 case VMX_EXIT_APIC_ACCESS: 12655 12708 case VMX_EXIT_XCPT_OR_NMI: … … 12701 12754 } 12702 12755 12756 case VMX_EXIT_WBINVD: 12757 { 12758 if (CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_WBINVD_EXIT)) 12759 { 12760 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 12761 AssertRCReturn(rc, rc); 12762 rcStrict = IEMExecVmxVmexitInstr(pVCpu, uExitReason, pVmxTransient->cbInstr); 12763 } 12764 else 12765 rcStrict = hmR0VmxExitInvpcid(pVCpu, pVmxTransient); 12766 break; 12767 } 12768 12703 12769 case VMX_EXIT_MOV_DRX: 12704 case VMX_EXIT_HLT:12705 case VMX_EXIT_INVLPG:12706 12770 case VMX_EXIT_RSM: 12707 12771 case VMX_EXIT_MTF: … … 12709 12773 case VMX_EXIT_GDTR_IDTR_ACCESS: 12710 12774 case VMX_EXIT_LDTR_TR_ACCESS: 12711 case VMX_EXIT_WBINVD:12712 12775 case VMX_EXIT_RDRAND: 12713 case VMX_EXIT_INVPCID:12714 12776 case VMX_EXIT_RDPMC: 12715 12777 case VMX_EXIT_VMREAD:
Note:
See TracChangeset
for help on using the changeset viewer.