Changeset 95404 in vbox
- Timestamp:
- Jun 28, 2022 7:05:49 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152001
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/PGM.cpp
r95248 r95404 1665 1665 uint64_t fMbzPageFrameMask = pVM->pgm.s.GCPhysInvAddrMask & UINT64_C(0x000ffffffffff000); 1666 1666 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX_EPT 1667 uint64_t const fEptVpidCap = CPUMGetGuestIa32VmxEptVpidCap(pVM->apCpusR3[0]); /* should be identical for all VCPUs .*/1667 uint64_t const fEptVpidCap = CPUMGetGuestIa32VmxEptVpidCap(pVM->apCpusR3[0]); /* should be identical for all VCPUs */ 1668 1668 uint64_t const fGstEptMbzBigPdeMask = EPT_PDE2M_MBZ_MASK 1669 1669 | (RT_BF_GET(fEptVpidCap, VMX_BF_EPT_VPID_CAP_PDE_2M) ^ 1) << EPT_E_BIT_LEAF; 1670 1670 uint64_t const fGstEptMbzBigPdpteMask = EPT_PDPTE1G_MBZ_MASK 1671 1671 | (RT_BF_GET(fEptVpidCap, VMX_BF_EPT_VPID_CAP_PDPTE_1G) ^ 1) << EPT_E_BIT_LEAF; 1672 uint64_t const GCPhysRsvdAddrMask = pVM->pgm.s.GCPhysInvAddrMask & UINT64_C(0x000fffffffffffff); /* bits 63:52 ignored */ 1672 1673 #endif 1673 1674 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) … … 1709 1710 pVCpu->pgm.s.fGstEptMbzBigPdpteMask = fMbzPageFrameMask | fGstEptMbzBigPdpteMask; 1710 1711 pVCpu->pgm.s.fGstEptMbzPml4eMask = fMbzPageFrameMask | EPT_PML4E_MBZ_MASK; 1711 1712 /* If any of the features (in the assert below) are enabled, we might have to shadow the relevant bits. */ 1712 pVCpu->pgm.s.fGstEptPresentMask = EPT_PRESENT_MASK; 1713 1714 /* If any of the features (in the assert below) are enabled, we would have to shadow the relevant bits. */ 1713 1715 Assert( !pVM->cpum.ro.GuestFeatures.fVmxModeBasedExecuteEpt 1714 1716 && !pVM->cpum.ro.GuestFeatures.fVmxSppEpt 1715 && !pVM->cpum.ro.GuestFeatures.fVmxEptXcptVe); 1716 pVCpu->pgm.s.fGstEptPresentMask = EPT_E_READ | EPT_E_WRITE | EPT_E_EXECUTE; 1717 && !pVM->cpum.ro.GuestFeatures.fVmxEptXcptVe 1718 && !(fEptVpidCap & MSR_IA32_VMX_EPT_VPID_CAP_ACCESS_DIRTY)); 1719 /* We need to shadow reserved bits as guest EPT tables can set them to trigger EPT misconfigs. */ 1720 pVCpu->pgm.s.fGstEptShadowedPteMask = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK; 1721 pVCpu->pgm.s.fGstEptShadowedPdeMask = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_LEAF; 1722 pVCpu->pgm.s.fGstEptShadowedPdpteMask = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_LEAF; 1723 pVCpu->pgm.s.fGstEptShadowedPml4eMask = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_PML4E_MBZ_MASK; 1717 1724 #endif 1718 1725 } … … 1853 1860 pVCpu->pgm.s.GCPhysCR3 = NIL_RTGCPHYS; 1854 1861 pVCpu->pgm.s.GCPhysNstGstCR3 = NIL_RTGCPHYS; 1862 pVCpu->pgm.s.GCPhysPaeCR3 = NIL_RTGCPHYS; 1855 1863 1856 1864 int rc = PGMHCChangeMode(pVM, pVCpu, PGMMODE_REAL, false /* fForce */);
Note:
See TracChangeset
for help on using the changeset viewer.