Changeset 31170 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Jul 28, 2010 3:20:02 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 64156
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/PGMR0DynMap.cpp
r31126 r31170 81 81 #endif 82 82 83 /** Converts a PGMCPUM::AutoSet pointer into a PVMCPU. */ 84 #define PGMR0DYNMAP_2_VMCPU(pSet) (RT_FROM_MEMBER(pSet, VMCPU, pgm.s.AutoSet)) 85 86 /** Converts a PGMCPUM::AutoSet pointer into a PVM. */ 87 #define PGMR0DYNMAP_2_VM(pSet) (PGMR0DYNMAP_2_VMCPU(pSet)->CTX_SUFF(pVM)) 88 83 89 84 90 /******************************************************************************* … … 1179 1185 * @param HCPhys The address of the page to be mapped. 1180 1186 * @param iPage The page index pgmR0DynMapPage hashed HCPhys to. 1181 * @param pVM The shared VM structure, for statistics only. 1182 */ 1183 static uint32_t pgmR0DynMapPageSlow(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, uint32_t iPage, PVM pVM) 1187 */ 1188 static uint32_t pgmR0DynMapPageSlow(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, uint32_t iPage) 1184 1189 { 1185 1190 #ifdef VBOX_WITH_STATISTICS 1186 PVMCPU pVCpu = VMMGetCpu(pVM);1191 PVMCPU pVCpu = PGMR0DYNMAP_2_VMCPU(pThis); 1187 1192 #endif 1188 1193 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatR0DynMapPageSlow); … … 1280 1285 * @param HCPhys The address of the page to be mapped. 1281 1286 * @param iRealCpu The real cpu set index. (optimization) 1282 * @param pVM The shared VM structure, for statistics only.1283 1287 * @param ppvPage Where to the page address. 1284 1288 */ 1285 DECLINLINE(uint32_t) pgmR0DynMapPage(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, int32_t iRealCpu, PVM pVM,void **ppvPage)1289 DECLINLINE(uint32_t) pgmR0DynMapPage(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, int32_t iRealCpu, void **ppvPage) 1286 1290 { 1287 1291 #ifdef VBOX_WITH_STATISTICS 1288 PVMCPU pVCpu = VMMGetCpu(pVM);1292 PVMCPU pVCpu = PGMR0DYNMAP_2_VMCPU(pThis); 1289 1293 #endif 1290 1294 RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER; … … 1324 1328 else 1325 1329 { 1326 iPage = pgmR0DynMapPageSlow(pThis, HCPhys, iPage , pVM);1330 iPage = pgmR0DynMapPageSlow(pThis, HCPhys, iPage); 1327 1331 if (RT_UNLIKELY(iPage == UINT32_MAX)) 1328 1332 { … … 1829 1833 * 1830 1834 * @returns VINF_SUCCESS, bails out to ring-3 on failure. 1831 * @param pVM The shared VM structure (for statistics).1832 1835 * @param pSet The set. 1833 1836 * @param HCPhys The physical address of the page. … … 1836 1839 * @remarks This is a very hot path. 1837 1840 */ 1838 int pgmR0DynMapHCPageCommon(PVM pVM, PPGMMAPSET pSet, RTHCPHYS HCPhys, void **ppv) 1839 { 1840 LogFlow(("pgmR0DynMapHCPageCommon: pVM=%p pSet=%p HCPhys=%RHp ppv=%p\n", 1841 pVM, pSet, HCPhys, ppv)); 1841 int pgmR0DynMapHCPageCommon(PPGMMAPSET pSet, RTHCPHYS HCPhys, void **ppv) 1842 { 1843 LogFlow(("pgmR0DynMapHCPageCommon: pSet=%p HCPhys=%RHp ppv=%p\n", pSet, HCPhys, ppv)); 1842 1844 #ifdef VBOX_WITH_STATISTICS 1843 PVMCPU pVCpu = VMMGetCpu(pVM);1845 PVMCPU pVCpu = PGMR0DYNMAP_2_VMCPU(pSet); 1844 1846 #endif 1845 1847 AssertMsg(pSet->iCpu == RTMpCpuIdToSetIndex(RTMpCpuId()), ("%d %d(%d) efl=%#x\n", pSet->iCpu, RTMpCpuIdToSetIndex(RTMpCpuId()), RTMpCpuId(), ASMGetFlags())); … … 1849 1851 */ 1850 1852 void *pvPage; 1851 uint32_t const iPage = pgmR0DynMapPage(g_pPGMR0DynMap, HCPhys, pSet->iCpu, pVM,&pvPage);1853 uint32_t const iPage = pgmR0DynMapPage(g_pPGMR0DynMap, HCPhys, pSet->iCpu, &pvPage); 1852 1854 if (RT_UNLIKELY(iPage == UINT32_MAX)) 1853 1855 { … … 1855 1857 g_pPGMR0DynMap->cLoad, g_pPGMR0DynMap->cMaxLoad, g_pPGMR0DynMap->cPages, g_pPGMR0DynMap->cGuardPages); 1856 1858 if (!g_fPGMR0DynMapTestRunning) 1857 VMMRZCallRing3NoCpu( pVM, VMMCALLRING3_VM_R0_ASSERTION, 0);1859 VMMRZCallRing3NoCpu(PGMR0DYNMAP_2_VM(pSet), VMMCALLRING3_VM_R0_ASSERTION, 0); 1858 1860 *ppv = NULL; 1859 1861 return VERR_PGM_DYNMAP_FAILED; … … 1951 1953 RTAssertMsg2Weak("PGMDynMapHCPage: set is full!\n"); 1952 1954 if (!g_fPGMR0DynMapTestRunning) 1953 VMMRZCallRing3NoCpu( pVM, VMMCALLRING3_VM_R0_ASSERTION, 0);1955 VMMRZCallRing3NoCpu(PGMR0DYNMAP_2_VM(pSet), VMMCALLRING3_VM_R0_ASSERTION, 0); 1954 1956 *ppv = NULL; 1955 1957 return VERR_PGM_DYNMAP_FULL_SET; … … 1987 1989 * Call common code. 1988 1990 */ 1989 int rc = pgmR0DynMapHCPageCommon(p VM, pSet, HCPhys, ppv);1991 int rc = pgmR0DynMapHCPageCommon(pSet, HCPhys, ppv); 1990 1992 1991 1993 STAM_PROFILE_STOP(&pVCpu->pgm.s.StatR0DynMapHCPage, a);
Note:
See TracChangeset
for help on using the changeset viewer.