Changeset 78872 in vbox for trunk/src/VBox/VMM
- Timestamp:
- May 30, 2019 11:17:41 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 130984
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r78839 r78872 429 429 //static FNVMXEXITHANDLER hmR0VmxExitVmptrld; 430 430 //static FNVMXEXITHANDLER hmR0VmxExitVmptrst; 431 //static FNVMXEXITHANDLER hmR0VmxExitVmread;431 static FNVMXEXITHANDLER hmR0VmxExitVmreadNested; 432 432 //static FNVMXEXITHANDLER hmR0VmxExitVmresume; 433 433 //static FNVMXEXITHANDLER hmR0VmxExitVmwrite; … … 12696 12696 12697 12697 case VMX_EXIT_RDPMC: return hmR0VmxExitRdpmcNested(pVCpu, pVmxTransient); 12698 case VMX_EXIT_VMREAD: 12698 case VMX_EXIT_VMREAD: return hmR0VmxExitVmreadNested(pVCpu, pVmxTransient); 12699 12699 case VMX_EXIT_VMWRITE: 12700 12700 … … 15890 15890 15891 15891 /** 15892 * Nested-guest VM-exit handler for VMREAD (VMX_EXIT_VMREAD). Unconditional VM-exit. 15893 */ 15894 HMVMX_EXIT_DECL hmR0VmxExitVmreadNested(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 15895 { 15896 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 15897 15898 int rc = hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 15899 AssertRCReturn(rc, rc); 15900 15901 uint8_t const iGReg = pVmxTransient->ExitInstrInfo.VmreadVmwrite.iReg2; 15902 Assert(iGReg < RT_ELEMENTS(pVCpu->cpum.GstCtx.aGRegs)); 15903 uint64_t u64FieldEnc = pVCpu->cpum.GstCtx.aGRegs[iGReg].u64; 15904 15905 HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_EFER); 15906 if (!CPUMIsGuestInLongModeEx(&pVCpu->cpum.GstCtx)) 15907 u64FieldEnc &= UINT64_C(0xffffffff); 15908 15909 if (CPUMIsGuestVmxVmreadVmwriteInterceptSet(pVCpu, pVmxTransient->uExitReason, u64FieldEnc)) 15910 { 15911 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 15912 rc |= hmR0VmxReadExitQualVmcs(pVCpu, pVmxTransient); 15913 AssertRCReturn(rc, rc); 15914 15915 VMXVEXITINFO ExitInfo; 15916 RT_ZERO(ExitInfo); 15917 ExitInfo.uReason = pVmxTransient->uExitReason; 15918 ExitInfo.cbInstr = pVmxTransient->cbInstr; 15919 ExitInfo.u64Qual = pVmxTransient->uExitQual; 15920 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 15921 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 15922 } 15923 return hmR0VmxExitVmread(pVCpu, pVmxTransient); 15924 } 15925 15926 15927 /** 15892 15928 * Nested-guest VM-exit handler for RDTSC (VMX_EXIT_RDTSC). Conditional VM-exit. 15893 15929 */ … … 16103 16139 AssertRCReturn(rc, rc); 16104 16140 16105 /* Make sure we don't use stale VMX-transient info. */16141 /* Make sure we don't use stale/uninitialized VMX-transient info. below. */ 16106 16142 pVmxTransient->ExitInstrInfo.u = 0; 16107 16143 pVmxTransient->uGuestLinearAddr = 0;
Note:
See TracChangeset
for help on using the changeset viewer.