summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2021-07-26 21:01:38 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2021-07-26 21:01:38 +0000
commita3b3d3d11f3f9ccdc41d277636373e0dd927694c (patch)
tree0b5020aa1ebdd45f34e0318f30d15dc68a7d37c1
parent1349c936d68945772c531a79ff8a6ea1e8723edd (diff)
downloadVirtualBox-svn-a3b3d3d11f3f9ccdc41d277636373e0dd927694c.tar.gz
VMM: Removed the VM pointers from the internal critsect structures. bugref:9218 bugref:10074
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@90348 cfe28804-0f27-0410-a406-dd0f0b0b656f
-rw-r--r--include/VBox/vmm/pdmcritsect.h2
-rw-r--r--src/VBox/VMM/VMMAll/PDMAllCritSect.cpp5
-rw-r--r--src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp16
-rw-r--r--src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp1
-rw-r--r--src/VBox/VMM/VMMR3/MMHyper.cpp2
-rw-r--r--src/VBox/VMM/VMMR3/PDM.cpp7
-rw-r--r--src/VBox/VMM/VMMR3/PDMCritSect.cpp43
-rw-r--r--src/VBox/VMM/VMMR3/PDMDevHlp.cpp6
-rw-r--r--src/VBox/VMM/VMMR3/PDMDriver.cpp3
-rw-r--r--src/VBox/VMM/VMMR3/PDMNetShaper.cpp18
-rw-r--r--src/VBox/VMM/VMMR3/PGM.cpp4
-rw-r--r--src/VBox/VMM/include/PDMInternal.h19
12 files changed, 28 insertions, 98 deletions
diff --git a/include/VBox/vmm/pdmcritsect.h b/include/VBox/vmm/pdmcritsect.h
index 47b4dc07b87..5532abeca95 100644
--- a/include/VBox/vmm/pdmcritsect.h
+++ b/include/VBox/vmm/pdmcritsect.h
@@ -66,7 +66,7 @@ VMMR3DECL(int) PDMR3CritSectInit(PVM pVM, PPDMCRITSECT pCritSect, RT_SRC_PO
VMMR3DECL(int) PDMR3CritSectEnterEx(PVM pVM, PPDMCRITSECT pCritSect, bool fCallRing3);
VMMR3DECL(bool) PDMR3CritSectYield(PVM pVM, PPDMCRITSECT pCritSect);
VMMR3DECL(const char *) PDMR3CritSectName(PCPDMCRITSECT pCritSect);
-VMMR3DECL(int) PDMR3CritSectDelete(PPDMCRITSECT pCritSect);
+VMMR3DECL(int) PDMR3CritSectDelete(PVM pVM, PPDMCRITSECT pCritSect);
#if defined(IN_RING0) || defined(IN_RING3)
VMMDECL(int) PDMHCCritSectScheduleExitEvent(PPDMCRITSECT pCritSect, SUPSEMEVENT hEventToSignal);
#endif
diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
index 36a78d7ca8f..2c55f751050 100644
--- a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
@@ -145,7 +145,7 @@ static int pdmR3R0CritSectEnterContended(PVMCC pVM, PPDMCRITSECT pCritSect, RTNA
/*
* The wait loop.
*/
- PSUPDRVSESSION pSession = pCritSect->s.CTX_SUFF(pVM)->pSession;
+ PSUPDRVSESSION pSession = pVM->pSession;
SUPSEMEVENT hEvent = (SUPSEMEVENT)pCritSect->s.Core.EventSem;
# ifdef IN_RING3
# ifdef PDMCRITSECT_STRICT
@@ -247,7 +247,6 @@ DECL_FORCE_INLINE(int) pdmCritSectEnter(PVMCC pVM, PPDMCRITSECT pCritSect, int r
else
return VINF_SUCCESS;
- Assert(pCritSect->s.CTX_SUFF(pVM) == pVM); RT_NOREF(pVM);
RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect);
/* ... not owned ... */
if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1))
@@ -459,7 +458,6 @@ static int pdmCritSectTryEnter(PVMCC pVM, PPDMCRITSECT pCritSect, PCRTLOCKVALSRC
else
return VINF_SUCCESS;
- Assert(pCritSect->s.CTX_SUFF(pVM) == pVM);
RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect);
/* ... not owned ... */
if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1))
@@ -595,7 +593,6 @@ VMMDECL(int) PDMCritSectLeave(PVMCC pVM, PPDMCRITSECT pCritSect)
/*
* Always check that the caller is the owner (screw performance).
*/
- Assert(pCritSect->s.CTX_SUFF(pVM) == pVM); RT_NOREF(pVM);
RTNATIVETHREAD const hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect);
AssertReleaseMsgReturn(pCritSect->s.Core.NativeThreadOwner == hNativeSelf,
("%p %s: %p != %p; cLockers=%d cNestings=%d\n", pCritSect, R3STRING(pCritSect->s.pszName),
diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
index 29609008482..af132491260 100644
--- a/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
@@ -126,12 +126,12 @@ VMMDECL(uint32_t) PDMR3CritSectRwSetSubClass(PPDMCRITSECTRW pThis, uint32_t uSub
/**
* Go back to ring-3 so the kernel can do signals, APCs and other fun things.
*
- * @param pThis Pointer to the read/write critical section.
+ * @param pVM The cross context VM structure.
*/
-static void pdmR0CritSectRwYieldToRing3(PPDMCRITSECTRW pThis)
+static void pdmR0CritSectRwYieldToRing3(PVMCC pVM)
{
- PVMCC pVM = pThis->s.CTX_SUFF(pVM); AssertPtr(pVM);
- PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu);
+ PVMCPUCC pVCpu = VMMGetCpu(pVM);
+ AssertPtrReturnVoid(pVCpu);
int rc = VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VM_R0_PREEMPT, NULL);
AssertRC(rc);
}
@@ -157,7 +157,6 @@ static int pdmCritSectRwEnterShared(PVMCC pVM, PPDMCRITSECTRW pThis, int rcBusy,
*/
AssertPtr(pThis);
AssertReturn(pThis->s.Core.u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
- Assert(pThis->s.CTX_SUFF(pVM) == pVM);
#if !defined(PDMCRITSECTRW_STRICT) || !defined(IN_RING3)
NOREF(pSrcPos);
@@ -301,7 +300,7 @@ static int pdmCritSectRwEnterShared(PVMCC pVM, PPDMCRITSECTRW pThis, int rcBusy,
|| pThis->s.Core.u32Magic != RTCRITSECTRW_MAGIC)
break;
# ifdef IN_RING0
- pdmR0CritSectRwYieldToRing3(pThis);
+ pdmR0CritSectRwYieldToRing3(pVM);
# endif
}
# ifdef IN_RING3
@@ -566,7 +565,6 @@ static int pdmCritSectRwLeaveSharedWorker(PVMCC pVM, PPDMCRITSECTRW pThis, bool
*/
AssertPtr(pThis);
AssertReturn(pThis->s.Core.u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
- Assert(pThis->s.CTX_SUFF(pVM) == pVM);
#if !defined(PDMCRITSECTRW_STRICT) || !defined(IN_RING3)
NOREF(fNoVal);
@@ -720,7 +718,6 @@ static int pdmCritSectRwEnterExcl(PVMCC pVM, PPDMCRITSECTRW pThis, int rcBusy, b
*/
AssertPtr(pThis);
AssertReturn(pThis->s.Core.u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
- Assert(pThis->s.CTX_SUFF(pVM) == pVM);
#if !defined(PDMCRITSECTRW_STRICT) || !defined(IN_RING3)
NOREF(pSrcPos);
@@ -872,7 +869,7 @@ static int pdmCritSectRwEnterExcl(PVMCC pVM, PPDMCRITSECTRW pThis, int rcBusy, b
|| pThis->s.Core.u32Magic != RTCRITSECTRW_MAGIC)
break;
# ifdef IN_RING0
- pdmR0CritSectRwYieldToRing3(pThis);
+ pdmR0CritSectRwYieldToRing3(pVM);
# endif
}
# ifdef IN_RING3
@@ -1121,7 +1118,6 @@ static int pdmCritSectRwLeaveExclWorker(PVMCC pVM, PPDMCRITSECTRW pThis, bool fN
*/
AssertPtr(pThis);
AssertReturn(pThis->s.Core.u32Magic == RTCRITSECTRW_MAGIC, VERR_SEM_DESTROYED);
- Assert(pThis->s.CTX_SUFF(pVM) == pVM);
#if !defined(PDMCRITSECTRW_STRICT) || !defined(IN_RING3)
NOREF(fNoVal);
diff --git a/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp b/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
index c8da679ae53..e086bf60291 100644
--- a/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
+++ b/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
@@ -844,7 +844,6 @@ static DECLCALLBACK(int) pdmR0DevHlp_SetDeviceCritSect(PPDMDEVINS pDevIns, PPDMC
pDevIns->pReg->szName, pDevIns->iInstance, pCritSect, pCritSect->s.pszName));
AssertReturn(PDMCritSectIsInitialized(pCritSect), VERR_INVALID_PARAMETER);
PGVM pGVM = pDevIns->Internal.s.pGVM;
- AssertReturn(pCritSect->s.pVMR0 == pGVM, VERR_INVALID_PARAMETER);
VM_ASSERT_EMT(pGVM);
VM_ASSERT_STATE_RETURN(pGVM, VMSTATE_CREATING, VERR_WRONG_ORDER);
diff --git a/src/VBox/VMM/VMMR3/MMHyper.cpp b/src/VBox/VMM/VMMR3/MMHyper.cpp
index 8e8251d42f4..205478aa67d 100644
--- a/src/VBox/VMM/VMMR3/MMHyper.cpp
+++ b/src/VBox/VMM/VMMR3/MMHyper.cpp
@@ -214,7 +214,7 @@ int mmR3HyperInit(PVM pVM)
int mmR3HyperTerm(PVM pVM)
{
if (pVM->mm.s.pHyperHeapR3)
- PDMR3CritSectDelete(&pVM->mm.s.pHyperHeapR3->Lock);
+ PDMR3CritSectDelete(pVM, &pVM->mm.s.pHyperHeapR3->Lock);
return VINF_SUCCESS;
}
diff --git a/src/VBox/VMM/VMMR3/PDM.cpp b/src/VBox/VMM/VMMR3/PDM.cpp
index a0387f8c369..81918f3e0e3 100644
--- a/src/VBox/VMM/VMMR3/PDM.cpp
+++ b/src/VBox/VMM/VMMR3/PDM.cpp
@@ -584,11 +584,6 @@ VMMR3_INT_DECL(void) PDMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
pVM->pdm.s.pDevHlpQueueRC = PDMQueueRCPtr(pVM->pdm.s.pDevHlpQueueR3);
/*
- * Critical sections.
- */
- pdmR3CritSectBothRelocate(pVM);
-
- /*
* The registered PIC.
*/
if (pVM->pdm.s.Pic.pDevInsRC)
@@ -893,7 +888,7 @@ VMMR3_INT_DECL(int) PDMR3Term(PVM pVM)
/*
* Destroy the PDM lock.
*/
- PDMR3CritSectDelete(&pVM->pdm.s.CritSect);
+ PDMR3CritSectDelete(pVM, &pVM->pdm.s.CritSect);
/* The MiscCritSect is deleted by PDMR3CritSectBothTerm later. */
LogFlow(("PDMR3Term: returns %Rrc\n", VINF_SUCCESS));
diff --git a/src/VBox/VMM/VMMR3/PDMCritSect.cpp b/src/VBox/VMM/VMMR3/PDMCritSect.cpp
index 5b8b3d57d92..6ca86837f2c 100644
--- a/src/VBox/VMM/VMMR3/PDMCritSect.cpp
+++ b/src/VBox/VMM/VMMR3/PDMCritSect.cpp
@@ -61,30 +61,6 @@ int pdmR3CritSectBothInitStats(PVM pVM)
/**
- * Relocates all the critical sections.
- *
- * @param pVM The cross context VM structure.
- */
-void pdmR3CritSectBothRelocate(PVM pVM)
-{
- PUVM pUVM = pVM->pUVM;
- RTCritSectEnter(&pUVM->pdm.s.ListCritSect);
-
- for (PPDMCRITSECTINT pCur = pUVM->pdm.s.pCritSects;
- pCur;
- pCur = pCur->pNext)
- pCur->pVMRC = pVM->pVMRC;
-
- for (PPDMCRITSECTRWINT pCur = pUVM->pdm.s.pRwCritSects;
- pCur;
- pCur = pCur->pNext)
- pCur->pVMRC = pVM->pVMRC;
-
- RTCritSectLeave(&pUVM->pdm.s.ListCritSect);
-}
-
-
-/**
* Deletes all remaining critical sections.
*
* This is called at the very end of the termination process. It is also called
@@ -181,9 +157,6 @@ static int pdmR3CritSectInitOne(PVM pVM, PPDMCRITSECTINT pCritSect, void *pvKey,
pCritSect->Core.cNestings = 0;
pCritSect->Core.cLockers = -1;
pCritSect->Core.NativeThreadOwner = NIL_RTNATIVETHREAD;
- pCritSect->pVMR3 = pVM;
- pCritSect->pVMR0 = pVM->pVMR0ForCall;
- pCritSect->pVMRC = pVM->pVMRC;
pCritSect->pvKey = pvKey;
pCritSect->fAutomaticDefaultCritsect = false;
pCritSect->fUsedByTimerOrSimilar = false;
@@ -278,9 +251,6 @@ static int pdmR3CritSectRwInitOne(PVM pVM, PPDMCRITSECTRWINT pCritSect, void *pv
#if HC_ARCH_BITS == 32
pCritSect->Core.HCPtrPadding = NIL_RTHCPTR;
#endif
- pCritSect->pVMR3 = pVM;
- pCritSect->pVMR0 = pVM->pVMR0ForCall;
- pCritSect->pVMRC = pVM->pVMRC;
pCritSect->pvKey = pvKey;
pCritSect->pszName = pszName;
@@ -533,9 +503,6 @@ static int pdmR3CritSectDeleteOne(PVM pVM, PUVM pUVM, PPDMCRITSECTINT pCritSect,
RTLockValidatorRecExclDestroy(&pCritSect->Core.pValidatorRec);
pCritSect->pNext = NULL;
pCritSect->pvKey = NULL;
- pCritSect->pVMR3 = NULL;
- pCritSect->pVMR0 = NIL_RTR0PTR;
- pCritSect->pVMRC = NIL_RTRCPTR;
if (!fFinal)
STAMR3DeregisterF(pVM->pUVM, "/PDM/CritSects/%s/*", pCritSect->pszName);
RTStrFree((char *)pCritSect->pszName);
@@ -604,9 +571,6 @@ static int pdmR3CritSectRwDeleteOne(PVM pVM, PUVM pUVM, PPDMCRITSECTRWINT pCritS
pCritSect->pNext = NULL;
pCritSect->pvKey = NULL;
- pCritSect->pVMR3 = NULL;
- pCritSect->pVMR0 = NIL_RTR0PTR;
- pCritSect->pVMRC = NIL_RTRCPTR;
if (!fFinal)
STAMR3DeregisterF(pVM->pUVM, "/PDM/CritSectsRw/%s/*", pCritSect->pszName);
RTStrFree((char *)pCritSect->pszName);
@@ -730,9 +694,10 @@ int pdmR3CritSectBothDeleteDriver(PVM pVM, PPDMDRVINS pDrvIns)
* Deletes the critical section.
*
* @returns VBox status code.
- * @param pCritSect The PDM critical section to destroy.
+ * @param pVM The cross context VM structure.
+ * @param pCritSect The PDM critical section to destroy.
*/
-VMMR3DECL(int) PDMR3CritSectDelete(PPDMCRITSECT pCritSect)
+VMMR3DECL(int) PDMR3CritSectDelete(PVM pVM, PPDMCRITSECT pCritSect)
{
if (!RTCritSectIsInitialized(&pCritSect->s.Core))
return VINF_SUCCESS;
@@ -740,7 +705,6 @@ VMMR3DECL(int) PDMR3CritSectDelete(PPDMCRITSECT pCritSect)
/*
* Find and unlink it.
*/
- PVM pVM = pCritSect->s.pVMR3;
PUVM pUVM = pVM->pUVM;
AssertReleaseReturn(pVM, VERR_PDM_CRITSECT_IPE);
PPDMCRITSECTINT pPrev = NULL;
@@ -780,7 +744,6 @@ VMMR3DECL(int) PDMR3CritSectRwDelete(PVM pVM, PPDMCRITSECTRW pCritSect)
/*
* Find and unlink it.
*/
- Assert(pCritSect->s.pVMR3 == pVM);
PUVM pUVM = pVM->pUVM;
AssertReleaseReturn(pVM, VERR_PDM_CRITSECT_IPE);
PPDMCRITSECTRWINT pPrev = NULL;
diff --git a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
index 39f24a44c01..ef6811e97ae 100644
--- a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
@@ -2736,7 +2736,6 @@ static DECLCALLBACK(int) pdmR3DevHlp_SetDeviceCritSect(PPDMDEVINS pDevIns, PPDMC
pDevIns->pReg->szName, pDevIns->iInstance, pCritSect, pCritSect->s.pszName));
AssertReturn(PDMCritSectIsInitialized(pCritSect), VERR_INVALID_PARAMETER);
PVM pVM = pDevIns->Internal.s.pVMR3;
- AssertReturn(pCritSect->s.pVMR3 == pVM, VERR_INVALID_PARAMETER);
VM_ASSERT_EMT(pVM);
VM_ASSERT_STATE_RETURN(pVM, VMSTATE_CREATING, VERR_WRONG_ORDER);
@@ -2767,7 +2766,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_SetDeviceCritSect(PPDMDEVINS pDevIns, PPDMC
AssertLogRelRCReturn(rc, rc);
}
- PDMR3CritSectDelete(pOldCritSect);
+ PDMR3CritSectDelete(pVM, pOldCritSect);
Assert((uintptr_t)pOldCritSect - (uintptr_t)pDevIns < pDevIns->cbRing3);
LogFlow(("pdmR3DevHlp_SetDeviceCritSect: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS));
@@ -2871,8 +2870,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_CritSectScheduleExitEvent(PPDMDEVINS pDevIn
static DECLCALLBACK(int) pdmR3DevHlp_CritSectDelete(PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect)
{
PDMDEV_ASSERT_DEVINS(pDevIns);
- RT_NOREF(pDevIns);
- return PDMR3CritSectDelete(pCritSect);
+ return PDMR3CritSectDelete(pDevIns->Internal.s.pVMR3, pCritSect);
}
diff --git a/src/VBox/VMM/VMMR3/PDMDriver.cpp b/src/VBox/VMM/VMMR3/PDMDriver.cpp
index ac528485bfe..09e40347135 100644
--- a/src/VBox/VMM/VMMR3/PDMDriver.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDriver.cpp
@@ -1908,8 +1908,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_CritSectScheduleExitEvent(PPDMDRVINS p
static DECLCALLBACK(int) pdmR3DrvHlp_CritSectDelete(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect)
{
PDMDRV_ASSERT_DRVINS(pDrvIns);
- RT_NOREF(pDrvIns);
- return PDMR3CritSectDelete(pCritSect);
+ return PDMR3CritSectDelete(pDrvIns->Internal.s.pVMR3, pCritSect);
}
diff --git a/src/VBox/VMM/VMMR3/PDMNetShaper.cpp b/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
index 6f991ebf080..dc46189be1a 100644
--- a/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
+++ b/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
@@ -152,14 +152,14 @@ static int pdmNsBwGroupCreate(PPDMNETSHAPER pShaper, const char *pszBwGroup, uin
PPDMNSBWGROUP pBwGroup = pdmNsBwGroupFindById(pShaper, pszBwGroup);
if (!pBwGroup)
{
- rc = MMHyperAlloc(pShaper->pVM, sizeof(PDMNSBWGROUP), 64,
- MM_TAG_PDM_NET_SHAPER, (void **)&pBwGroup);
+ PVM const pVM = pShaper->pVM;
+ rc = MMHyperAlloc(pVM, sizeof(PDMNSBWGROUP), 64, MM_TAG_PDM_NET_SHAPER, (void **)&pBwGroup);
if (RT_SUCCESS(rc))
{
- rc = PDMR3CritSectInit(pShaper->pVM, &pBwGroup->Lock, RT_SRC_POS, "BWGRP-%s", pszBwGroup);
+ rc = PDMR3CritSectInit(pVM, &pBwGroup->Lock, RT_SRC_POS, "BWGRP-%s", pszBwGroup);
if (RT_SUCCESS(rc))
{
- pBwGroup->pszNameR3 = MMR3HeapStrDup(pShaper->pVM, MM_TAG_PDM_NET_SHAPER, pszBwGroup);
+ pBwGroup->pszNameR3 = MMR3HeapStrDup(pVM, MM_TAG_PDM_NET_SHAPER, pszBwGroup);
if (pBwGroup->pszNameR3)
{
pBwGroup->pShaperR3 = pShaper;
@@ -175,9 +175,9 @@ static int pdmNsBwGroupCreate(PPDMNETSHAPER pShaper, const char *pszBwGroup, uin
pdmNsBwGroupLink(pBwGroup);
return VINF_SUCCESS;
}
- PDMR3CritSectDelete(&pBwGroup->Lock);
+ PDMR3CritSectDelete(pVM, &pBwGroup->Lock);
}
- MMHyperFree(pShaper->pVM, pBwGroup);
+ MMHyperFree(pVM, pBwGroup);
}
else
rc = VERR_NO_MEMORY;
@@ -190,11 +190,11 @@ static int pdmNsBwGroupCreate(PPDMNETSHAPER pShaper, const char *pszBwGroup, uin
}
-static void pdmNsBwGroupTerminate(PPDMNSBWGROUP pBwGroup)
+static void pdmNsBwGroupTerminate(PVM pVM, PPDMNSBWGROUP pBwGroup)
{
Assert(pBwGroup->cRefs == 0);
if (PDMCritSectIsInitialized(&pBwGroup->Lock))
- PDMR3CritSectDelete(&pBwGroup->Lock);
+ PDMR3CritSectDelete(pVM, &pBwGroup->Lock);
}
@@ -468,7 +468,7 @@ int pdmR3NetShaperTerm(PVM pVM)
{
PPDMNSBWGROUP pFree = pBwGroup;
pBwGroup = pBwGroup->pNextR3;
- pdmNsBwGroupTerminate(pFree);
+ pdmNsBwGroupTerminate(pVM, pFree);
MMR3HeapFree(pFree->pszNameR3);
MMHyperFree(pVM, pFree);
}
diff --git a/src/VBox/VMM/VMMR3/PGM.cpp b/src/VBox/VMM/VMMR3/PGM.cpp
index aaaf2b51ec4..e658a8090d1 100644
--- a/src/VBox/VMM/VMMR3/PGM.cpp
+++ b/src/VBox/VMM/VMMR3/PGM.cpp
@@ -1063,7 +1063,7 @@ VMMR3DECL(int) PGMR3Init(PVM pVM)
}
/* Almost no cleanup necessary, MM frees all memory. */
- PDMR3CritSectDelete(&pVM->pgm.s.CritSectX);
+ PDMR3CritSectDelete(pVM, &pVM->pgm.s.CritSectX);
return rc;
}
@@ -2138,7 +2138,7 @@ VMMR3DECL(int) PGMR3Term(PVM pVM)
pgmUnlock(pVM);
PGMDeregisterStringFormatTypes();
- return PDMR3CritSectDelete(&pVM->pgm.s.CritSectX);
+ return PDMR3CritSectDelete(pVM, &pVM->pgm.s.CritSectX);
}
diff --git a/src/VBox/VMM/include/PDMInternal.h b/src/VBox/VMM/include/PDMInternal.h
index 7ff9ad963b6..d6199169532 100644
--- a/src/VBox/VMM/include/PDMInternal.h
+++ b/src/VBox/VMM/include/PDMInternal.h
@@ -422,12 +422,6 @@ typedef struct PDMCRITSECTINT
* This is pDevIns if the owner is a device. Similarly for a driver or service.
* PDMR3CritSectInit() sets this to point to the critsect itself. */
RTR3PTR pvKey;
- /** Pointer to the VM - R3Ptr. */
- PVMR3 pVMR3;
- /** Pointer to the VM - R0Ptr. */
- R0PTRTYPE(PVMCC) pVMR0;
- /** Pointer to the VM - GCPtr. */
- PVMRC pVMRC;
/** Set if this critical section is the automatically created default
* section of a device. */
bool fAutomaticDefaultCritsect;
@@ -435,7 +429,7 @@ typedef struct PDMCRITSECTINT
* See PDMR3DevGetCritSect. */
bool fUsedByTimerOrSimilar;
/** Alignment padding. */
- bool afPadding[2];
+ bool afPadding[2+4];
/** Support driver event semaphore that is scheduled to be signaled upon leaving
* the critical section. This is only for Ring-3 and Ring-0. */
SUPSEMEVENT hEventToSignal;
@@ -475,16 +469,6 @@ typedef struct PDMCRITSECTRWINT
* This is pDevIns if the owner is a device. Similarly for a driver or service.
* PDMR3CritSectInit() sets this to point to the critsect itself. */
RTR3PTR pvKey;
- /** Pointer to the VM - R3Ptr. */
- PVMR3 pVMR3;
- /** Pointer to the VM - R0Ptr. */
- R0PTRTYPE(PVMCC) pVMR0;
- /** Pointer to the VM - GCPtr. */
- PVMRC pVMRC;
-#if HC_ARCH_BITS == 64
- /** Alignment padding. */
- RTRCPTR RCPtrPadding;
-#endif
/** The lock name. */
R3PTRTYPE(const char *) pszName;
/** R0/RC write lock contention. */
@@ -1614,7 +1598,6 @@ extern const PDMPCIRAWHLPR3 g_pdmR3DevPciRawHlp;
bool pdmR3IsValidName(const char *pszName);
int pdmR3CritSectBothInitStats(PVM pVM);
-void pdmR3CritSectBothRelocate(PVM pVM);
int pdmR3CritSectBothDeleteDevice(PVM pVM, PPDMDEVINS pDevIns);
int pdmR3CritSectBothDeleteDriver(PVM pVM, PPDMDRVINS pDrvIns);
int pdmR3CritSectInitDevice( PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect, RT_SRC_POS_DECL,