Changeset 92472 in vbox
- Timestamp:
- Nov 17, 2021 9:59:58 AM (3 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMAll/PGMAllGstSlatEpt.cpp.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllGstSlatEpt.cpp.h
r92426 r92472 17 17 18 18 #if PGM_GST_TYPE == PGM_TYPE_EPT 19 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, int iLevel) 19 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, uint64_t uEntry, uint8_t uLevel) 20 { 21 pWalk->fNotPresent = true; 22 pWalk->uLevel = uLevel; 23 static PGMSLATFAIL const s_aEptViolation[] = { PGMSLATFAIL_EPT_VIOLATION, PGMSLATFAIL_EPT_VIOLATION_CONVERTIBLE }; 24 uint8_t const fEptVeSupported = pVCpu->CTX_SUFF(pVM)->cpum.ro.GuestFeatures.fVmxEptXcptVe; 25 uint8_t const idxViolationType = fEptVeSupported & !RT_BF_GET(uEntry, VMX_BF_EPT_PT_SUPPRESS_VE); 26 pWalk->enmSlatFail = s_aEptViolation[idxViolationType]; 27 return VERR_PAGE_TABLE_NOT_PRESENT; 28 } 29 30 31 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnBadPhysAddr)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, uint8_t uLevel, int rc) 32 { 33 AssertMsg(rc == VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS, ("%Rrc\n", rc)); NOREF(rc); NOREF(pVCpu); 34 pWalk->fBadPhysAddr = true; 35 pWalk->uLevel = uLevel; 36 return VERR_PAGE_TABLE_NOT_PRESENT; 37 } 38 39 40 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnRsvdError)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, uint8_t uLevel) 20 41 { 21 42 NOREF(pVCpu); 22 pWalk->fNotPresent = true; 23 pWalk->uLevel = (uint8_t)iLevel; 24 return VERR_PAGE_TABLE_NOT_PRESENT; 25 } 26 27 28 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnBadPhysAddr)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, int iLevel, int rc) 29 { 30 AssertMsg(rc == VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS, ("%Rrc\n", rc)); NOREF(rc); NOREF(pVCpu); 31 pWalk->fBadPhysAddr = true; 32 pWalk->uLevel = (uint8_t)iLevel; 33 return VERR_PAGE_TABLE_NOT_PRESENT; 34 } 35 36 37 DECLINLINE(int) PGM_GST_SLAT_NAME_EPT(WalkReturnRsvdError)(PVMCPUCC pVCpu, PPGMPTWALK pWalk, int iLevel) 38 { 39 NOREF(pVCpu); 40 pWalk->fRsvdError = true; 41 pWalk->uLevel = (uint8_t)iLevel; 43 pWalk->fRsvdError = true; 44 pWalk->uLevel = uLevel; 42 45 return VERR_PAGE_TABLE_NOT_PRESENT; 43 46 } … … 94 97 95 98 if (GST_IS_PGENTRY_PRESENT(pVCpu, Pml4e)) { /* probable */ } 96 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, 4);99 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, Pml4e.u, 4); 97 100 98 101 if (RT_LIKELY(GST_IS_PML4E_VALID(pVCpu, Pml4e))) { /* likely */ } … … 122 125 123 126 if (GST_IS_PGENTRY_PRESENT(pVCpu, Pdpte)) { /* probable */ } 124 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, 3);127 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, Pdpte.u, 3); 125 128 126 129 /* The order of the following 2 "if" statements matter. */ … … 171 174 172 175 if (GST_IS_PGENTRY_PRESENT(pVCpu, Pde)) { /* probable */ } 173 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, 2);176 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, Pde.u, 2); 174 177 175 178 if ((Pde.u & X86_PDE_PS) && GST_IS_PSE_ACTIVE(pVCpu)) … … 226 229 227 230 if (GST_IS_PGENTRY_PRESENT(pVCpu, Pte)) { /* probable */ } 228 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, 1);231 else return PGM_GST_SLAT_NAME_EPT(WalkReturnNotPresent)(pVCpu, pWalk, Pte.u, 1); 229 232 230 233 if (RT_LIKELY(GST_IS_PTE_VALID(pVCpu, Pte))) { /* likely */ }
Note:
See TracChangeset
for help on using the changeset viewer.

