Changeset 92076 in vbox
- Timestamp:
- Oct 26, 2021 11:30:00 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 147889
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r92072 r92076 266 266 uint8_t const fAccessed = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_ACCESSED); 267 267 uint8_t const fDirty = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_DIRTY); 268 uint16_t const fMemType = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_MEMTYPE);269 uint16_t const fIgnorePat = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_IGNORE_PAT);270 268 uint32_t const fEffectiveEpt = ((uint32_t)fEptAttrs << PGMPTWALK_EFF_EPT_ATTR_SHIFT) & PGMPTWALK_EFF_EPT_ATTR_MASK; 271 269 pWalk->Core.fEffective = fEffective &= RT_BF_MAKE(PGM_BF_PTWALK_EFF_X, fExecute) … … 310 308 uint8_t const fAccessed = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_ACCESSED); 311 309 uint8_t const fDirty = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_DIRTY); 312 uint16_t const fMemType = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_MEMTYPE);313 uint16_t const fIgnorePat = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_IGNORE_PAT);314 310 uint32_t fEffectiveEpt = ((uint32_t)fEptAttrs << PGMPTWALK_EFF_EPT_ATTR_SHIFT) & PGMPTWALK_EFF_EPT_ATTR_MASK; 315 311 pWalk->Core.fEffective = fEffective &= RT_BF_MAKE(PGM_BF_PTWALK_EFF_X, fExecute) … … 393 389 * We're done. 394 390 */ 395 # if PGM_GST_TYPE == PGM_TYPE_32BIT 391 # if PGM_GST_TYPE == PGM_TYPE_EPT 392 uint64_t const fEptAttrs = Pte.u & EPT_PTE_ATTR_MASK; 393 uint8_t const fExecute = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_EXECUTE); 394 uint8_t const fWrite = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_WRITE); 395 uint8_t const fAccessed = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_ACCESSED); 396 uint8_t const fDirty = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_DIRTY); 397 uint32_t fEffectiveEpt = ((uint32_t)fEptAttrs << PGMPTWALK_EFF_EPT_ATTR_SHIFT) & PGMPTWALK_EFF_EPT_ATTR_MASK; 398 pWalk->Core.fEffective = fEffective &= RT_BF_MAKE(PGM_BF_PTWALK_EFF_X, fExecute) 399 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_RW, fWrite) 400 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_US, 1) 401 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_A, fAccessed) 402 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_D, fDirty) 403 | RT_BF_MAKE(PGM_BF_PTWALK_EFF_MEMTYPE, 0) 404 | fEffectiveEpt; 405 pWalk->Core.fEffectiveRW = !!(fEffective & X86_PTE_RW); 406 pWalk->Core.fEffectiveUS = true; 407 pWalk->Core.fEffectiveNX = !fExecute; 408 # else 409 # if PGM_GST_TYPE == PGM_TYPE_32BIT 396 410 fEffective &= Pte.u & (X86_PTE_RW | X86_PTE_US | X86_PTE_PWT | X86_PTE_PCD | X86_PTE_A); 397 # else411 # else 398 412 fEffective &= ((uint32_t)Pte.u & (X86_PTE_RW | X86_PTE_US | X86_PTE_PWT | X86_PTE_PCD | X86_PTE_A)) 399 413 | ((uint32_t)(Pte.u >> 63) ^ 1) /*NX */; 400 # endif414 # endif 401 415 fEffective |= (uint32_t)Pte.u & (X86_PTE_D | X86_PTE_PAT | X86_PTE_G); 402 416 pWalk->Core.fEffective = fEffective; 403 417 404 418 pWalk->Core.fEffectiveRW = !!(fEffective & X86_PTE_RW); 419 # if PGM_GST_TYPE == PGM_TYPE_EPT 420 pWalk->Core.fEffectiveUS = true; 421 # else 405 422 pWalk->Core.fEffectiveUS = !!(fEffective & X86_PTE_US); 406 # if PGM_GST_TYPE == PGM_TYPE_AMD64 || PGM_GST_TYPE == PGM_TYPE_PAE 423 # endif 424 # if PGM_GST_TYPE == PGM_TYPE_AMD64 || PGM_GST_TYPE == PGM_TYPE_PAE 407 425 pWalk->Core.fEffectiveNX = !(fEffective & 1) && GST_IS_NX_ACTIVE(pVCpu); 408 # else426 # else 409 427 pWalk->Core.fEffectiveNX = false; 428 # endif 410 429 # endif 411 430 pWalk->Core.fSucceeded = true; 412 413 pWalk->Core.GCPhys = GST_GET_PDE_GCPHYS(Pte) 431 pWalk->Core.GCPhys = GST_GET_PDE_GCPHYS(Pte) /** @todo Shouldn't this be PTE_GCPHYS? */ 414 432 | (GCPtr & PAGE_OFFSET_MASK); 415 433 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.