Lines Matching refs:pMapping

324  * @param   pMapping        The mapping to unlink.
326 static void pgmR3MapUnlink(PVM pVM, PPGMMAPPING pMapping)
329 if (pAfterThis == pMapping)
332 pVM->pgm.s.pMappingsR3 = pMapping->pNextR3;
333 pVM->pgm.s.pMappingsRC = pMapping->pNextRC;
334 pVM->pgm.s.pMappingsR0 = pMapping->pNextR0;
339 while (pAfterThis->pNextR3 != pMapping)
345 pAfterThis->pNextR3 = pMapping->pNextR3;
346 pAfterThis->pNextRC = pMapping->pNextRC;
347 pAfterThis->pNextR0 = pMapping->pNextR0;
356 * @param pMapping The mapping to linked.
358 static void pgmR3MapLink(PVM pVM, PPGMMAPPING pMapping)
364 || pVM->pgm.s.pMappingsR3->GCPtr > pMapping->GCPtr)
367 pMapping->pNextR3 = pVM->pgm.s.pMappingsR3;
368 pMapping->pNextRC = pVM->pgm.s.pMappingsRC;
369 pMapping->pNextR0 = pVM->pgm.s.pMappingsR0;
370 pVM->pgm.s.pMappingsR3 = pMapping;
371 pVM->pgm.s.pMappingsRC = MMHyperR3ToRC(pVM, pMapping);
372 pVM->pgm.s.pMappingsR0 = MMHyperR3ToR0(pVM, pMapping);
379 while (pBeforeThis && pBeforeThis->GCPtr <= pMapping->GCPtr)
385 pMapping->pNextR3 = pAfterThis->pNextR3;
386 pMapping->pNextRC = pAfterThis->pNextRC;
387 pMapping->pNextR0 = pAfterThis->pNextR0;
388 pAfterThis->pNextR3 = pMapping;
389 pAfterThis->pNextRC = MMHyperR3ToRC(pVM, pMapping);
390 pAfterThis->pNextR0 = MMHyperR3ToR0(pVM, pMapping);
1040 * @param pMapping The mapping to relocate.
1045 static void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RTGCPTR GCPtrNewMapping)
1047 Log(("PGM: Relocating %s from %RGv to %RGv\n", pMapping->pszDesc, GCPtrOldMapping, GCPtrNewMapping));
1048 AssertMsg(GCPtrOldMapping == pMapping->GCPtr, ("%RGv vs %RGv\n", GCPtrOldMapping, pMapping->GCPtr));
1056 pgmR3MapClearPDEs(pVM, pMapping, GCPtrOldMapping >> X86_PD_SHIFT);
1057 pgmR3MapSetPDEs(pVM, pMapping, GCPtrNewMapping >> X86_PD_SHIFT);
1063 /* Find previous mapping for pMapping, put result into pPrevMap. */
1066 while (pCur && pCur != pMapping)
1074 /* Find mapping which >= than pMapping. */
1085 if (pCur != pMapping && pPrev != pMapping)
1092 pPrevMap->pNextR3 = pMapping->pNextR3;
1093 pPrevMap->pNextRC = pMapping->pNextRC;
1094 pPrevMap->pNextR0 = pMapping->pNextR0;
1098 pVM->pgm.s.pMappingsR3 = pMapping->pNextR3;
1099 pVM->pgm.s.pMappingsRC = pMapping->pNextRC;
1100 pVM->pgm.s.pMappingsR0 = pMapping->pNextR0;
1106 pMapping->pNextR3 = pCur;
1109 pMapping->pNextRC = pPrev->pNextRC;
1110 pMapping->pNextR0 = pPrev->pNextR0;
1111 pPrev->pNextR3 = pMapping;
1112 pPrev->pNextRC = MMHyperR3ToRC(pVM, pMapping);
1113 pPrev->pNextR0 = MMHyperR3ToR0(pVM, pMapping);
1117 pMapping->pNextRC = pVM->pgm.s.pMappingsRC;
1118 pMapping->pNextR0 = pVM->pgm.s.pMappingsR0;
1119 pVM->pgm.s.pMappingsR3 = pMapping;
1120 pVM->pgm.s.pMappingsRC = MMHyperR3ToRC(pVM, pMapping);
1121 pVM->pgm.s.pMappingsR0 = MMHyperR3ToR0(pVM, pMapping);
1128 pMapping->GCPtr = GCPtrNew;
1129 pMapping->GCPtrLast = GCPtrNew + pMapping->cb - 1;
1134 pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_RELOCATE, pMapping->pvUser);
1142 * @param pMapping The mapping which conflicts.
1145 bool pgmR3MapIsKnownConflictAddress(PPGMMAPPING pMapping, RTGCPTR GCPtr)
1147 for (unsigned i = 0; i < RT_ELEMENTS(pMapping->aGCPtrConflicts); i++)
1149 if (GCPtr == pMapping->aGCPtrConflicts[i])
1162 * @param pMapping The mapping which conflicts.
1166 int pgmR3SyncPTResolveConflict(PVM pVM, PPGMMAPPING pMapping, PX86PD pPDSrc, RTGCPTR GCPtrOldMapping)
1174 pMapping->aGCPtrConflicts[pMapping->cConflicts & (PGMMAPPING_CONFLICT_MAX-1)] = GCPtrOldMapping;
1175 pMapping->cConflicts++;
1183 const unsigned cPTs = pMapping->cPTs;
1190 if (pgmR3MapIsKnownConflictAddress(pMapping, iPDNew << X86_PD_SHIFT))
1219 if (pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_SUGGEST, pMapping->pvUser))
1221 pgmR3MapRelocate(pVM, pMapping, GCPtrOldMapping, GCPtrNewMapping);
1228 AssertMsgFailed(("Failed to relocate page table mapping '%s' from %#x! (cPTs=%d)\n", pMapping->pszDesc, GCPtrOldMapping, cPTs));
1239 * @param pMapping The mapping which conflicts.
1242 int pgmR3SyncPTResolveConflictPAE(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping)
1251 pMapping->aGCPtrConflicts[pMapping->cConflicts & (PGMMAPPING_CONFLICT_MAX-1)] = GCPtrOldMapping;
1252 pMapping->cConflicts++;
1266 const unsigned cPTs = pMapping->cb >> X86_PD_PAE_SHIFT;
1275 if (pgmR3MapIsKnownConflictAddress(pMapping, ((RTGCPTR32)iPDPTE << X86_PDPT_SHIFT) + (iPDNew << X86_PD_PAE_SHIFT)))
1307 if (pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_SUGGEST, pMapping->pvUser))
1309 pgmR3MapRelocate(pVM, pMapping, GCPtrOldMapping, GCPtrNewMapping);
1316 AssertMsgFailed(("Failed to relocate page table mapping '%s' from %#x! (cPTs=%d)\n", pMapping->pszDesc, GCPtrOldMapping, pMapping->cb >> X86_PD_PAE_SHIFT));