Changeset 78878 in vbox
- Timestamp:
- May 30, 2019 12:01:19 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r78877 r78878 12665 12665 case VMX_EXIT_WBINVD: return hmR0VmxExitWbinvdNested(pVCpu, pVmxTransient); 12666 12666 case VMX_EXIT_MTF: return hmR0VmxExitMtfNested(pVCpu, pVmxTransient); 12667 12668 case VMX_EXIT_APIC_ACCESS: 12667 case VMX_EXIT_APIC_ACCESS: return hmR0VmxExitApicAccessNested(pVCpu, pVmxTransient); 12668 12669 /** @todo NSTVMX: APIC-access, Xcpt or NMI, Mov CRx. */ 12669 12670 case VMX_EXIT_XCPT_OR_NMI: 12670 12671 { 12671 /** @todo NSTVMX: APIC-access, Xcpt or NMI, Mov CRx. */12672 12672 return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient); 12673 12673 } … … 16312 16312 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 16313 16313 16314 /* 16315 * All VMCS controls that cause APIC-access VM-exits (Virtualize APIC access, 16316 * virtual-interrupt delivery, APIC-register virtualization) are all taken 16317 * directly from the guest-hypervisor. So there should be no need to re-verify 16318 * them here. 16319 * 16320 * Only the VM-exit qualification is relevant here. 16321 */ 16314 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_VIRT_APIC_ACCESS)); 16322 16315 int rc = hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 16323 16316 AssertRCReturn(rc, rc); 16317 16324 16318 return IEMExecVmxVmexit(pVCpu, pVmxTransient->uExitReason, pVmxTransient->uExitQual); 16325 16319 } … … 16335 16329 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 16336 16330 16337 if (CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_DESC_TABLE_EXIT)) 16338 { 16339 int rc = hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 16340 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16341 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16342 AssertRCReturn(rc, rc); 16343 16344 VMXVEXITINFO ExitInfo; 16345 RT_ZERO(ExitInfo); 16346 ExitInfo.cbInstr = pVmxTransient->cbInstr; 16347 ExitInfo.u64Qual = pVmxTransient->uExitQual; 16348 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 16349 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 16350 } 16351 return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient); 16331 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_DESC_TABLE_EXIT)); 16332 int rc = hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 16333 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16334 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16335 AssertRCReturn(rc, rc); 16336 16337 VMXVEXITINFO ExitInfo; 16338 RT_ZERO(ExitInfo); 16339 ExitInfo.cbInstr = pVmxTransient->cbInstr; 16340 ExitInfo.u64Qual = pVmxTransient->uExitQual; 16341 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 16342 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 16352 16343 } 16353 16344
Note:
See TracChangeset
for help on using the changeset viewer.