- Timestamp:
- Oct 22, 2021 4:25:20 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r91904 r91991 185 185 else return PGM_GST_NAME(WalkReturnRsvdError)(pVCpu, pWalk, 4); 186 186 187 /** @todo figure out what this effective stuff is about. */ 188 pWalk->Core.fEffective = fEffective = ((uint32_t)Pml4e.u & (X86_PML4E_RW | X86_PML4E_US | X86_PML4E_PWT | X86_PML4E_PCD | X86_PML4E_A)) 189 | ((uint32_t)(Pml4e.u >> 63) ^ 1) /*NX */; 190 # error "Implement me." 187 Assert(!pVCpu->CTX_SUFF(pVM)->cpum.ro.GuestFeatures.fVmxModeBasedExecuteEpt); 188 uint32_t const fEffectiveEpt = ((uint32_t)Pml4e.u & EPT_PML4E_ATTR_MASK) << PGMPTWALK_EFF_EPT_ATTR_SHIFT; 189 uint8_t const fReadWrite = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_R) 190 | RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_W); 191 uint8_t const fExecute = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_X_SUPER); 192 uint8_t const fAccessed = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_A); 193 pWalk->Core.fEffective = fEffective = RT_BF_MAKE(PGM_BF_PTWALK_EFF_X, fExecute) 194 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_RW, fReadWrite) 195 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_US, 1) 196 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_A, fAccessed) 197 | fEffectiveEpt; 198 199 rc = PGM_GCPHYS_2_PTR_BY_VMCPU(pVCpu, Pml4e.u & EPT_PML4E_PG_MASK, &pWalk->pPdpt); 200 if (RT_SUCCESS(rc)) { /* probable */ } 201 else return PGM_GST_NAME(WalkReturnBadPhysAddr)(pVCpu, pWalk, 3, rc); 191 202 # endif 192 203 }
Note:
See TracChangeset
for help on using the changeset viewer.