Changeset 90609 in vbox for trunk/src/VBox/Devices/VMMDev
- Timestamp:
- Aug 10, 2021 9:35:16 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 146220
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp
r90574 r90609 837 837 while (RT_LIKELY(pThread->enmState == PDMTHREADSTATE_RUNNING)) 838 838 { 839 /* 840 * Enter the critical section and 841 */ 842 int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS); 843 AssertLogRelRCReturn(rc, rc); 844 845 uint32_t cNsNextWait; 846 if (pThis->TestingLockControl.s.cUsHold) 839 int rc; 840 uint32_t cNsNextWait = 0; 841 uint32_t const fCfgHi = pThis->TestingLockControl.au32[1]; 842 if (fCfgHi & VMMDEV_TESTING_LOCKED_HI_ENABLED) 847 843 { 848 PDMDevHlpSUPSemEventWaitNsRelIntr(pDevIns, pThis->hTestingLockEvt, pThis->TestingLockControl.s.cUsHold); 849 if (pThis->TestingLockControl.s.fPokeBeforeRelease) 850 VMCC_FOR_EACH_VMCPU_STMT(pVM, RTThreadPoke(pVCpu->hThread)); 844 /* 845 * take lock 846 */ 847 if (!(fCfgHi & VMMDEV_TESTING_LOCKED_HI_TYPE_RW)) 848 rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS); 849 else if (!(fCfgHi & VMMDEV_TESTING_LOCKED_HI_THREAD_SHARED)) 850 rc = PDMDevHlpCritSectRwEnterExcl(pDevIns, &pThis->CritSectRw, VINF_SUCCESS); 851 else 852 rc = PDMDevHlpCritSectRwEnterShared(pDevIns, &pThis->CritSectRw, VINF_SUCCESS); 853 AssertLogRelRCReturn(rc, rc); 854 855 /* 856 * Delay releasing lock. 857 */ 851 858 cNsNextWait = pThis->TestingLockControl.s.cUsBetween * RT_NS_1US; 859 if (pThis->TestingLockControl.s.cUsHold) 860 { 861 PDMDevHlpSUPSemEventWaitNsRelIntr(pDevIns, pThis->hTestingLockEvt, pThis->TestingLockControl.s.cUsHold); 862 if (pThis->TestingLockControl.s.fPokeBeforeRelease) 863 VMCC_FOR_EACH_VMCPU_STMT(pVM, RTThreadPoke(pVCpu->hThread)); 864 } 865 866 /* 867 * Release lock. 868 */ 869 if (!(fCfgHi & VMMDEV_TESTING_LOCKED_HI_TYPE_RW)) 870 rc = PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect); 871 else if (!(fCfgHi & VMMDEV_TESTING_LOCKED_HI_THREAD_SHARED)) 872 rc = PDMDevHlpCritSectRwLeaveExcl(pDevIns, &pThis->CritSectRw); 873 else 874 rc = PDMDevHlpCritSectRwLeaveShared(pDevIns, &pThis->CritSectRw); 875 AssertLogRelRCReturn(rc, rc); 852 876 } 853 else854 cNsNextWait = 0;855 856 rc = PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);857 AssertLogRelRCReturn(rc, rc);858 877 859 878 /*
Note:
See TracChangeset
for help on using the changeset viewer.