Changeset 90346 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jul 26, 2021 7:55:53 PM (4 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IOMAll.cpp
r82968 r90346 108 108 * Call the device. 109 109 */ 110 VBOXSTRICTRC rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_READ);110 VBOXSTRICTRC rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_READ); 111 111 if (rcStrict == VINF_SUCCESS) 112 112 { … … 114 114 rcStrict = pfnInCallback(pDevIns, pvUser, fFlags & IOM_IOPORT_F_ABS ? Port : offPort, pu32Value, (unsigned)cbValue); 115 115 STAM_PROFILE_STOP(&pStats->CTX_SUFF_Z(ProfIn), a); 116 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));116 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 117 117 118 118 #ifndef IN_RING3 … … 236 236 * Call the device. 237 237 */ 238 VBOXSTRICTRC rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_READ);238 VBOXSTRICTRC rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_READ); 239 239 if (rcStrict == VINF_SUCCESS) 240 240 { … … 282 282 && rcStrict == VINF_SUCCESS); 283 283 } 284 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));284 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 285 285 286 286 #ifdef VBOX_WITH_STATISTICS … … 408 408 * Call the device. 409 409 */ 410 VBOXSTRICTRC rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_WRITE);410 VBOXSTRICTRC rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_WRITE); 411 411 if (rcStrict == VINF_SUCCESS) 412 412 { … … 415 415 STAM_PROFILE_STOP(&pStats->CTX_SUFF_Z(ProfOut), a); 416 416 417 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));417 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 418 418 419 419 #ifdef VBOX_WITH_STATISTICS … … 522 522 * Call the device. 523 523 */ 524 VBOXSTRICTRC rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_WRITE);524 VBOXSTRICTRC rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_IOPORT_WRITE); 525 525 if (rcStrict == VINF_SUCCESS) 526 526 { … … 562 562 } 563 563 564 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));564 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 565 565 566 566 #ifdef VBOX_WITH_STATISTICS -
trunk/src/VBox/VMM/VMMAll/IOMAllMmioNew.cpp
r82968 r90346 368 368 # endif 369 369 PPDMDEVINS const pDevIns = pRegEntry->pDevIns; 370 int rc = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VERR_IGNORED);370 int rc = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VERR_IGNORED); 371 371 AssertRCReturn(rc, rc); 372 372 … … 375 375 IOM_MMIO_STATS_COMMA_ARG); 376 376 377 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));377 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 378 378 STAM_PROFILE_STOP(&pStats->ProfWriteR3, Prf); 379 379 return rcStrict; … … 670 670 * Note! Perhaps not a good move? 671 671 */ 672 rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_MMIO_READ_WRITE);672 rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), VINF_IOM_R3_MMIO_READ_WRITE); 673 673 if (rcStrict == VINF_SUCCESS) 674 674 { … … 681 681 682 682 #ifndef IN_RING3 683 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));683 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 684 684 #endif 685 685 if (RT_SUCCESS(rcStrict)) … … 910 910 * NULL. This is supposed to be an unlikely case, so not optimized yet. 911 911 */ 912 VBOXSTRICTRC rcStrict = PDMCritSectEnter(p DevIns->CTX_SUFF(pCritSectRo), rcToRing3);912 VBOXSTRICTRC rcStrict = PDMCritSectEnter(pVM, pDevIns->CTX_SUFF(pCritSectRo), rcToRing3); 913 913 if (rcStrict == VINF_SUCCESS) 914 914 { … … 920 920 rcStrict = iomMmioDoRead(pVM, pRegEntry, GCPhysFault, offRegion, pvBuf, (uint32_t)cbBuf IOM_MMIO_STATS_COMMA_ARG); 921 921 922 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));922 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 923 923 #ifndef IN_RING3 924 924 if (rcStrict == VINF_IOM_R3_MMIO_READ) … … 938 938 */ 939 939 rcStrict = iomMmioDoWrite(pVM, pVCpu, pRegEntry, GCPhysFault, offRegion, pvBuf, (uint32_t)cbBuf IOM_MMIO_STATS_COMMA_ARG); 940 PDMCritSectLeave(p DevIns->CTX_SUFF(pCritSectRo));940 PDMCritSectLeave(pVM, pDevIns->CTX_SUFF(pCritSectRo)); 941 941 #ifndef IN_RING3 942 942 if (rcStrict == VINF_IOM_R3_MMIO_WRITE) -
trunk/src/VBox/VMM/VMMAll/MMAllHyper.cpp
r82968 r90346 166 166 Assert(PDMCritSectIsInitialized(&pHeap->Lock)); 167 167 #endif 168 int rc = PDMCritSectEnter( &pHeap->Lock, VERR_SEM_BUSY);168 int rc = PDMCritSectEnter(pVM, &pHeap->Lock, VERR_SEM_BUSY); 169 169 #ifdef IN_RING0 170 170 if (rc == VERR_SEM_BUSY) … … 181 181 * @param pVM The cross context VM structure. 182 182 */ 183 static void mmHyperUnlock(PVM pVM)183 static void mmHyperUnlock(PVMCC pVM) 184 184 { 185 185 PMMHYPERHEAP pHeap = pVM->mm.s.CTX_SUFF(pHyperHeap); … … 190 190 #endif 191 191 Assert(PDMCritSectIsInitialized(&pHeap->Lock)); 192 PDMCritSectLeave( &pHeap->Lock);192 PDMCritSectLeave(pVM, &pHeap->Lock); 193 193 } 194 194 -
trunk/src/VBox/VMM/VMMAll/PDMAll.cpp
r89620 r90346 307 307 { 308 308 #ifdef IN_RING3 309 int rc = PDMCritSectEnter( &pVM->pdm.s.CritSect, VERR_IGNORED);309 int rc = PDMCritSectEnter(pVM, &pVM->pdm.s.CritSect, VERR_IGNORED); 310 310 #else 311 int rc = PDMCritSectEnter( &pVM->pdm.s.CritSect, VERR_GENERAL_FAILURE);311 int rc = PDMCritSectEnter(pVM, &pVM->pdm.s.CritSect, VERR_GENERAL_FAILURE); 312 312 if (rc == VERR_GENERAL_FAILURE) 313 313 rc = VMMRZCallRing3NoCpu(pVM, VMMCALLRING3_PDM_LOCK, 0); … … 327 327 int pdmLockEx(PVMCC pVM, int rc) 328 328 { 329 return PDMCritSectEnter( &pVM->pdm.s.CritSect, rc);329 return PDMCritSectEnter(pVM, &pVM->pdm.s.CritSect, rc); 330 330 } 331 331 … … 338 338 void pdmUnlock(PVMCC pVM) 339 339 { 340 PDMCritSectLeave( &pVM->pdm.s.CritSect);340 PDMCritSectLeave(pVM, &pVM->pdm.s.CritSect); 341 341 } 342 342 … … 348 348 * @param pVM The cross context VM structure. 349 349 */ 350 bool pdmLockIsOwner(P CVMCC pVM)351 { 352 return PDMCritSectIsOwner( &pVM->pdm.s.CritSect);350 bool pdmLockIsOwner(PVMCC pVM) 351 { 352 return PDMCritSectIsOwner(pVM, &pVM->pdm.s.CritSect); 353 353 } 354 354 -
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
r90329 r90346 67 67 * 68 68 * @returns native thread handle (ring-3). 69 * @param pCritSect The critical section. This is used in R0 and RC. 70 */ 71 DECL_FORCE_INLINE(RTNATIVETHREAD) pdmCritSectGetNativeSelf(PCPDMCRITSECT pCritSect) 69 * @param pVM The cross context VM structure. 70 * @param pCritSect The critical section. This is used in R0 and RC. 71 */ 72 DECL_FORCE_INLINE(RTNATIVETHREAD) pdmCritSectGetNativeSelf(PVMCC pVM, PCPDMCRITSECT pCritSect) 72 73 { 73 74 #ifdef IN_RING3 74 NOREF(pCritSect);75 RT_NOREF(pVM, pCritSect); 75 76 RTNATIVETHREAD hNativeSelf = RTThreadNativeSelf(); 76 77 #else 77 78 AssertMsgReturn(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC, ("%RX32\n", pCritSect->s.Core.u32Magic), 78 79 NIL_RTNATIVETHREAD); 79 PVMCC pVM = pCritSect->s.CTX_SUFF(pVM); AssertPtr(pVM); 80 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu); 81 RTNATIVETHREAD hNativeSelf = pVCpu->hNativeThread; Assert(hNativeSelf != NIL_RTNATIVETHREAD); 80 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu); 81 RTNATIVETHREAD hNativeSelf = pVCpu ? pVCpu->hNativeThread : NIL_RTNATIVETHREAD; Assert(hNativeSelf != NIL_RTNATIVETHREAD); 82 82 #endif 83 83 return hNativeSelf; … … 125 125 * @retval VERR_SEM_DESTROYED if destroyed. 126 126 * 127 * @param pVM The cross context VM structure. 127 128 * @param pCritSect The critsect. 128 129 * @param hNativeSelf The native thread handle. 129 130 * @param pSrcPos The source position of the lock operation. 130 131 */ 131 static int pdmR3R0CritSectEnterContended(P PDMCRITSECT pCritSect, RTNATIVETHREAD hNativeSelf, PCRTLOCKVALSRCPOS pSrcPos)132 static int pdmR3R0CritSectEnterContended(PVMCC pVM, PPDMCRITSECT pCritSect, RTNATIVETHREAD hNativeSelf, PCRTLOCKVALSRCPOS pSrcPos) 132 133 { 133 134 /* … … 201 202 it without creating a race with PDMCritSectLeave, resulting in 202 203 spurious wakeups. */ 203 PVMCC pVM = pCritSect->s.CTX_SUFF(pVM); AssertPtr(pVM); 204 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu); 204 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu); 205 205 rc = VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VM_R0_PREEMPT, NULL); 206 206 AssertRC(rc); 207 # else 208 RT_NOREF(pVM); 207 209 # endif 208 210 } … … 220 222 * during the operation. 221 223 * 224 * @param pVM The cross context VM structure. 222 225 * @param pCritSect The PDM critical section to enter. 223 226 * @param rcBusy The status code to return when we're in GC or R0 224 227 * @param pSrcPos The source position of the lock operation. 225 228 */ 226 DECL_FORCE_INLINE(int) pdmCritSectEnter(P PDMCRITSECT pCritSect, int rcBusy, PCRTLOCKVALSRCPOS pSrcPos)229 DECL_FORCE_INLINE(int) pdmCritSectEnter(PVMCC pVM, PPDMCRITSECT pCritSect, int rcBusy, PCRTLOCKVALSRCPOS pSrcPos) 227 230 { 228 231 Assert(pCritSect->s.Core.cNestings < 8); /* useful to catch incorrect locking */ … … 245 248 return VINF_SUCCESS; 246 249 247 RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pCritSect); 250 Assert(pCritSect->s.CTX_SUFF(pVM) == pVM); RT_NOREF(pVM); 251 RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect); 248 252 /* ... not owned ... */ 249 253 if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1)) … … 286 290 */ 287 291 NOREF(rcBusy); 288 return pdmR3R0CritSectEnterContended(p CritSect, hNativeSelf, pSrcPos);292 return pdmR3R0CritSectEnterContended(pVM, pCritSect, hNativeSelf, pSrcPos); 289 293 290 294 #else … … 320 324 { 321 325 STAM_REL_COUNTER_ADD(&pCritSect->s.StatContentionRZLock, 1000000); 322 rc = pdmR3R0CritSectEnterContended(p CritSect, hNativeSelf, pSrcPos);326 rc = pdmR3R0CritSectEnterContended(pVM, pCritSect, hNativeSelf, pSrcPos); 323 327 } 324 328 else … … 330 334 RTThreadPreemptRestore(NIL_RTTHREAD, XXX); 331 335 332 rc = pdmR3R0CritSectEnterContended(p CritSect, hNativeSelf, pSrcPos);336 rc = pdmR3R0CritSectEnterContended(pVM, pCritSect, hNativeSelf, pSrcPos); 333 337 334 338 RTThreadPreemptDisable(NIL_RTTHREAD, XXX); … … 343 347 if ( RTThreadPreemptIsEnabled(NIL_RTTHREAD) 344 348 && ASMIntAreEnabled()) 345 return pdmR3R0CritSectEnterContended(p CritSect, hNativeSelf, pSrcPos);349 return pdmR3R0CritSectEnterContended(pVM, pCritSect, hNativeSelf, pSrcPos); 346 350 # endif 347 351 # endif /* IN_RING0 */ … … 354 358 if (rcBusy == VINF_SUCCESS) 355 359 { 356 PVMC C pVM = pCritSect->s.CTX_SUFF(pVM); AssertPtr(pVM);357 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu);360 PVMCPUCC pVCpu = VMMGetCpu(pVM); 361 AssertReturn(pVCpu, VERR_PDM_CRITSECT_IPE); 358 362 return VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_PDM_CRIT_SECT_ENTER, MMHyperCCToR3(pVM, pCritSect)); 359 363 } … … 376 380 * during the operation. 377 381 * 382 * @param pVM The cross context VM structure. 378 383 * @param pCritSect The PDM critical section to enter. 379 384 * @param rcBusy The status code to return when we're in RC or R0 … … 382 387 * call if necessary. 383 388 */ 384 VMMDECL(int) PDMCritSectEnter(P PDMCRITSECT pCritSect, int rcBusy)389 VMMDECL(int) PDMCritSectEnter(PVMCC pVM, PPDMCRITSECT pCritSect, int rcBusy) 385 390 { 386 391 #ifndef PDMCRITSECT_STRICT 387 return pdmCritSectEnter(p CritSect, rcBusy, NULL);392 return pdmCritSectEnter(pVM, pCritSect, rcBusy, NULL); 388 393 #else 389 394 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 390 return pdmCritSectEnter(p CritSect, rcBusy, &SrcPos);395 return pdmCritSectEnter(pVM, pCritSect, rcBusy, &SrcPos); 391 396 #endif 392 397 } … … 401 406 * during the operation. 402 407 * 408 * @param pVM The cross context VM structure. 403 409 * @param pCritSect The PDM critical section to enter. 404 410 * @param rcBusy The status code to return when we're in RC or R0 … … 411 417 * acquired from. Optional. 412 418 */ 413 VMMDECL(int) PDMCritSectEnterDebug(P PDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL)419 VMMDECL(int) PDMCritSectEnterDebug(PVMCC pVM, PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL) 414 420 { 415 421 #ifdef PDMCRITSECT_STRICT 416 422 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 417 return pdmCritSectEnter(p CritSect, rcBusy, &SrcPos);423 return pdmCritSectEnter(pVM, pCritSect, rcBusy, &SrcPos); 418 424 #else 419 425 NOREF(uId); RT_SRC_POS_NOREF(); 420 return pdmCritSectEnter(p CritSect, rcBusy, NULL);426 return pdmCritSectEnter(pVM, pCritSect, rcBusy, NULL); 421 427 #endif 422 428 } … … 432 438 * during the operation. 433 439 * 440 * @param pVM The cross context VM structure. 434 441 * @param pCritSect The critical section. 435 442 * @param pSrcPos The source position of the lock operation. 436 443 */ 437 static int pdmCritSectTryEnter(P PDMCRITSECT pCritSect, PCRTLOCKVALSRCPOS pSrcPos)444 static int pdmCritSectTryEnter(PVMCC pVM, PPDMCRITSECT pCritSect, PCRTLOCKVALSRCPOS pSrcPos) 438 445 { 439 446 /* … … 453 460 return VINF_SUCCESS; 454 461 455 RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pCritSect); 462 Assert(pCritSect->s.CTX_SUFF(pVM) == pVM); 463 RTNATIVETHREAD hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect); 456 464 /* ... not owned ... */ 457 465 if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1)) … … 495 503 * during the operation. 496 504 * 505 * @param pVM The cross context VM structure. 497 506 * @param pCritSect The critical section. 498 507 */ 499 VMMDECL(int) PDMCritSectTryEnter(P PDMCRITSECT pCritSect)508 VMMDECL(int) PDMCritSectTryEnter(PVMCC pVM, PPDMCRITSECT pCritSect) 500 509 { 501 510 #ifndef PDMCRITSECT_STRICT 502 return pdmCritSectTryEnter(p CritSect, NULL);511 return pdmCritSectTryEnter(pVM, pCritSect, NULL); 503 512 #else 504 513 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); 505 return pdmCritSectTryEnter(p CritSect, &SrcPos);514 return pdmCritSectTryEnter(pVM, pCritSect, &SrcPos); 506 515 #endif 507 516 } … … 517 526 * during the operation. 518 527 * 528 * @param pVM The cross context VM structure. 519 529 * @param pCritSect The critical section. 520 530 * @param uId Some kind of locking location ID. Typically a … … 523 533 * acquired from. Optional. 524 534 */ 525 VMMDECL(int) PDMCritSectTryEnterDebug(P PDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)535 VMMDECL(int) PDMCritSectTryEnterDebug(PVMCC pVM, PPDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL) 526 536 { 527 537 #ifdef PDMCRITSECT_STRICT 528 538 RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); 529 return pdmCritSectTryEnter(p CritSect, &SrcPos);539 return pdmCritSectTryEnter(pVM, pCritSect, &SrcPos); 530 540 #else 531 541 NOREF(uId); RT_SRC_POS_NOREF(); 532 return pdmCritSectTryEnter(p CritSect, NULL);542 return pdmCritSectTryEnter(pVM, pCritSect, NULL); 533 543 #endif 534 544 } … … 544 554 * during the operation. 545 555 * 556 * @param pVM The cross context VM structure. 546 557 * @param pCritSect The PDM critical section to enter. 547 558 * @param fCallRing3 Whether this is a VMMRZCallRing3()request. 548 559 */ 549 VMMR3DECL(int) PDMR3CritSectEnterEx(P PDMCRITSECT pCritSect, bool fCallRing3)550 { 551 int rc = PDMCritSectEnter(p CritSect, VERR_IGNORED);560 VMMR3DECL(int) PDMR3CritSectEnterEx(PVM pVM, PPDMCRITSECT pCritSect, bool fCallRing3) 561 { 562 int rc = PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 552 563 if ( rc == VINF_SUCCESS 553 564 && fCallRing3 … … 568 579 * @retval VERR_NOT_OWNER if you somehow ignore release assertions. 569 580 * 570 * @param pCritSect The PDM critical section to leave. 571 */ 572 VMMDECL(int) PDMCritSectLeave(PPDMCRITSECT pCritSect) 581 * @param pVM The cross context VM structure. 582 * @param pCritSect The PDM critical section to leave. 583 */ 584 VMMDECL(int) PDMCritSectLeave(PVMCC pVM, PPDMCRITSECT pCritSect) 573 585 { 574 586 AssertMsg(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC, ("%p %RX32\n", pCritSect, pCritSect->s.Core.u32Magic)); … … 584 596 * Always check that the caller is the owner (screw performance). 585 597 */ 586 RTNATIVETHREAD const hNativeSelf = pdmCritSectGetNativeSelf(pCritSect); 598 Assert(pCritSect->s.CTX_SUFF(pVM) == pVM); RT_NOREF(pVM); 599 RTNATIVETHREAD const hNativeSelf = pdmCritSectGetNativeSelf(pVM, pCritSect); 587 600 AssertReleaseMsgReturn(pCritSect->s.Core.NativeThreadOwner == hNativeSelf, 588 601 ("%p %s: %p != %p; cLockers=%d cNestings=%d\n", pCritSect, R3STRING(pCritSect->s.pszName), … … 648 661 /* Someone is waiting, wake up one of them. */ 649 662 SUPSEMEVENT hEvent = (SUPSEMEVENT)pCritSect->s.Core.EventSem; 650 PSUPDRVSESSION pSession = p CritSect->s.CTX_SUFF(pVM)->pSession;663 PSUPDRVSESSION pSession = pVM->pSession; 651 664 int rc = SUPSemEventSignal(pSession, hEvent); 652 665 AssertRC(rc); … … 659 672 { 660 673 Log8(("Signalling %#p\n", hEventToSignal)); 661 int rc = SUPSemEventSignal(p CritSect->s.CTX_SUFF(pVM)->pSession, hEventToSignal);674 int rc = SUPSemEventSignal(pVM->pSession, hEventToSignal); 662 675 AssertRC(rc); 663 676 } … … 707 720 * Queue the request. 708 721 */ 709 PVMCC pVM = pCritSect->s.CTX_SUFF(pVM); AssertPtr(pVM);710 722 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu); 711 723 uint32_t i = pVCpu->pdm.s.cQueuedCritSectLeaves++; … … 762 774 * @returns true if owner. 763 775 * @returns false if not owner. 776 * @param pVM The cross context VM structure. 764 777 * @param pCritSect The critical section. 765 778 */ 766 VMMDECL(bool) PDMCritSectIsOwner(P CPDMCRITSECT pCritSect)779 VMMDECL(bool) PDMCritSectIsOwner(PVMCC pVM, PCPDMCRITSECT pCritSect) 767 780 { 768 781 #ifdef IN_RING3 782 RT_NOREF(pVM); 769 783 return RTCritSectIsOwner(&pCritSect->s.Core); 770 784 #else 771 PVMC C pVM = pCritSect->s.CTX_SUFF(pVM); AssertPtr(pVM);772 PVMCPUCC pVCpu = VMMGetCpu(pVM); AssertPtr(pVCpu);773 if (pCritSect->s.Core.NativeThreadOwner != pVCpu->hNativeThread)785 PVMCPUCC pVCpu = VMMGetCpu(pVM); 786 if ( !pVCpu 787 || pCritSect->s.Core.NativeThreadOwner != pVCpu->hNativeThread) 774 788 return false; 775 789 return (pCritSect->s.Core.fFlags & PDMCRITSECT_FLAGS_PENDING_UNLOCK) == 0 … … 784 798 * @returns true if owner. 785 799 * @returns false if not owner. 800 * @param pVCpu The cross context virtual CPU structure. 786 801 * @param pCritSect The critical section. 787 * @param pVCpu The cross context virtual CPU structure. 788 */ 789 VMMDECL(bool) PDMCritSectIsOwnerEx(PCPDMCRITSECT pCritSect, PVMCPUCC pVCpu) 802 */ 803 VMMDECL(bool) PDMCritSectIsOwnerEx(PVMCPUCC pVCpu, PCPDMCRITSECT pCritSect) 790 804 { 791 805 #ifdef IN_RING3 … … 807 821 * @returns true if someone is waiting. 808 822 * @returns false if no one is waiting. 823 * @param pVM The cross context VM structure. 809 824 * @param pCritSect The critical section. 810 825 */ 811 VMMDECL(bool) PDMCritSectHasWaiters(P CPDMCRITSECT pCritSect)826 VMMDECL(bool) PDMCritSectHasWaiters(PVMCC pVM, PCPDMCRITSECT pCritSect) 812 827 { 813 828 AssertReturn(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC, false); 814 Assert(pCritSect->s.Core.NativeThreadOwner == pdmCritSectGetNativeSelf(p CritSect));829 Assert(pCritSect->s.Core.NativeThreadOwner == pdmCritSectGetNativeSelf(pVM, pCritSect)); RT_NOREF(pVM); 815 830 return pCritSect->s.Core.cLockers >= pCritSect->s.Core.cNestings; 816 831 } -
trunk/src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp
r82968 r90346 36 36 * Process the critical sections (both types) queued for ring-3 'leave'. 37 37 * 38 * @param pVM The cross context VM structure. 38 39 * @param pVCpu The cross context virtual CPU structure. 39 40 */ 40 VMM_INT_DECL(void) PDMCritSectBothFF(PVMC PUCC pVCpu)41 VMM_INT_DECL(void) PDMCritSectBothFF(PVMCC pVM, PVMCPUCC pVCpu) 41 42 { 42 43 uint32_t i; … … 88 89 # endif 89 90 90 PDMCritSectLeave(p CritSect);91 PDMCritSectLeave(pVM, pCritSect); 91 92 LogFlow(("PDMR3CritSectFF: %p\n", pCritSect)); 92 93 } -
trunk/src/VBox/VMM/VMMAll/PDMAllNetShaper.cpp
r82968 r90346 36 36 * @param cbTransfer Number of bytes to allocate. 37 37 */ 38 VMM DECL(bool) PDMNsAllocateBandwidth(PPDMNSFILTER pFilter, size_t cbTransfer)38 VMM_INT_DECL(bool) PDMNetShaperAllocateBandwidth(PVMCC pVM, PPDMNSFILTER pFilter, size_t cbTransfer) 39 39 { 40 40 AssertPtrReturn(pFilter, true); … … 43 43 44 44 PPDMNSBWGROUP pBwGroup = ASMAtomicReadPtrT(&pFilter->CTX_SUFF(pBwGroup), PPDMNSBWGROUP); 45 int rc = PDMCritSectEnter( &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc);45 int rc = PDMCritSectEnter(pVM, &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 46 46 if (RT_UNLIKELY(rc == VERR_SEM_BUSY)) 47 47 return true; … … 72 72 pBwGroup, R3STRING(pBwGroup->pszNameR3), fAllowed)); 73 73 74 rc = PDMCritSectLeave( &pBwGroup->Lock); AssertRC(rc);74 rc = PDMCritSectLeave(pVM, &pBwGroup->Lock); AssertRC(rc); 75 75 return fAllowed; 76 76 } -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r87515 r90346 889 889 VMMDECL(int) PGMTrap0eHandler(PVMCPUCC pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault) 890 890 { 891 PVM pVM = pVCpu->CTX_SUFF(pVM);891 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 892 892 893 893 Log(("PGMTrap0eHandler: uErr=%RGx pvFault=%RGv eip=%04x:%RGv cr3=%RGp\n", uErr, pvFault, pRegFrame->cs.Sel, (RTGCPTR)pRegFrame->rip, (RTGCPHYS)CPUMGetGuestCR3(pVCpu))); … … 1540 1540 DECLINLINE(int) pgmShwGetPaePoolPagePD(PVMCPUCC pVCpu, RTGCPTR GCPtr, PPGMPOOLPAGE *ppShwPde) 1541 1541 { 1542 PVM pVM = pVCpu->CTX_SUFF(pVM);1542 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 1543 1543 PGM_LOCK_ASSERT_OWNER(pVM); 1544 1544 … … 1710 1710 DECLINLINE(int) pgmShwGetLongModePDPtr(PVMCPUCC pVCpu, RTGCPTR64 GCPtr, PX86PML4E *ppPml4e, PX86PDPT *ppPdpt, PX86PDPAE *ppPD) 1711 1711 { 1712 PVM pVM = pVCpu->CTX_SUFF(pVM);1712 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 1713 1713 PGM_LOCK_ASSERT_OWNER(pVM); 1714 1714 … … 3490 3490 * @param pVM The cross context VM structure. 3491 3491 */ 3492 VMMDECL(bool) PGMIsLockOwner(PVM pVM)3493 { 3494 return PDMCritSectIsOwner( &pVM->pgm.s.CritSectX);3492 VMMDECL(bool) PGMIsLockOwner(PVMCC pVM) 3493 { 3494 return PDMCritSectIsOwner(pVM, &pVM->pgm.s.CritSectX); 3495 3495 } 3496 3496 … … 3526 3526 { 3527 3527 #if defined(VBOX_STRICT) && defined(IN_RING3) 3528 int rc = PDMCritSectEnterDebug( &pVM->pgm.s.CritSectX, VERR_SEM_BUSY, (uintptr_t)ASMReturnAddress(), RT_SRC_POS_ARGS);3528 int rc = PDMCritSectEnterDebug(pVM, &pVM->pgm.s.CritSectX, VERR_SEM_BUSY, (uintptr_t)ASMReturnAddress(), RT_SRC_POS_ARGS); 3529 3529 #else 3530 int rc = PDMCritSectEnter( &pVM->pgm.s.CritSectX, VERR_SEM_BUSY);3530 int rc = PDMCritSectEnter(pVM, &pVM->pgm.s.CritSectX, VERR_SEM_BUSY); 3531 3531 #endif 3532 3532 #ifdef IN_RING0 … … 3545 3545 * @param pVM The cross context VM structure. 3546 3546 */ 3547 void pgmUnlock(PVM pVM)3547 void pgmUnlock(PVMCC pVM) 3548 3548 { 3549 3549 uint32_t cDeprecatedPageLocks = pVM->pgm.s.cDeprecatedPageLocks; 3550 3550 pVM->pgm.s.cDeprecatedPageLocks = 0; 3551 int rc = PDMCritSectLeave( &pVM->pgm.s.CritSectX);3551 int rc = PDMCritSectLeave(pVM, &pVM->pgm.s.CritSectX); 3552 3552 if (rc == VINF_SEM_NESTED) 3553 3553 pVM->pgm.s.cDeprecatedPageLocks = cDeprecatedPageLocks; -
trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
r86473 r90346 1682 1682 * @param pVM The cross context VM structure. 1683 1683 */ 1684 VMMDECL(unsigned) PGMAssertHandlerAndFlagsInSync(PVM pVM)1684 VMMDECL(unsigned) PGMAssertHandlerAndFlagsInSync(PVMCC pVM) 1685 1685 { 1686 1686 PPGM pPGM = &pVM->pgm.s; -
trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
r90162 r90346 598 598 * @param GCPhys GCPhys entry to flush 599 599 */ 600 void pgmPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys)600 void pgmPhysInvalidatePageMapTLBEntry(PVMCC pVM, RTGCPHYS GCPhys) 601 601 { 602 602 PGM_LOCK_ASSERT_OWNER(pVM); -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r87141 r90346 59 59 60 60 int pgmPoolTrackFlushGCPhysPTsSlow(PVMCC pVM, PPGMPAGE pPhysPage); 61 PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVM pVM, uint16_t *piPhysExt);62 void pgmPoolTrackPhysExtFree(PVM pVM, uint16_t iPhysExt);63 void pgmPoolTrackPhysExtFreeList(PVM pVM, uint16_t iPhysExt);61 PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVMCC pVM, uint16_t *piPhysExt); 62 void pgmPoolTrackPhysExtFree(PVMCC pVM, uint16_t iPhysExt); 63 void pgmPoolTrackPhysExtFreeList(PVMCC pVM, uint16_t iPhysExt); 64 64 65 65 RT_C_DECLS_END … … 1793 1793 * @param GCPhys Guest physical address 1794 1794 */ 1795 bool pgmPoolIsDirtyPageSlow(PVM pVM, RTGCPHYS GCPhys)1795 bool pgmPoolIsDirtyPageSlow(PVMCC pVM, RTGCPHYS GCPhys) 1796 1796 { 1797 1797 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); … … 1861 1861 * @param GCPtrPage Guest page to invalidate 1862 1862 */ 1863 void pgmPoolResetDirtyPage(PVM pVM, RTGCPTR GCPtrPage)1863 void pgmPoolResetDirtyPage(PVMCC pVM, RTGCPTR GCPtrPage) 1864 1864 { 1865 1865 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); … … 3392 3392 * @param iPhysExt The physical cross reference extent list to flush. 3393 3393 */ 3394 static void pgmPoolTrackFlushGCPhysPTs(PVM pVM, PPGMPAGE pPhysPage, bool fFlushPTEs, uint16_t iPhysExt)3394 static void pgmPoolTrackFlushGCPhysPTs(PVMCC pVM, PPGMPAGE pPhysPage, bool fFlushPTEs, uint16_t iPhysExt) 3395 3395 { 3396 3396 PGM_LOCK_ASSERT_OWNER(pVM); … … 3868 3868 * @param piPhysExt Where to store the phys ext index. 3869 3869 */ 3870 PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVM pVM, uint16_t *piPhysExt)3870 PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVMCC pVM, uint16_t *piPhysExt) 3871 3871 { 3872 3872 PGM_LOCK_ASSERT_OWNER(pVM); … … 3892 3892 * @param iPhysExt The extent to free. 3893 3893 */ 3894 void pgmPoolTrackPhysExtFree(PVM pVM, uint16_t iPhysExt)3894 void pgmPoolTrackPhysExtFree(PVMCC pVM, uint16_t iPhysExt) 3895 3895 { 3896 3896 PGM_LOCK_ASSERT_OWNER(pVM); … … 3914 3914 * @param iPhysExt The extent to free. 3915 3915 */ 3916 void pgmPoolTrackPhysExtFreeList(PVM pVM, uint16_t iPhysExt)3916 void pgmPoolTrackPhysExtFreeList(PVMCC pVM, uint16_t iPhysExt) 3917 3917 { 3918 3918 PGM_LOCK_ASSERT_OWNER(pVM); … … 3951 3951 * 3952 3952 */ 3953 static uint16_t pgmPoolTrackPhysExtInsert(PVM pVM, uint16_t iPhysExt, uint16_t iShwPT, uint16_t iPte)3953 static uint16_t pgmPoolTrackPhysExtInsert(PVMCC pVM, uint16_t iPhysExt, uint16_t iShwPT, uint16_t iPte) 3954 3954 { 3955 3955 PGM_LOCK_ASSERT_OWNER(pVM); -
trunk/src/VBox/VMM/VMMAll/PGMAllShw.h
r86489 r90346 317 317 318 318 #else /* PGM_SHW_TYPE != PGM_TYPE_NONE */ 319 PVM pVM = pVCpu->CTX_SUFF(pVM);319 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 320 320 321 321 PGM_LOCK_ASSERT_OWNER(pVM); -
trunk/src/VBox/VMM/VMMAll/TMAll.cpp
r88076 r90346 74 74 PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(a_pVM, a_pTimer); \ 75 75 AssertMsg( pCritSect \ 76 && ( PDMCritSectIsOwner( pCritSect) \76 && ( PDMCritSectIsOwner((a_pVM), pCritSect) \ 77 77 || (enmState = (a_pVM)->enmVMState) == VMSTATE_CREATING \ 78 78 || enmState == VMSTATE_RESETTING \ … … 107 107 PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(pVM, pTimer); \ 108 108 AssertMsg( pCritSect \ 109 && ( !PDMCritSectIsOwner( pCritSect) \110 || PDMCritSectIsOwner( &pVM->tm.s.VirtualSyncLock) \109 && ( !PDMCritSectIsOwner((pVM), pCritSect) \ 110 || PDMCritSectIsOwner((pVM), &(pVM)->tm.s.VirtualSyncLock) \ 111 111 || (enmState = (pVM)->enmVMState) == VMSTATE_CREATING \ 112 112 || enmState == VMSTATE_RESETTING \ … … 363 363 DECLINLINE(void) tmSchedule(PVMCC pVM, PTMTIMERQUEUECC pQueueCC, PTMTIMERQUEUE pQueue, PTMTIMER pTimer) 364 364 { 365 int rc = PDMCritSectTryEnter( &pQueue->TimerLock);365 int rc = PDMCritSectTryEnter(pVM, &pQueue->TimerLock); 366 366 if (RT_SUCCESS_NP(rc)) 367 367 { … … 373 373 #endif 374 374 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatScheduleOne), a); 375 PDMCritSectLeave( &pQueue->TimerLock);375 PDMCritSectLeave(pVM, &pQueue->TimerLock); 376 376 return; 377 377 } … … 621 621 void tmTimerQueueSchedule(PVMCC pVM, PTMTIMERQUEUECC pQueueCC, PTMTIMERQUEUE pQueue) 622 622 { 623 Assert(PDMCritSectIsOwner( &pQueue->TimerLock));623 Assert(PDMCritSectIsOwner(pVM, &pQueue->TimerLock)); 624 624 625 625 /* … … 666 666 Assert(pQueue->enmClock == (TMCLOCK)idxQueue); 667 667 668 int rc = PDMCritSectTryEnter( &pQueue->TimerLock);668 int rc = PDMCritSectTryEnter(pVM, &pQueue->TimerLock); 669 669 if (RT_SUCCESS(rc)) 670 670 { 671 671 if ( pQueue->enmClock != TMCLOCK_VIRTUAL_SYNC 672 || PDMCritSectTryEnter( &pVM->tm.s.VirtualSyncLock) == VINF_SUCCESS)672 || PDMCritSectTryEnter(pVM, &pVM->tm.s.VirtualSyncLock) == VINF_SUCCESS) 673 673 { 674 674 /* Check the linking of the active lists. */ … … 769 769 770 770 if (pQueue->enmClock == TMCLOCK_VIRTUAL_SYNC) 771 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);771 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 772 772 } 773 PDMCritSectLeave( &pQueue->TimerLock);773 PDMCritSectLeave(pVM, &pQueue->TimerLock); 774 774 } 775 775 } … … 1147 1147 TMTIMER_HANDLE_TO_VARS_RETURN(pVM, hTimer); /* => pTimer, pQueueCC, pQueue, idxTimer, idxQueue */ 1148 1148 AssertReturn(idxQueue == TMCLOCK_VIRTUAL_SYNC, VERR_NOT_SUPPORTED); 1149 return PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, rcBusy);1149 return PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, rcBusy); 1150 1150 } 1151 1151 … … 1161 1161 TMTIMER_HANDLE_TO_VARS_RETURN_VOID(pVM, hTimer); /* => pTimer, pQueueCC, pQueue, idxTimer, idxQueue */ 1162 1162 AssertReturnVoid(idxQueue == TMCLOCK_VIRTUAL_SYNC); 1163 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);1163 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 1164 1164 } 1165 1165 … … 1176 1176 TMTIMER_HANDLE_TO_VARS_RETURN_EX(pVM, hTimer, false); /* => pTimer, pQueueCC, pQueue, idxTimer, idxQueue */ 1177 1177 AssertReturn(idxQueue == TMCLOCK_VIRTUAL_SYNC, false); 1178 return PDMCritSectIsOwner( &pVM->tm.s.VirtualSyncLock);1178 return PDMCritSectIsOwner(pVM, &pVM->tm.s.VirtualSyncLock); 1179 1179 } 1180 1180 … … 1236 1236 VM_ASSERT_EMT(pVM); 1237 1237 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer); 1238 int rc = PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS);1238 int rc = PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS); 1239 1239 AssertRCReturn(rc, rc); 1240 1240 … … 1287 1287 1288 1288 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetVs), a); 1289 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);1289 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 1290 1290 return rc; 1291 1291 } … … 1344 1344 { 1345 1345 /* Try take the TM lock and check the state again. */ 1346 int rc = PDMCritSectTryEnter( &pQueue->TimerLock);1346 int rc = PDMCritSectTryEnter(pVM, &pQueue->TimerLock); 1347 1347 if (RT_SUCCESS_NP(rc)) 1348 1348 { … … 1351 1351 tmTimerSetOptimizedStart(pVM, pTimer, u64Expire, pQueue, idxQueue); 1352 1352 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a); 1353 PDMCritSectLeave( &pQueue->TimerLock);1353 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1354 1354 return VINF_SUCCESS; 1355 1355 } 1356 PDMCritSectLeave( &pQueue->TimerLock);1356 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1357 1357 } 1358 1358 } … … 1543 1543 VM_ASSERT_EMT(pVM); 1544 1544 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer); 1545 int rc = PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS);1545 int rc = PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS); 1546 1546 AssertRCReturn(rc, rc); 1547 1547 … … 1598 1598 1599 1599 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelativeVs), a); 1600 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);1600 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 1601 1601 return rc; 1602 1602 } … … 1662 1662 * get the innermost locks. 1663 1663 */ 1664 bool fOwnTMLock = RT_SUCCESS_NP(PDMCritSectTryEnter( &pQueue->TimerLock));1664 bool fOwnTMLock = RT_SUCCESS_NP(PDMCritSectTryEnter(pVM, &pQueue->TimerLock)); 1665 1665 #if 1 1666 1666 if ( fOwnTMLock … … 1674 1674 tmTimerSetRelativeOptimizedStart(pVM, pTimer, cTicksToNext, pu64Now, pQueueCC, pQueue); 1675 1675 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a); 1676 PDMCritSectLeave( &pQueue->TimerLock);1676 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1677 1677 return VINF_SUCCESS; 1678 1678 } … … 1814 1814 */ 1815 1815 if (!fOwnTMLock) 1816 fOwnTMLock = RT_SUCCESS_NP(PDMCritSectTryEnter( &pQueue->TimerLock));1816 fOwnTMLock = RT_SUCCESS_NP(PDMCritSectTryEnter(pVM, &pQueue->TimerLock)); 1817 1817 1818 1818 } /* for (;;) */ … … 1822 1822 */ 1823 1823 if (fOwnTMLock) 1824 PDMCritSectLeave( &pQueue->TimerLock);1824 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1825 1825 1826 1826 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a); … … 1893 1893 VM_ASSERT_EMT(pVM); 1894 1894 TMTIMER_ASSERT_SYNC_CRITSECT_ORDER(pVM, pTimer); 1895 int rc = PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS);1895 int rc = PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VINF_SUCCESS); 1896 1896 AssertRCReturn(rc, rc); 1897 1897 … … 1947 1947 1948 1948 STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerStopVs), a); 1949 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);1949 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 1950 1950 return rc; 1951 1951 } … … 2617 2617 uint32_t uMaxHzHintQueue; 2618 2618 if ( !(ASMAtomicUoReadU64(&pVM->tm.s.HzHint.u64Combined) & (RT_BIT_32(idxQueue) | RT_BIT_32(idxQueue + 16))) 2619 || RT_FAILURE_NP(PDMCritSectTryEnter( &pQueue->TimerLock)))2619 || RT_FAILURE_NP(PDMCritSectTryEnter(pVM, &pQueue->TimerLock))) 2620 2620 uMaxHzHintQueue = ASMAtomicReadU32(&pQueue->uMaxHzHint); 2621 2621 else … … 2667 2667 uMaxHzHintQueue = ASMAtomicUoReadU32(&pQueue->uMaxHzHint); 2668 2668 2669 PDMCritSectLeave( &pQueue->TimerLock);2669 PDMCritSectLeave(pVM, &pQueue->TimerLock); 2670 2670 } 2671 2671 -
trunk/src/VBox/VMM/VMMAll/TMAllVirtual.cpp
r87792 r90346 437 437 *pcNsToDeadline = tmVirtualVirtToNsDeadline(pVM, cNsToDeadline); 438 438 } 439 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);439 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 440 440 } 441 441 else … … 450 450 Log5(("TMAllVirtual(%u): FF: %d -> 1\n", __LINE__, VMCPU_FF_IS_SET(pVCpuDst, VMCPU_FF_TIMER))); 451 451 Log4(("TM: %'RU64/-%'8RU64: exp tmr=>ff [vsghcul]\n", u64, pVM->tm.s.offVirtualSync - pVM->tm.s.offVirtualSyncGivenUp)); 452 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);452 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 453 453 454 454 if (pcNsToDeadline) … … 488 488 { 489 489 u64 = ASMAtomicUoReadU64(&pVM->tm.s.u64VirtualSync); 490 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);490 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 491 491 if (pcNsToDeadline) 492 492 *pcNsToDeadline = 0; … … 526 526 { 527 527 ASMAtomicWriteU64(&pVM->tm.s.u64VirtualSync, u64); 528 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);528 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 529 529 if (pcNsToDeadline) 530 530 *pcNsToDeadline = tmVirtualVirtToNsDeadline(pVM, u64Expire - u64); … … 541 541 Log5(("TMAllVirtual(%u): FF: %d -> 1\n", __LINE__, VMCPU_FF_IS_SET(pVCpuDst, VMCPU_FF_TIMER))); 542 542 Log4(("TM: %'RU64/-%'8RU64: exp tmr=>ff [vsgl]\n", u64, pVM->tm.s.offVirtualSync - pVM->tm.s.offVirtualSyncGivenUp)); 543 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);543 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 544 544 545 545 #ifdef IN_RING3 … … 617 617 /** @todo switch this around, have the tmVirtualSyncGetLocked code inlined 618 618 * here and the remainder of this function in a static worker. */ 619 if (PDMCritSectTryEnter( &pVM->tm.s.VirtualSyncLock) == VINF_SUCCESS)619 if (PDMCritSectTryEnter(pVM, &pVM->tm.s.VirtualSyncLock) == VINF_SUCCESS) 620 620 return tmVirtualSyncGetLocked(pVM, u64, pcNsToDeadline, pnsAbsDeadline); 621 621 … … 689 689 { 690 690 /* Try grab the lock, things get simpler when owning the lock. */ 691 int rcLock = PDMCritSectTryEnter( &pVM->tm.s.VirtualSyncLock);691 int rcLock = PDMCritSectTryEnter(pVM, &pVM->tm.s.VirtualSyncLock); 692 692 if (RT_SUCCESS_NP(rcLock)) 693 693 return tmVirtualSyncGetLocked(pVM, u64, pcNsToDeadline, pnsAbsDeadline); -
trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
r89620 r90346 497 497 { 498 498 PDMDEV_ASSERT_DEVINS(pDevIns); 499 VBOXSTRICTRC rc = TMTimerLock(pDevIns->Internal.s.pGVM, hTimer, rcBusy); 499 PGVM const pGVM = pDevIns->Internal.s.pGVM; 500 VBOXSTRICTRC rc = TMTimerLock(pGVM, hTimer, rcBusy); 500 501 if (rc == VINF_SUCCESS) 501 502 { 502 rc = PDMCritSectEnter(p CritSect, rcBusy);503 rc = PDMCritSectEnter(pGVM, pCritSect, rcBusy); 503 504 if (rc == VINF_SUCCESS) 504 505 return rc; 505 506 AssertRC(VBOXSTRICTRC_VAL(rc)); 506 TMTimerUnlock(p DevIns->Internal.s.pGVM, hTimer);507 TMTimerUnlock(pGVM, hTimer); 507 508 } 508 509 else … … 580 581 { 581 582 PDMDEV_ASSERT_DEVINS(pDevIns); 582 TMTimerUnlock(pDevIns->Internal.s.pGVM, hTimer); 583 int rc = PDMCritSectLeave(pCritSect); 583 PGVM const pGVM = pDevIns->Internal.s.pGVM; 584 TMTimerUnlock(pGVM, hTimer); 585 int rc = PDMCritSectLeave(pGVM, pCritSect); 584 586 AssertRC(rc); 585 587 } … … 863 865 { 864 866 PDMDEV_ASSERT_DEVINS(pDevIns); 865 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 866 return PDMCritSectEnter(pCritSect, rcBusy); 867 return PDMCritSectEnter(pDevIns->Internal.s.pGVM, pCritSect, rcBusy); 867 868 } 868 869 … … 872 873 { 873 874 PDMDEV_ASSERT_DEVINS(pDevIns); 874 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 875 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 875 return PDMCritSectEnterDebug(pDevIns->Internal.s.pGVM, pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 876 876 } 877 877 … … 881 881 { 882 882 PDMDEV_ASSERT_DEVINS(pDevIns); 883 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 884 return PDMCritSectTryEnter(pCritSect); 883 return PDMCritSectTryEnter(pDevIns->Internal.s.pGVM, pCritSect); 885 884 } 886 885 … … 890 889 { 891 890 PDMDEV_ASSERT_DEVINS(pDevIns); 892 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 893 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 891 return PDMCritSectTryEnterDebug(pDevIns->Internal.s.pGVM, pCritSect, uId, RT_SRC_POS_ARGS); 894 892 } 895 893 … … 899 897 { 900 898 PDMDEV_ASSERT_DEVINS(pDevIns); 901 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 902 return PDMCritSectLeave(pCritSect); 899 return PDMCritSectLeave(pDevIns->Internal.s.pGVM, pCritSect); 903 900 } 904 901 … … 908 905 { 909 906 PDMDEV_ASSERT_DEVINS(pDevIns); 910 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pGVM to the crit sect code. */ 911 return PDMCritSectIsOwner(pCritSect); 907 return PDMCritSectIsOwner(pDevIns->Internal.s.pGVM, pCritSect); 912 908 } 913 909 … … 926 922 { 927 923 PDMDEV_ASSERT_DEVINS(pDevIns); 928 RT_NOREF(pDevIns); 929 return PDMCritSectHasWaiters(pCritSect); 924 return PDMCritSectHasWaiters(pDevIns->Internal.s.pGVM, pCritSect); 930 925 } 931 926 -
trunk/src/VBox/VMM/VMMR0/PDMR0Driver.cpp
r90329 r90346 117 117 { 118 118 PDMDRV_ASSERT_DRVINS(pDrvIns); 119 NOREF(pDrvIns); 120 return PDMCritSectEnter(pCritSect, rcBusy); 119 return PDMCritSectEnter(pDrvIns->Internal.s.pVMR0, pCritSect, rcBusy); 121 120 } 122 121 … … 127 126 { 128 127 PDMDRV_ASSERT_DRVINS(pDrvIns); 129 NOREF(pDrvIns); 130 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 128 return PDMCritSectEnterDebug(pDrvIns->Internal.s.pVMR0, pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 131 129 } 132 130 … … 136 134 { 137 135 PDMDRV_ASSERT_DRVINS(pDrvIns); 138 NOREF(pDrvIns); 139 return PDMCritSectTryEnter(pCritSect); 136 return PDMCritSectTryEnter(pDrvIns->Internal.s.pVMR0, pCritSect); 140 137 } 141 138 … … 146 143 { 147 144 PDMDRV_ASSERT_DRVINS(pDrvIns); 148 NOREF(pDrvIns); 149 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 145 return PDMCritSectTryEnterDebug(pDrvIns->Internal.s.pVMR0, pCritSect, uId, RT_SRC_POS_ARGS); 150 146 } 151 147 … … 155 151 { 156 152 PDMDRV_ASSERT_DRVINS(pDrvIns); 157 NOREF(pDrvIns); 158 return PDMCritSectLeave(pCritSect); 153 return PDMCritSectLeave(pDrvIns->Internal.s.pVMR0, pCritSect); 159 154 } 160 155 … … 164 159 { 165 160 PDMDRV_ASSERT_DRVINS(pDrvIns); 166 NOREF(pDrvIns); 167 return PDMCritSectIsOwner(pCritSect); 161 return PDMCritSectIsOwner(pDrvIns->Internal.s.pVMR0, pCritSect); 168 162 } 169 163 … … 182 176 { 183 177 PDMDRV_ASSERT_DRVINS(pDrvIns); 184 NOREF(pDrvIns); 185 return PDMCritSectHasWaiters(pCritSect); 178 return PDMCritSectHasWaiters(pDrvIns->Internal.s.pVMR0, pCritSect); 186 179 } 187 180 … … 206 199 207 200 208 /** @interface_method_impl{PDMDRVHLPR0,pfn} */ 201 /** @interface_method_impl{PDMDRVHLPR0,pfnNetShaperAllocateBandwidth} */ 202 static DECLCALLBACK(bool) pdmR0DrvHlp_NetShaperAllocateBandwidth(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter, size_t cbTransfer) 203 { 204 #ifdef VBOX_WITH_NETSHAPER 205 PDMDRV_ASSERT_DRVINS(pDrvIns); 206 LogFlow(("pdmR0DrvHlp_NetShaperDetach: caller='%s'/%d: pFilter=%p cbTransfer=%#zx\n", 207 pDrvIns->pReg->szName, pDrvIns->iInstance, pFilter, cbTransfer)); 208 209 bool const fRc = PDMNetShaperAllocateBandwidth(pDrvIns->Internal.s.pVMR0, pFilter, cbTransfer); 210 211 LogFlow(("pdmR0DrvHlp_NetShaperDetach: caller='%s'/%d: returns %RTbool\n", pDrvIns->pReg->szName, pDrvIns->iInstance, fRc)); 212 return fRc; 213 #else 214 RT_NOREF(pDrvIns, pFilter, cbTransfer); 215 return true; 216 #endif 217 } 209 218 210 219 … … 231 240 pdmR0DrvHlp_CritSectGetRecursion, 232 241 pdmR0DrvHlp_CritSectScheduleExitEvent, 242 pdmR0DrvHlp_NetShaperAllocateBandwidth, 233 243 PDM_DRVHLPRC_VERSION 234 244 }; -
trunk/src/VBox/VMM/VMMR0/VMMR0.def
r87829 r90346 21 21 ; code 22 22 GIMGetMmio2Regions 23 PDMCritSectEnter24 PDMCritSectEnterDebug25 PDMCritSectIsOwner26 PDMCritSectLeave27 PDMHCCritSectScheduleExitEvent28 PDMCritSectTryEnter29 PDMCritSectTryEnterDebug30 23 PDMQueueAlloc 31 24 PDMQueueInsert … … 85 78 IntNetR0IfWait 86 79 87 ; Network Shaper88 PDMNsAllocateBandwidth89 90 80 ; runtime 91 81 RTAssertMsg1Weak -
trunk/src/VBox/VMM/VMMR3/EM.cpp
r89993 r90346 1484 1484 1485 1485 if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_PDM_CRITSECT)) 1486 PDMCritSectBothFF(pV Cpu);1486 PDMCritSectBothFF(pVM, pVCpu); 1487 1487 1488 1488 /* Update CR3 (Nested Paging case for HM). */ -
trunk/src/VBox/VMM/VMMR3/MMHyper.cpp
r82968 r90346 424 424 PMMHYPERHEAP pHeap = pVM->mm.s.CTX_SUFF(pHyperHeap); 425 425 426 int rc = PDMR3CritSectEnterEx( &pHeap->Lock, true /* fHostCall */);426 int rc = PDMR3CritSectEnterEx(pVM, &pHeap->Lock, true /* fHostCall */); 427 427 AssertRC(rc); 428 428 return rc; -
trunk/src/VBox/VMM/VMMR3/PDM.cpp
r86426 r90346 1307 1307 * 1308 1308 * @returns VBox status code. 1309 * @param pDevIns The device instance. 1310 */ 1311 DECLINLINE(int) pdmR3PowerOnDev(PPDMDEVINS pDevIns) 1309 * @param pVM The cross context VM structure. 1310 * @param pDevIns The device instance. 1311 */ 1312 DECLINLINE(int) pdmR3PowerOnDev(PVM pVM, PPDMDEVINS pDevIns) 1312 1313 { 1313 1314 Assert(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_SUSPENDED); … … 1315 1316 { 1316 1317 LogFlow(("PDMR3PowerOn: Notifying - device '%s'/%d\n", pDevIns->pReg->szName, pDevIns->iInstance)); 1317 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1318 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1318 1319 int rc = VINF_SUCCESS; pDevIns->pReg->pfnPowerOn(pDevIns); 1319 PDMCritSectLeave(p DevIns->pCritSectRoR3);1320 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1320 1321 if (RT_FAILURE(rc)) 1321 1322 { … … 1350 1351 rc = pdmR3PowerOnDrv(pDrvIns, pDevIns->pReg->szName, pDevIns->iInstance, pLun->iLun); 1351 1352 if (RT_SUCCESS(rc)) 1352 rc = pdmR3PowerOnDev(p DevIns);1353 rc = pdmR3PowerOnDev(pVM, pDevIns); 1353 1354 } 1354 1355 … … 1592 1593 * Worker for PDMR3Reset that deals with one device instance. 1593 1594 * 1594 * @param p DevIns The device instance.1595 * @param p Async The structure for recording asynchronous1596 * 1597 */ 1598 DECLINLINE(void) pdmR3ResetDev(P PDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync)1595 * @param pVM The cross context VM structure. 1596 * @param pDevIns The device instance. 1597 * @param pAsync The structure for recording asynchronous notification tasks. 1598 */ 1599 DECLINLINE(void) pdmR3ResetDev(PVM pVM, PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync) 1599 1600 { 1600 1601 if (!(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_RESET)) … … 1604 1605 { 1605 1606 uint64_t cNsElapsed = RTTimeNanoTS(); 1606 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1607 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1607 1608 1608 1609 if (!pDevIns->Internal.s.pfnAsyncNotify) … … 1624 1625 } 1625 1626 1626 PDMCritSectLeave(p DevIns->pCritSectRoR3);1627 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1627 1628 cNsElapsed = RTTimeNanoTS() - cNsElapsed; 1628 1629 if (cNsElapsed >= PDMSUSPEND_WARN_AT_NS) … … 1698 1699 1699 1700 if (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_RESET_NOTIFICATION) 1700 pdmR3ResetDev(p DevIns, &Async);1701 pdmR3ResetDev(pVM, pDevIns, &Async); 1701 1702 1702 1703 if (Async.cAsync == cAsyncStart) … … 1708 1709 if ( Async.cAsync == cAsyncStart 1709 1710 && !(pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_RESET_NOTIFICATION)) 1710 pdmR3ResetDev(p DevIns, &Async);1711 pdmR3ResetDev(pVM, pDevIns, &Async); 1711 1712 } 1712 1713 … … 1761 1762 if (pDevIns->pReg->pfnMemSetup) 1762 1763 { 1763 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1764 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1764 1765 pDevIns->pReg->pfnMemSetup(pDevIns, enmCtx); 1765 PDMCritSectLeave(p DevIns->pCritSectRoR3);1766 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1766 1767 } 1767 1768 … … 1839 1840 if (pDevIns->pReg->pfnSoftReset) 1840 1841 { 1841 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1842 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1842 1843 pDevIns->pReg->pfnSoftReset(pDevIns, fResetFlags); 1843 PDMCritSectLeave(p DevIns->pCritSectRoR3);1844 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1844 1845 } 1845 1846 … … 1947 1948 * Worker for PDMR3Suspend that deals with one device instance. 1948 1949 * 1949 * @param p DevIns The device instance.1950 * @param p Async The structure for recording asynchronous1951 * 1952 */ 1953 DECLINLINE(void) pdmR3SuspendDev(P PDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync)1950 * @param pVM The cross context VM structure. 1951 * @param pDevIns The device instance. 1952 * @param pAsync The structure for recording asynchronous notification tasks. 1953 */ 1954 DECLINLINE(void) pdmR3SuspendDev(PVM pVM, PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync) 1954 1955 { 1955 1956 if (!(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_SUSPENDED)) … … 1959 1960 { 1960 1961 uint64_t cNsElapsed = RTTimeNanoTS(); 1961 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1962 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1962 1963 1963 1964 if (!pDevIns->Internal.s.pfnAsyncNotify) … … 1979 1980 } 1980 1981 1981 PDMCritSectLeave(p DevIns->pCritSectRoR3);1982 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1982 1983 cNsElapsed = RTTimeNanoTS() - cNsElapsed; 1983 1984 if (cNsElapsed >= PDMSUSPEND_WARN_AT_NS) … … 2030 2031 2031 2032 if (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_SUSPEND_NOTIFICATION) 2032 pdmR3SuspendDev(p DevIns, &Async);2033 pdmR3SuspendDev(pVM, pDevIns, &Async); 2033 2034 2034 2035 if (Async.cAsync == cAsyncStart) … … 2040 2041 if ( Async.cAsync == cAsyncStart 2041 2042 && !(pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_SUSPEND_NOTIFICATION)) 2042 pdmR3SuspendDev(p DevIns, &Async);2043 pdmR3SuspendDev(pVM, pDevIns, &Async); 2043 2044 } 2044 2045 … … 2129 2130 * 2130 2131 * @returns VBox status code. 2131 * @param pDevIns The device instance. 2132 */ 2133 DECLINLINE(int) pdmR3ResumeDev(PPDMDEVINS pDevIns) 2132 * @param pVM The cross context VM structure. 2133 * @param pDevIns The device instance. 2134 */ 2135 DECLINLINE(int) pdmR3ResumeDev(PVM pVM, PPDMDEVINS pDevIns) 2134 2136 { 2135 2137 Assert(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_SUSPENDED); … … 2137 2139 { 2138 2140 LogFlow(("PDMR3Resume: Notifying - device '%s'/%d\n", pDevIns->pReg->szName, pDevIns->iInstance)); 2139 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);2141 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 2140 2142 int rc = VINF_SUCCESS; pDevIns->pReg->pfnResume(pDevIns); 2141 PDMCritSectLeave(p DevIns->pCritSectRoR3);2143 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 2142 2144 if (RT_FAILURE(rc)) 2143 2145 { … … 2172 2174 rc = pdmR3ResumeDrv(pDrvIns, pDevIns->pReg->szName, pDevIns->iInstance, pLun->iLun); 2173 2175 if (RT_SUCCESS(rc)) 2174 rc = pdmR3ResumeDev(p DevIns);2176 rc = pdmR3ResumeDev(pVM, pDevIns); 2175 2177 } 2176 2178 … … 2310 2312 * Worker for PDMR3PowerOff that deals with one device instance. 2311 2313 * 2312 * @param p DevIns The device instance.2313 * @param p Async The structure for recording asynchronous2314 * 2315 */ 2316 DECLINLINE(void) pdmR3PowerOffDev(P PDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync)2314 * @param pVM The cross context VM structure. 2315 * @param pDevIns The device instance. 2316 * @param pAsync The structure for recording asynchronous notification tasks. 2317 */ 2318 DECLINLINE(void) pdmR3PowerOffDev(PVM pVM, PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync) 2317 2319 { 2318 2320 if (!(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_SUSPENDED)) … … 2322 2324 { 2323 2325 uint64_t cNsElapsed = RTTimeNanoTS(); 2324 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);2326 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 2325 2327 2326 2328 if (!pDevIns->Internal.s.pfnAsyncNotify) … … 2342 2344 } 2343 2345 2344 PDMCritSectLeave(p DevIns->pCritSectRoR3);2346 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 2345 2347 cNsElapsed = RTTimeNanoTS() - cNsElapsed; 2346 2348 if (cNsElapsed >= PDMPOWEROFF_WARN_AT_NS) … … 2411 2413 2412 2414 if (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_POWEROFF_NOTIFICATION) 2413 pdmR3PowerOffDev(p DevIns, &Async);2415 pdmR3PowerOffDev(pVM, pDevIns, &Async); 2414 2416 2415 2417 if (Async.cAsync == cAsyncStart) … … 2421 2423 if ( Async.cAsync == cAsyncStart 2422 2424 && !(pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_FIRST_POWEROFF_NOTIFICATION)) 2423 pdmR3PowerOffDev(p DevIns, &Async);2425 pdmR3PowerOffDev(pVM, pDevIns, &Async); 2424 2426 } 2425 2427 … … 2672 2674 VMMR3_INT_DECL(int) PDMR3LockCall(PVM pVM) 2673 2675 { 2674 return PDMR3CritSectEnterEx( &pVM->pdm.s.CritSect, true /* fHostCall */);2676 return PDMR3CritSectEnterEx(pVM, &pVM->pdm.s.CritSect, true /* fHostCall */); 2675 2677 } 2676 2678 -
trunk/src/VBox/VMM/VMMR3/PDMCritSect.cpp
r87123 r90346 867 867 RTLOCKVALSRCPOS const SrcPos = pCritSect->s.Core.pValidatorRec->SrcPos; 868 868 #endif 869 PDMCritSectLeave(p CritSect);869 PDMCritSectLeave(pVM, pCritSect); 870 870 871 871 /* … … 889 889 890 890 #ifdef PDMCRITSECT_STRICT 891 int rc = PDMCritSectEnterDebug(p CritSect, VERR_IGNORED,891 int rc = PDMCritSectEnterDebug(pVM, pCritSect, VERR_IGNORED, 892 892 SrcPos.uId, SrcPos.pszFile, SrcPos.uLine, SrcPos.pszFunction); 893 893 #else 894 int rc = PDMCritSectEnter(p CritSect, VERR_IGNORED);894 int rc = PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 895 895 #endif 896 896 AssertLogRelRC(rc); … … 1036 1036 while ( pCur->Core.NativeThreadOwner == hNativeSelf 1037 1037 && pCur->Core.cNestings > 0) 1038 PDMCritSectLeave( (PPDMCRITSECT)pCur);1038 PDMCritSectLeave(pVM, (PPDMCRITSECT)pCur); 1039 1039 } 1040 1040 RTCritSectLeave(&pUVM->pdm.s.ListCritSect); -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r89620 r90346 524 524 { 525 525 PDMDEV_ASSERT_DEVINS(pDevIns); 526 VBOXSTRICTRC rc = TMTimerLock(pDevIns->Internal.s.pVMR3, hTimer, rcBusy); 526 PVM const pVM = pDevIns->Internal.s.pVMR3; 527 VBOXSTRICTRC rc = TMTimerLock(pVM, hTimer, rcBusy); 527 528 if (rc == VINF_SUCCESS) 528 529 { 529 rc = PDMCritSectEnter(p CritSect, rcBusy);530 rc = PDMCritSectEnter(pVM, pCritSect, rcBusy); 530 531 if (rc == VINF_SUCCESS) 531 532 return rc; 532 533 AssertRC(VBOXSTRICTRC_VAL(rc)); 533 TMTimerUnlock(p DevIns->Internal.s.pVMR3, hTimer);534 TMTimerUnlock(pVM, hTimer); 534 535 } 535 536 else … … 607 608 { 608 609 PDMDEV_ASSERT_DEVINS(pDevIns); 609 TMTimerUnlock(pDevIns->Internal.s.pVMR3, hTimer); 610 int rc = PDMCritSectLeave(pCritSect); 610 PVM const pVM = pDevIns->Internal.s.pVMR3; 611 TMTimerUnlock(pVM, hTimer); 612 int rc = PDMCritSectLeave(pVM, pCritSect); 611 613 AssertRC(rc); 612 614 } … … 2786 2788 { 2787 2789 PDMDEV_ASSERT_DEVINS(pDevIns); 2788 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2789 return PDMCritSectEnter(pCritSect, rcBusy); 2790 return PDMCritSectEnter(pDevIns->Internal.s.pVMR3, pCritSect, rcBusy); 2790 2791 } 2791 2792 … … 2795 2796 { 2796 2797 PDMDEV_ASSERT_DEVINS(pDevIns); 2797 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2798 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 2798 return PDMCritSectEnterDebug(pDevIns->Internal.s.pVMR3, pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 2799 2799 } 2800 2800 … … 2804 2804 { 2805 2805 PDMDEV_ASSERT_DEVINS(pDevIns); 2806 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2807 return PDMCritSectTryEnter(pCritSect); 2806 return PDMCritSectTryEnter(pDevIns->Internal.s.pVMR3, pCritSect); 2808 2807 } 2809 2808 … … 2813 2812 { 2814 2813 PDMDEV_ASSERT_DEVINS(pDevIns); 2815 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2816 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 2814 return PDMCritSectTryEnterDebug(pDevIns->Internal.s.pVMR3, pCritSect, uId, RT_SRC_POS_ARGS); 2817 2815 } 2818 2816 … … 2822 2820 { 2823 2821 PDMDEV_ASSERT_DEVINS(pDevIns); 2824 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2825 return PDMCritSectLeave(pCritSect); 2822 return PDMCritSectLeave(pDevIns->Internal.s.pVMR3, pCritSect); 2826 2823 } 2827 2824 … … 2831 2828 { 2832 2829 PDMDEV_ASSERT_DEVINS(pDevIns); 2833 RT_NOREF(pDevIns); /** @todo pass pDevIns->Internal.s.pVMR3 to the crit sect code. */ 2834 return PDMCritSectIsOwner(pCritSect); 2830 return PDMCritSectIsOwner(pDevIns->Internal.s.pVMR3, pCritSect); 2835 2831 } 2836 2832 … … 2849 2845 { 2850 2846 PDMDEV_ASSERT_DEVINS(pDevIns); 2851 RT_NOREF(pDevIns); 2852 return PDMCritSectHasWaiters(pCritSect); 2847 return PDMCritSectHasWaiters(pDevIns->Internal.s.pVMR3, pCritSect); 2853 2848 } 2854 2849 … … 3170 3165 { 3171 3166 PPDMDEVINS pDevInsRtc = pVM->pdm.s.pRtc->pDevIns; 3172 rc = PDMCritSectEnter(p DevInsRtc->pCritSectRoR3, VERR_IGNORED);3167 rc = PDMCritSectEnter(pVM, pDevInsRtc->pCritSectRoR3, VERR_IGNORED); 3173 3168 if (RT_SUCCESS(rc)) 3174 3169 { 3175 3170 rc = pVM->pdm.s.pRtc->Reg.pfnWrite(pDevInsRtc, iReg, u8Value); 3176 PDMCritSectLeave(p DevInsRtc->pCritSectRoR3);3171 PDMCritSectLeave(pVM, pDevInsRtc->pCritSectRoR3); 3177 3172 } 3178 3173 } … … 3199 3194 { 3200 3195 PPDMDEVINS pDevInsRtc = pVM->pdm.s.pRtc->pDevIns; 3201 rc = PDMCritSectEnter(p DevInsRtc->pCritSectRoR3, VERR_IGNORED);3196 rc = PDMCritSectEnter(pVM, pDevInsRtc->pCritSectRoR3, VERR_IGNORED); 3202 3197 if (RT_SUCCESS(rc)) 3203 3198 { 3204 3199 rc = pVM->pdm.s.pRtc->Reg.pfnRead(pDevInsRtc, iReg, pu8Value); 3205 PDMCritSectLeave(p DevInsRtc->pCritSectRoR3);3200 PDMCritSectLeave(pVM, pDevInsRtc->pCritSectRoR3); 3206 3201 } 3207 3202 } -
trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp
r85658 r90346 595 595 if (pDevIns->pReg->pfnInitComplete) 596 596 { 597 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);597 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 598 598 rc = pDevIns->pReg->pfnInitComplete(pDevIns); 599 PDMCritSectLeave(p DevIns->pCritSectRoR3);599 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 600 600 if (RT_FAILURE(rc)) 601 601 { … … 1004 1004 if (!pLun->pTop) 1005 1005 { 1006 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1006 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1007 1007 rc = pDevIns->pReg->pfnAttach(pDevIns, iLun, fFlags); 1008 PDMCritSectLeave(p DevIns->pCritSectRoR3);1008 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1009 1009 } 1010 1010 else … … 1117 1117 if (pDevIns->pReg->pfnAttach) 1118 1118 { 1119 PDMCritSectEnter(p DevIns->pCritSectRoR3, VERR_IGNORED);1119 PDMCritSectEnter(pVM, pDevIns->pCritSectRoR3, VERR_IGNORED); 1120 1120 rc = pDevIns->pReg->pfnAttach(pDevIns, iLun, fFlags); 1121 1121 if (RT_SUCCESS(rc) && ppBase) 1122 1122 *ppBase = pLun->pTop ? &pLun->pTop->IBase : NULL; 1123 PDMCritSectLeave(p DevIns->pCritSectRoR3);1123 PDMCritSectLeave(pVM, pDevIns->pCritSectRoR3); 1124 1124 } 1125 1125 else -
trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp
r90329 r90346 934 934 if (pLun->pDevIns->pReg->pfnDetach) 935 935 { 936 PDMCritSectEnter(p Lun->pDevIns->pCritSectRoR3, VERR_IGNORED);936 PDMCritSectEnter(pVM, pLun->pDevIns->pCritSectRoR3, VERR_IGNORED); 937 937 pLun->pDevIns->pReg->pfnDetach(pLun->pDevIns, pLun->iLun, fFlags); 938 PDMCritSectLeave(p Lun->pDevIns->pCritSectRoR3);938 PDMCritSectLeave(pVM, pLun->pDevIns->pCritSectRoR3); 939 939 } 940 940 } … … 1658 1658 1659 1659 1660 #ifdef VBOX_WITH_NETSHAPER1661 1660 /** @interface_method_impl{PDMDRVHLPR3,pfnNetShaperAttach} */ 1662 1661 static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperAttach(PPDMDRVINS pDrvIns, const char *pszBwGroup, PPDMNSFILTER pFilter) 1663 1662 { 1663 #ifdef VBOX_WITH_NETSHAPER 1664 1664 PDMDRV_ASSERT_DRVINS(pDrvIns); 1665 1665 LogFlow(("pdmR3DrvHlp_NetShaperAttach: caller='%s'/%d: pFilter=%p pszBwGroup=%p:{%s}\n", … … 1671 1671 pDrvIns->iInstance, rc)); 1672 1672 return rc; 1673 #else 1674 RT_NOREF(pDrvIns, pszBwGroup, pFilter); 1675 return VERR_NOT_IMPLEMENTED; 1676 #endif 1673 1677 } 1674 1678 … … 1677 1681 static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter) 1678 1682 { 1683 #ifdef VBOX_WITH_NETSHAPER 1679 1684 PDMDRV_ASSERT_DRVINS(pDrvIns); 1680 1685 LogFlow(("pdmR3DrvHlp_NetShaperDetach: caller='%s'/%d: pFilter=%p\n", … … 1686 1691 pDrvIns->iInstance, rc)); 1687 1692 return rc; 1688 } 1689 #endif /* VBOX_WITH_NETSHAPER */ 1693 #else 1694 RT_NOREF(pDrvIns, pFilter); 1695 return VERR_NOT_IMPLEMENTED; 1696 #endif 1697 } 1698 1699 1700 /** @interface_method_impl{PDMDRVHLPR3,pfnNetShaperAllocateBandwidth} */ 1701 static DECLCALLBACK(bool) pdmR3DrvHlp_NetShaperAllocateBandwidth(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter, size_t cbTransfer) 1702 { 1703 #ifdef VBOX_WITH_NETSHAPER 1704 PDMDRV_ASSERT_DRVINS(pDrvIns); 1705 LogFlow(("pdmR3DrvHlp_NetShaperDetach: caller='%s'/%d: pFilter=%p cbTransfer=%#zx\n", 1706 pDrvIns->pReg->szName, pDrvIns->iInstance, pFilter, cbTransfer)); 1707 1708 bool const fRc = PDMNetShaperAllocateBandwidth(pDrvIns->Internal.s.pVMR3, pFilter, cbTransfer); 1709 1710 LogFlow(("pdmR3DrvHlp_NetShaperDetach: caller='%s'/%d: returns %RTbool\n", pDrvIns->pReg->szName, pDrvIns->iInstance, fRc)); 1711 return fRc; 1712 #else 1713 RT_NOREF(pDrvIns, pFilter, cbTransfer); 1714 return true; 1715 #endif 1716 } 1690 1717 1691 1718 … … 1796 1823 { 1797 1824 PDMDRV_ASSERT_DRVINS(pDrvIns); 1798 RT_NOREF(pDrvIns); 1799 return PDMCritSectEnter(pCritSect, rcBusy); 1825 return PDMCritSectEnter(pDrvIns->Internal.s.pVMR3, pCritSect, rcBusy); 1800 1826 } 1801 1827 … … 1806 1832 { 1807 1833 PDMDRV_ASSERT_DRVINS(pDrvIns); 1808 RT_NOREF(pDrvIns); 1809 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 1834 return PDMCritSectEnterDebug(pDrvIns->Internal.s.pVMR3, pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 1810 1835 } 1811 1836 … … 1815 1840 { 1816 1841 PDMDRV_ASSERT_DRVINS(pDrvIns); 1817 RT_NOREF(pDrvIns); 1818 return PDMCritSectTryEnter(pCritSect); 1842 return PDMCritSectTryEnter(pDrvIns->Internal.s.pVMR3, pCritSect); 1819 1843 } 1820 1844 … … 1825 1849 { 1826 1850 PDMDRV_ASSERT_DRVINS(pDrvIns); 1827 RT_NOREF(pDrvIns); 1828 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 1851 return PDMCritSectTryEnterDebug(pDrvIns->Internal.s.pVMR3, pCritSect, uId, RT_SRC_POS_ARGS); 1829 1852 } 1830 1853 … … 1834 1857 { 1835 1858 PDMDRV_ASSERT_DRVINS(pDrvIns); 1836 RT_NOREF(pDrvIns); 1837 return PDMCritSectLeave(pCritSect); 1859 return PDMCritSectLeave(pDrvIns->Internal.s.pVMR3, pCritSect); 1838 1860 } 1839 1861 … … 1843 1865 { 1844 1866 PDMDRV_ASSERT_DRVINS(pDrvIns); 1845 RT_NOREF(pDrvIns); 1846 return PDMCritSectIsOwner(pCritSect); 1867 return PDMCritSectIsOwner(pDrvIns->Internal.s.pVMR3, pCritSect); 1847 1868 } 1848 1869 … … 1861 1882 { 1862 1883 PDMDRV_ASSERT_DRVINS(pDrvIns); 1863 RT_NOREF(pDrvIns); 1864 return PDMCritSectHasWaiters(pCritSect); 1884 return PDMCritSectHasWaiters(pDrvIns->Internal.s.pVMR3, pCritSect); 1865 1885 } 1866 1886 … … 2044 2064 pdmR3DrvHlp_ThreadCreate, 2045 2065 pdmR3DrvHlp_AsyncCompletionTemplateCreate, 2046 #ifdef VBOX_WITH_NETSHAPER2047 2066 pdmR3DrvHlp_NetShaperAttach, 2048 2067 pdmR3DrvHlp_NetShaperDetach, 2049 #endif /* VBOX_WITH_NETSHAPER */ 2068 pdmR3DrvHlp_NetShaperAllocateBandwidth, 2050 2069 pdmR3DrvHlp_LdrGetRCInterfaceSymbols, 2051 2070 pdmR3DrvHlp_LdrGetR0InterfaceSymbols, -
trunk/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
r82968 r90346 249 249 { 250 250 PPDMNSBWGROUP pBwGroup = pFilter->pBwGroupR3; 251 int rc = PDMCritSectEnter(&pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 251 PVM const pVM = pBwGroup->pShaperR3->pVM; 252 int rc = PDMCritSectEnter(pVM, &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 252 253 253 254 pFilter->pNextR3 = pBwGroup->pFiltersHeadR3; 254 255 pBwGroup->pFiltersHeadR3 = pFilter; 255 256 256 rc = PDMCritSectLeave( &pBwGroup->Lock); AssertRC(rc);257 rc = PDMCritSectLeave(pVM, &pBwGroup->Lock); AssertRC(rc); 257 258 } 258 259 … … 269 270 AssertPtr(pBwGroup->pShaperR3); 270 271 Assert(RTCritSectIsOwner(&pBwGroup->pShaperR3->Lock)); 271 int rc = PDMCritSectEnter(&pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 272 PVM const pVM = pBwGroup->pShaperR3->pVM; 273 int rc = PDMCritSectEnter(pVM, &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 272 274 273 275 if (pFilter == pBwGroup->pFiltersHeadR3) … … 284 286 } 285 287 286 rc = PDMCritSectLeave( &pBwGroup->Lock); AssertRC(rc);288 rc = PDMCritSectLeave(pVM, &pBwGroup->Lock); AssertRC(rc); 287 289 } 288 290 … … 383 385 if (pBwGroup) 384 386 { 385 rc = PDMCritSectEnter( &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc);387 rc = PDMCritSectEnter(pUVM->pVM, &pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc); 386 388 if (RT_SUCCESS(rc)) 387 389 { … … 392 394 pBwGroup->cbTokensLast = pBwGroup->cbBucket; 393 395 394 int rc2 = PDMCritSectLeave( &pBwGroup->Lock); AssertRC(rc2);396 int rc2 = PDMCritSectLeave(pUVM->pVM, &pBwGroup->Lock); AssertRC(rc2); 395 397 } 396 398 } -
trunk/src/VBox/VMM/VMMR3/PDMUsb.cpp
r89673 r90346 1919 1919 { 1920 1920 PDMUSB_ASSERT_USBINS(pUsbIns); 1921 int rc = TMTimerLock(pUsbIns->Internal.s.pVM, hTimer, VERR_IGNORED); 1921 PVM const pVM = pUsbIns->Internal.s.pVM; 1922 int rc = TMTimerLock(pVM, hTimer, VERR_IGNORED); 1922 1923 if (rc == VINF_SUCCESS) 1923 1924 { 1924 rc = PDMCritSectEnter(p CritSect, VERR_IGNORED);1925 rc = PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 1925 1926 if (rc == VINF_SUCCESS) 1926 1927 return rc; 1927 1928 AssertRC(rc); 1928 TMTimerUnlock(p UsbIns->Internal.s.pVM, hTimer);1929 TMTimerUnlock(pVM, hTimer); 1929 1930 } 1930 1931 else … … 2002 2003 { 2003 2004 PDMUSB_ASSERT_USBINS(pUsbIns); 2004 TMTimerUnlock(pUsbIns->Internal.s.pVM, hTimer); 2005 int rc = PDMCritSectLeave(pCritSect); 2005 PVM const pVM = pUsbIns->Internal.s.pVM; 2006 TMTimerUnlock(pVM, hTimer); 2007 int rc = PDMCritSectLeave(pVM, pCritSect); 2006 2008 AssertRC(rc); 2007 2009 } -
trunk/src/VBox/VMM/VMMR3/PGM.cpp
r86488 r90346 2373 2373 VMMR3DECL(int) PGMR3LockCall(PVM pVM) 2374 2374 { 2375 int rc = PDMR3CritSectEnterEx( &pVM->pgm.s.CritSectX, true /* fHostCall */);2375 int rc = PDMR3CritSectEnterEx(pVM, &pVM->pgm.s.CritSectX, true /* fHostCall */); 2376 2376 AssertRC(rc); 2377 2377 return rc; -
trunk/src/VBox/VMM/VMMR3/SSM.cpp
r86375 r90346 4479 4479 * Enters the critical session (optionally) associated with the unit. 4480 4480 * 4481 * @param pVM The cross context VM structure. 4481 4482 * @param pUnit The unit. 4482 4483 */ 4483 DECLINLINE(void) ssmR3UnitCritSectEnter(P SSMUNIT pUnit)4484 DECLINLINE(void) ssmR3UnitCritSectEnter(PVM pVM, PSSMUNIT pUnit) 4484 4485 { 4485 4486 PPDMCRITSECT pCritSect = pUnit->pCritSect; 4486 4487 if (pCritSect) 4487 4488 { 4488 int rc = PDMCritSectEnter(p CritSect, VERR_IGNORED);4489 int rc = PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 4489 4490 AssertRC(rc); 4490 4491 } … … 4495 4496 * Leaves the critical session (optionally) associated with the unit. 4496 4497 * 4498 * @param pVM The cross context VM structure. 4497 4499 * @param pUnit The unit. 4498 4500 */ 4499 DECLINLINE(void) ssmR3UnitCritSectLeave(P SSMUNIT pUnit)4501 DECLINLINE(void) ssmR3UnitCritSectLeave(PVM pVM, PSSMUNIT pUnit) 4500 4502 { 4501 4503 PPDMCRITSECT pCritSect = pUnit->pCritSect; 4502 4504 if (pCritSect) 4503 4505 { 4504 int rc = PDMCritSectLeave(p CritSect);4506 int rc = PDMCritSectLeave(pVM, pCritSect); 4505 4507 AssertRC(rc); 4506 4508 } … … 4531 4533 int rcOld = pSSM->rc; 4532 4534 int rc; 4533 ssmR3UnitCritSectEnter(p Unit);4535 ssmR3UnitCritSectEnter(pVM, pUnit); 4534 4536 switch (pUnit->enmType) 4535 4537 { … … 4553 4555 break; 4554 4556 } 4555 ssmR3UnitCritSectLeave(p Unit);4557 ssmR3UnitCritSectLeave(pVM, pUnit); 4556 4558 if (RT_SUCCESS(rc) && pSSM->rc != rcOld) 4557 4559 rc = pSSM->rc; … … 4883 4885 */ 4884 4886 ssmR3DataWriteBegin(pSSM); 4885 ssmR3UnitCritSectEnter(p Unit);4887 ssmR3UnitCritSectEnter(pVM, pUnit); 4886 4888 switch (pUnit->enmType) 4887 4889 { … … 4906 4908 break; 4907 4909 } 4908 ssmR3UnitCritSectLeave(p Unit);4910 ssmR3UnitCritSectLeave(pVM, pUnit); 4909 4911 pUnit->fCalled = true; 4910 4912 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 4976 4978 { 4977 4979 int rc; 4978 ssmR3UnitCritSectEnter(p Unit);4980 ssmR3UnitCritSectEnter(pVM, pUnit); 4979 4981 switch (pUnit->enmType) 4980 4982 { … … 4998 5000 break; 4999 5001 } 5000 ssmR3UnitCritSectLeave(p Unit);5002 ssmR3UnitCritSectLeave(pVM, pUnit); 5001 5003 pUnit->fCalled = true; 5002 5004 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 5322 5324 { 5323 5325 int rc; 5324 ssmR3UnitCritSectEnter(p Unit);5326 ssmR3UnitCritSectEnter(pVM, pUnit); 5325 5327 switch (pUnit->enmType) 5326 5328 { … … 5344 5346 break; 5345 5347 } 5346 ssmR3UnitCritSectLeave(p Unit);5348 ssmR3UnitCritSectLeave(pVM, pUnit); 5347 5349 pUnit->fCalled = true; 5348 5350 Assert(pSSM->rc == VINF_SUCCESS); … … 5465 5467 */ 5466 5468 ssmR3DataWriteBegin(pSSM); 5467 ssmR3UnitCritSectEnter(p Unit);5469 ssmR3UnitCritSectEnter(pVM, pUnit); 5468 5470 switch (pUnit->enmType) 5469 5471 { … … 5487 5489 break; 5488 5490 } 5489 ssmR3UnitCritSectLeave(p Unit);5491 ssmR3UnitCritSectLeave(pVM, pUnit); 5490 5492 pUnit->fCalled = true; 5491 5493 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 5627 5629 { 5628 5630 int rc; 5629 ssmR3UnitCritSectEnter(p Unit);5631 ssmR3UnitCritSectEnter(pVM, pUnit); 5630 5632 switch (pUnit->enmType) 5631 5633 { … … 5649 5651 break; 5650 5652 } 5651 ssmR3UnitCritSectLeave(p Unit);5653 ssmR3UnitCritSectLeave(pVM, pUnit); 5652 5654 pUnit->fCalled = true; 5653 5655 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 8607 8609 break; 8608 8610 } 8609 ssmR3UnitCritSectEnter(p Unit);8611 ssmR3UnitCritSectEnter(pVM, pUnit); 8610 8612 switch (pUnit->enmType) 8611 8613 { … … 8629 8631 break; 8630 8632 } 8631 ssmR3UnitCritSectLeave(p Unit);8633 ssmR3UnitCritSectLeave(pVM, pUnit); 8632 8634 pUnit->fCalled = true; 8633 8635 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 8875 8877 pSSM->u.Read.pCurUnit = pUnit; 8876 8878 ssmR3DataReadBeginV2(pSSM); 8877 ssmR3UnitCritSectEnter(p Unit);8879 ssmR3UnitCritSectEnter(pVM, pUnit); 8878 8880 switch (pUnit->enmType) 8879 8881 { … … 8897 8899 break; 8898 8900 } 8899 ssmR3UnitCritSectLeave(p Unit);8901 ssmR3UnitCritSectLeave(pVM, pUnit); 8900 8902 pUnit->fCalled = true; 8901 8903 if (RT_FAILURE(rc) && RT_SUCCESS_NP(pSSM->rc)) … … 9059 9061 Handle.u.Read.pCurUnit = pUnit; 9060 9062 pUnit->fCalled = true; 9061 ssmR3UnitCritSectEnter(p Unit);9063 ssmR3UnitCritSectEnter(pVM, pUnit); 9062 9064 switch (pUnit->enmType) 9063 9065 { … … 9081 9083 break; 9082 9084 } 9083 ssmR3UnitCritSectLeave(p Unit);9085 ssmR3UnitCritSectLeave(pVM, pUnit); 9084 9086 Handle.u.Read.pCurUnit = NULL; 9085 9087 if (RT_FAILURE(rc) && RT_SUCCESS_NP(Handle.rc)) … … 9135 9137 int const rcOld = Handle.rc; 9136 9138 rc = VINF_SUCCESS; 9137 ssmR3UnitCritSectEnter(p Unit);9139 ssmR3UnitCritSectEnter(pVM, pUnit); 9138 9140 switch (pUnit->enmType) 9139 9141 { … … 9157 9159 break; 9158 9160 } 9159 ssmR3UnitCritSectLeave(p Unit);9161 ssmR3UnitCritSectLeave(pVM, pUnit); 9160 9162 Handle.u.Read.pCurUnit = NULL; 9161 9163 if (RT_SUCCESS(rc) && Handle.rc != rcOld) -
trunk/src/VBox/VMM/VMMR3/TM.cpp
r89283 r90346 1246 1246 { 1247 1247 PTMTIMERQUEUE pQueue = &pVM->tm.s.aTimerQueues[idxQueue]; 1248 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);1248 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 1249 1249 tmTimerQueueSchedule(pVM, pQueue, pQueue); 1250 PDMCritSectLeave( &pQueue->TimerLock);1250 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1251 1251 } 1252 1252 #ifdef VBOX_STRICT … … 1879 1879 AssertMsg( !pTimer->pCritSect 1880 1880 || VMR3GetState(pVM) != VMSTATE_RUNNING 1881 || PDMCritSectIsOwner(p Timer->pCritSect), ("%s\n", pTimer->szName));1881 || PDMCritSectIsOwner(pVM, pTimer->pCritSect), ("%s\n", pTimer->szName)); 1882 1882 1883 1883 /* … … 1886 1886 */ 1887 1887 PDMCritSectRwEnterExcl(&pQueue->AllocLock, VERR_IGNORED); 1888 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);1888 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 1889 1889 1890 1890 for (int cRetries = 1000;; cRetries--) … … 1924 1924 case TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE: 1925 1925 AssertMsgFailed(("%p:.enmState=%s %s\n", pTimer, tmTimerState(enmState), pTimer->szName)); 1926 PDMCritSectLeave( &pQueue->TimerLock);1926 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1927 1927 PDMCritSectRwLeaveExcl(&pQueue->AllocLock); 1928 1928 … … 1933 1933 1934 1934 PDMCritSectRwEnterExcl(&pQueue->AllocLock, VERR_IGNORED); 1935 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);1935 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 1936 1936 continue; 1937 1937 … … 1941 1941 case TMTIMERSTATE_FREE: 1942 1942 case TMTIMERSTATE_DESTROY: 1943 PDMCritSectLeave( &pQueue->TimerLock);1943 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1944 1944 PDMCritSectRwLeaveExcl(&pQueue->AllocLock); 1945 1945 AssertLogRelMsgFailedReturn(("pTimer=%p %s\n", pTimer, tmTimerState(enmState)), VERR_TM_INVALID_STATE); … … 1947 1947 default: 1948 1948 AssertMsgFailed(("Unknown timer state %d (%s)\n", enmState, pTimer->szName)); 1949 PDMCritSectLeave( &pQueue->TimerLock);1949 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1950 1950 PDMCritSectRwLeaveExcl(&pQueue->AllocLock); 1951 1951 return VERR_TM_UNKNOWN_STATE; … … 1961 1961 break; 1962 1962 AssertMsgFailed(("%p:.enmState=%s %s\n", pTimer, tmTimerState(enmState), pTimer->szName)); 1963 PDMCritSectLeave( &pQueue->TimerLock);1963 PDMCritSectLeave(pVM, &pQueue->TimerLock); 1964 1964 PDMCritSectRwLeaveExcl(&pQueue->AllocLock); 1965 1965 … … 1968 1968 1969 1969 PDMCritSectRwEnterExcl(&pQueue->AllocLock, VERR_IGNORED); 1970 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);1970 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 1971 1971 } 1972 1972 … … 2025 2025 tmTimerQueuesSanityChecks(pVM, "TMR3TimerDestroy"); 2026 2026 #endif 2027 PDMCritSectLeave( &pQueue->TimerLock);2027 PDMCritSectLeave(pVM, &pQueue->TimerLock); 2028 2028 PDMCritSectRwLeaveExcl(&pQueue->AllocLock); 2029 2029 return VINF_SUCCESS; … … 2319 2319 { 2320 2320 STAM_PROFILE_START(&pTimer->StatCritSectEnter, Locking); 2321 PDMCritSectEnter(p CritSect, VERR_IGNORED);2321 PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 2322 2322 STAM_PROFILE_STOP(&pTimer->StatCritSectEnter, Locking); 2323 2323 } … … 2364 2364 } 2365 2365 if (pCritSect) 2366 PDMCritSectLeave(p CritSect);2366 PDMCritSectLeave(pVM, pCritSect); 2367 2367 2368 2368 /* Advance? */ … … 2390 2390 { 2391 2391 STAM_PROFILE_START(&pQueue->StatDo, s); 2392 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);2392 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 2393 2393 2394 2394 if (pQueue->idxSchedule != UINT32_MAX) … … 2399 2399 tmR3TimerQueueRun(pVM, pQueue, pHead); 2400 2400 2401 PDMCritSectLeave( &pQueue->TimerLock);2401 PDMCritSectLeave(pVM, &pQueue->TimerLock); 2402 2402 STAM_PROFILE_STOP(&pQueue->StatDo, s); 2403 2403 ASMAtomicWriteBool(&pQueue->fBeingProcessed, false); … … 2423 2423 PTMTIMERQUEUE const pQueue = &pVM->tm.s.aTimerQueues[TMCLOCK_VIRTUAL_SYNC]; 2424 2424 VM_ASSERT_EMT(pVM); 2425 Assert(PDMCritSectIsOwner( &pVM->tm.s.VirtualSyncLock));2425 Assert(PDMCritSectIsOwner(pVM, &pVM->tm.s.VirtualSyncLock)); 2426 2426 2427 2427 /* … … 2548 2548 { 2549 2549 STAM_PROFILE_START(&pTimer->StatCritSectEnter, Locking); 2550 PDMCritSectEnter(p CritSect, VERR_IGNORED);2550 PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 2551 2551 STAM_PROFILE_STOP(&pTimer->StatCritSectEnter, Locking); 2552 2552 } … … 2594 2594 /* Leave the associated lock. */ 2595 2595 if (pCritSect) 2596 PDMCritSectLeave(p CritSect);2596 PDMCritSectLeave(pVM, pCritSect); 2597 2597 } /* run loop */ 2598 2598 … … 2751 2751 /** @todo Optimize for SMP */ 2752 2752 STAM_PROFILE_START(&pVM->tm.s.StatVirtualSyncFF, a); 2753 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED);2753 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); 2754 2754 if (pVM->tm.s.fVirtualSyncTicking) 2755 2755 { 2756 2756 STAM_PROFILE_STOP(&pVM->tm.s.StatVirtualSyncFF, a); /* before the unlock! */ 2757 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);2757 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 2758 2758 Log2(("TMR3VirtualSyncFF: ticking\n")); 2759 2759 } 2760 2760 else 2761 2761 { 2762 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);2762 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 2763 2763 2764 2764 /* try run it. */ 2765 PDMCritSectEnter( &pVM->tm.s.aTimerQueues[TMCLOCK_VIRTUAL].TimerLock, VERR_IGNORED);2766 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED);2765 PDMCritSectEnter(pVM, &pVM->tm.s.aTimerQueues[TMCLOCK_VIRTUAL].TimerLock, VERR_IGNORED); 2766 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); 2767 2767 if (pVM->tm.s.fVirtualSyncTicking) 2768 2768 Log2(("TMR3VirtualSyncFF: ticking (2)\n")); … … 2779 2779 ASMAtomicWriteBool(&pVM->tm.s.fRunningVirtualSyncQueue, false); 2780 2780 } 2781 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);2781 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 2782 2782 STAM_PROFILE_STOP(&pVM->tm.s.StatVirtualSyncFF, a); /* before the unlock! */ 2783 PDMCritSectLeave( &pVM->tm.s.aTimerQueues[TMCLOCK_VIRTUAL].TimerLock);2783 PDMCritSectLeave(pVM, &pVM->tm.s.aTimerQueues[TMCLOCK_VIRTUAL].TimerLock); 2784 2784 } 2785 2785 } … … 2790 2790 * Service the special virtual sync timer queue. 2791 2791 * 2792 * @param pVM The cross context VM structure.2792 * @param pVM The cross context VM structure. 2793 2793 * @param pVCpuDst The destination VCpu. 2794 2794 */ … … 2799 2799 { 2800 2800 STAM_PROFILE_START(&pQueue->StatDo, s1); 2801 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);2802 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED);2801 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 2802 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); 2803 2803 ASMAtomicWriteBool(&pVM->tm.s.fRunningVirtualSyncQueue, true); 2804 2804 VMCPU_FF_CLEAR(pVCpuDst, VMCPU_FF_TIMER); /* Clear the FF once we started working for real. */ … … 2810 2810 2811 2811 ASMAtomicWriteBool(&pVM->tm.s.fRunningVirtualSyncQueue, false); 2812 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);2813 PDMCritSectLeave( &pQueue->TimerLock);2812 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 2813 PDMCritSectLeave(pVM, &pQueue->TimerLock); 2814 2814 STAM_PROFILE_STOP(&pQueue->StatDo, s1); 2815 2815 ASMAtomicWriteBool(&pQueue->fBeingProcessed, false); … … 2974 2974 /* Enter the critical sections to make TMTimerSet/Stop happy. */ 2975 2975 if (pQueue->enmClock == TMCLOCK_VIRTUAL_SYNC) 2976 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED);2976 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); 2977 2977 PPDMCRITSECT pCritSect = pTimer->pCritSect; 2978 2978 if (pCritSect) 2979 PDMCritSectEnter(p CritSect, VERR_IGNORED);2979 PDMCritSectEnter(pVM, pCritSect, VERR_IGNORED); 2980 2980 2981 2981 if (u8State == TMTIMERSTATE_SAVED_PENDING_SCHEDULE) … … 3005 3005 3006 3006 if (pCritSect) 3007 PDMCritSectLeave(p CritSect);3007 PDMCritSectLeave(pVM, pCritSect); 3008 3008 if (pQueue->enmClock == TMCLOCK_VIRTUAL_SYNC) 3009 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);3009 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 3010 3010 3011 3011 /* … … 3183 3183 { 3184 3184 VMCPU_ASSERT_EMT(pVCpu); 3185 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */3185 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */ 3186 3186 3187 3187 /* … … 3189 3189 */ 3190 3190 int rc = tmVirtualPauseLocked(pVM); 3191 AssertRCReturnStmt(rc, PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock), rc);3191 AssertRCReturnStmt(rc, PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock), rc); 3192 3192 3193 3193 /* … … 3198 3198 { 3199 3199 rc = tmCpuTickPauseLocked(pVM, pVCpu); 3200 AssertRCReturnStmt(rc, PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock), rc);3200 AssertRCReturnStmt(rc, PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock), rc); 3201 3201 } 3202 3202 … … 3224 3224 #endif 3225 3225 3226 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);3226 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 3227 3227 return VINF_SUCCESS; 3228 3228 } … … 3240 3240 { 3241 3241 VMCPU_ASSERT_EMT(pVCpu); 3242 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */3242 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */ 3243 3243 3244 3244 #ifndef VBOX_WITHOUT_NS_ACCOUNTING … … 3261 3261 { 3262 3262 int rc = tmCpuTickResumeLocked(pVM, pVCpu); 3263 AssertRCReturnStmt(rc, PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock), rc);3263 AssertRCReturnStmt(rc, PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock), rc); 3264 3264 } 3265 3265 … … 3269 3269 int rc = tmVirtualResumeLocked(pVM); 3270 3270 3271 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);3271 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 3272 3272 return rc; 3273 3273 } … … 3311 3311 * TM level and make it affect TMR3UTCNow as well! */ 3312 3312 3313 PDMCritSectEnter( &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */3313 PDMCritSectEnter(pVM, &pVM->tm.s.VirtualSyncLock, VERR_IGNORED); /* Paranoia: Exploiting the virtual sync lock here. */ 3314 3314 3315 3315 /* … … 3330 3330 TMR3NotifyResume(pVM, pVCpu); 3331 3331 3332 PDMCritSectLeave( &pVM->tm.s.VirtualSyncLock);3332 PDMCritSectLeave(pVM, &pVM->tm.s.VirtualSyncLock); 3333 3333 return VINF_SUCCESS; 3334 3334 } … … 3934 3934 const char * const pszClock = tmR3Get5CharClockName(pQueue->enmClock); 3935 3935 PDMCritSectRwEnterShared(&pQueue->AllocLock, VERR_IGNORED); 3936 PDMCritSectEnter( &pQueue->TimerLock, VERR_IGNORED);3936 PDMCritSectEnter(pVM, &pQueue->TimerLock, VERR_IGNORED); 3937 3937 3938 3938 for (PTMTIMERR3 pTimer = tmTimerQueueGetHead(pQueue, pQueue); … … 3954 3954 } 3955 3955 3956 PDMCritSectLeave( &pQueue->TimerLock);3956 PDMCritSectLeave(pVM, &pQueue->TimerLock); 3957 3957 PDMCritSectRwLeaveShared(&pQueue->AllocLock); 3958 3958 } -
trunk/src/VBox/VMM/VMMR3/VMM.cpp
r88347 r90346 2371 2371 */ 2372 2372 if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_PDM_CRITSECT)) 2373 PDMCritSectBothFF(pV Cpu);2373 PDMCritSectBothFF(pVM, pVCpu); 2374 2374 2375 2375 switch (pVCpu->vmm.s.enmCallRing3Operation) … … 2380 2380 case VMMCALLRING3_PDM_CRIT_SECT_ENTER: 2381 2381 { 2382 pVCpu->vmm.s.rcCallRing3 = PDMR3CritSectEnterEx( (PPDMCRITSECT)(uintptr_t)pVCpu->vmm.s.u64CallRing3Arg,2382 pVCpu->vmm.s.rcCallRing3 = PDMR3CritSectEnterEx(pVM, (PPDMCRITSECT)(uintptr_t)pVCpu->vmm.s.u64CallRing3Arg, 2383 2383 true /*fCallRing3*/); 2384 2384 break; -
trunk/src/VBox/VMM/include/IOMInternal.h
r89088 r90346 584 584 # define IOM_IS_EXCL_LOCK_OWNER(a_pVM) PDMCritSectRwIsWriteOwner(&(a_pVM)->iom.s.CritSect) 585 585 #else 586 # define IOM_LOCK_EXCL(a_pVM) PDMCritSectEnter( &(a_pVM)->iom.s.CritSect, VERR_SEM_BUSY)587 # define IOM_UNLOCK_EXCL(a_pVM) do { PDMCritSectLeave( &(a_pVM)->iom.s.CritSect); } while (0)588 # define IOM_LOCK_SHARED_EX(a_pVM, a_rcBusy) PDMCritSectEnter( &(a_pVM)->iom.s.CritSect, (a_rcBusy))589 # define IOM_UNLOCK_SHARED(a_pVM) do { PDMCritSectLeave( &(a_pVM)->iom.s.CritSect); } while (0)590 # define IOM_IS_SHARED_LOCK_OWNER(a_pVM) PDMCritSectIsOwner( &(a_pVM)->iom.s.CritSect)591 # define IOM_IS_EXCL_LOCK_OWNER(a_pVM) PDMCritSectIsOwner( &(a_pVM)->iom.s.CritSect)586 # define IOM_LOCK_EXCL(a_pVM) PDMCritSectEnter((a_pVM), &(a_pVM)->iom.s.CritSect, VERR_SEM_BUSY) 587 # define IOM_UNLOCK_EXCL(a_pVM) do { PDMCritSectLeave((a_pVM), &(a_pVM)->iom.s.CritSect); } while (0) 588 # define IOM_LOCK_SHARED_EX(a_pVM, a_rcBusy) PDMCritSectEnter((a_pVM), &(a_pVM)->iom.s.CritSect, (a_rcBusy)) 589 # define IOM_UNLOCK_SHARED(a_pVM) do { PDMCritSectLeave((a_pVM), &(a_pVM)->iom.s.CritSect); } while (0) 590 # define IOM_IS_SHARED_LOCK_OWNER(a_pVM) PDMCritSectIsOwner((a_pVM), &(a_pVM)->iom.s.CritSect) 591 # define IOM_IS_EXCL_LOCK_OWNER(a_pVM) PDMCritSectIsOwner((a_pVM), &(a_pVM)->iom.s.CritSect) 592 592 #endif 593 593 #define IOM_LOCK_SHARED(a_pVM) IOM_LOCK_SHARED_EX(a_pVM, VERR_SEM_BUSY) -
trunk/src/VBox/VMM/include/PDMInternal.h
r89621 r90346 1700 1700 int pdmLockEx(PVMCC pVM, int rc); 1701 1701 void pdmUnlock(PVMCC pVM); 1702 bool pdmLockIsOwner(P CVMCC pVM);1702 bool pdmLockIsOwner(PVMCC pVM); 1703 1703 1704 1704 #if defined(VBOX_WITH_IOMMU_AMD) || defined(VBOX_WITH_IOMMU_INTEL) -
trunk/src/VBox/VMM/include/PGMInternal.h
r87485 r90346 3903 3903 int pgmLock(PVMCC pVM); 3904 3904 #endif 3905 void pgmUnlock(PVM pVM);3905 void pgmUnlock(PVMCC pVM); 3906 3906 /** 3907 3907 * Asserts that the caller owns the PDM lock. … … 3909 3909 * @param a_pVM Pointer to the VM. 3910 3910 */ 3911 #define PGM_LOCK_ASSERT_OWNER(a_pVM) Assert(PDMCritSectIsOwner( &(a_pVM)->pgm.s.CritSectX))3911 #define PGM_LOCK_ASSERT_OWNER(a_pVM) Assert(PDMCritSectIsOwner((a_pVM), &(a_pVM)->pgm.s.CritSectX)) 3912 3912 /** 3913 3913 * Asserts that the caller owns the PDM lock. … … 3916 3916 * @param a_pVCpu The current CPU handle. 3917 3917 */ 3918 #define PGM_LOCK_ASSERT_OWNER_EX(a_pVM, a_pVCpu) Assert(PDMCritSectIsOwnerEx( &(a_pVM)->pgm.s.CritSectX, a_pVCpu))3918 #define PGM_LOCK_ASSERT_OWNER_EX(a_pVM, a_pVCpu) Assert(PDMCritSectIsOwnerEx((a_pVCpu), &(a_pVM)->pgm.s.CritSectX)) 3919 3919 3920 3920 #ifndef PGM_WITHOUT_MAPPINGS … … 3966 3966 void pgmPhysInvalidRamRangeTlbs(PVMCC pVM); 3967 3967 void pgmPhysInvalidatePageMapTLB(PVMCC pVM); 3968 void pgmPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys);3968 void pgmPhysInvalidatePageMapTLBEntry(PVMCC pVM, RTGCPHYS GCPhys); 3969 3969 PPGMRAMRANGE pgmPhysGetRangeSlow(PVM pVM, RTGCPHYS GCPhys); 3970 3970 PPGMRAMRANGE pgmPhysGetRangeAtOrAboveSlow(PVM pVM, RTGCPHYS GCPhys); … … 4003 4003 int pgmPoolHCPhys2Ptr(PVM pVM, RTHCPHYS HCPhys, void **ppv); 4004 4004 int pgmPoolSyncCR3(PVMCPUCC pVCpu); 4005 bool pgmPoolIsDirtyPageSlow(PVM pVM, RTGCPHYS GCPhys);4005 bool pgmPoolIsDirtyPageSlow(PVMCC pVM, RTGCPHYS GCPhys); 4006 4006 void pgmPoolInvalidateDirtyPage(PVMCC pVM, RTGCPHYS GCPhysPT); 4007 4007 int pgmPoolTrackUpdateGCPhys(PVMCC pVM, RTGCPHYS GCPhysPage, PPGMPAGE pPhysPage, bool fFlushPTEs, bool *pfFlushTLBs); … … 4018 4018 void pgmPoolAddDirtyPage(PVMCC pVM, PPGMPOOL pPool, PPGMPOOLPAGE pPage); 4019 4019 void pgmPoolResetDirtyPages(PVMCC pVM); 4020 void pgmPoolResetDirtyPage(PVM pVM, RTGCPTR GCPtrPage);4020 void pgmPoolResetDirtyPage(PVMCC pVM, RTGCPTR GCPtrPage); 4021 4021 4022 4022 int pgmR3ExitShadowModeBeforePoolFlush(PVMCPU pVCpu);
Note:
See TracChangeset
for help on using the changeset viewer.