- Timestamp:
- Jul 26, 2021 12:47:26 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 145892
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
r87935 r90329 290 290 #else 291 291 # ifdef IN_RING0 292 /* 293 * In ring-0 context we have to take the special VT-x/AMD-V HM context into 294 * account when waiting on contended locks. 295 * 296 * While we usually (it can be VINF_SUCCESS) have to option via the rcBusy 297 * parameter of going to back to ring-3 and to re-start the work there, it's 298 * almost always more efficient to try wait for the lock here. The rcBusy 299 * will be used if we encounter an VERR_INTERRUPTED situation though. 300 * 301 * We must never block if VMMRZCallRing3Disable is active. 302 */ 303 292 304 /** @todo If preemption is disabled it means we're in VT-x/AMD-V context 293 305 * and would be better off switching out of that while waiting for … … 333 345 return pdmR3R0CritSectEnterContended(pCritSect, hNativeSelf, pSrcPos); 334 346 # endif 335 # endif /* IN_RING0 */347 # endif /* IN_RING0 */ 336 348 337 349 STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock); -
trunk/src/VBox/VMM/VMMR0/PDMR0Driver.cpp
r84071 r90329 113 113 114 114 115 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectEnter} */ 116 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectEnter(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, int rcBusy) 117 { 118 PDMDRV_ASSERT_DRVINS(pDrvIns); 119 NOREF(pDrvIns); 120 return PDMCritSectEnter(pCritSect, rcBusy); 121 } 122 123 124 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectEnterDebug} */ 125 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectEnterDebug(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, int rcBusy, 126 RTHCUINTPTR uId, RT_SRC_POS_DECL) 127 { 128 PDMDRV_ASSERT_DRVINS(pDrvIns); 129 NOREF(pDrvIns); 130 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 131 } 132 133 134 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectTryEnter} */ 135 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectTryEnter(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 136 { 137 PDMDRV_ASSERT_DRVINS(pDrvIns); 138 NOREF(pDrvIns); 139 return PDMCritSectTryEnter(pCritSect); 140 } 141 142 143 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectTryEnterDebug} */ 144 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectTryEnterDebug(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, 145 RTHCUINTPTR uId, RT_SRC_POS_DECL) 146 { 147 PDMDRV_ASSERT_DRVINS(pDrvIns); 148 NOREF(pDrvIns); 149 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 150 } 151 152 153 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectLeave} */ 154 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectLeave(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 155 { 156 PDMDRV_ASSERT_DRVINS(pDrvIns); 157 NOREF(pDrvIns); 158 return PDMCritSectLeave(pCritSect); 159 } 160 161 162 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectIsOwner} */ 163 static DECLCALLBACK(bool) pdmR0DrvHlp_CritSectIsOwner(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 164 { 165 PDMDRV_ASSERT_DRVINS(pDrvIns); 166 NOREF(pDrvIns); 167 return PDMCritSectIsOwner(pCritSect); 168 } 169 170 171 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectIsInitialized} */ 172 static DECLCALLBACK(bool) pdmR0DrvHlp_CritSectIsInitialized(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 173 { 174 PDMDRV_ASSERT_DRVINS(pDrvIns); 175 NOREF(pDrvIns); 176 return PDMCritSectIsInitialized(pCritSect); 177 } 178 179 180 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectHasWaiters} */ 181 static DECLCALLBACK(bool) pdmR0DrvHlp_CritSectHasWaiters(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 182 { 183 PDMDRV_ASSERT_DRVINS(pDrvIns); 184 NOREF(pDrvIns); 185 return PDMCritSectHasWaiters(pCritSect); 186 } 187 188 189 /** @interface_method_impl{PDMDRVHLPR0,pfnCritSectGetRecursion} */ 190 static DECLCALLBACK(uint32_t) pdmR0DrvHlp_CritSectGetRecursion(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 191 { 192 PDMDRV_ASSERT_DRVINS(pDrvIns); 193 NOREF(pDrvIns); 194 return PDMCritSectGetRecursion(pCritSect); 195 } 196 197 198 /** @interface_method_impl{PDMDRVHLPR0,pfn} */ 199 static DECLCALLBACK(int) pdmR0DrvHlp_CritSectScheduleExitEvent(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, 200 SUPSEMEVENT hEventToSignal) 201 { 202 PDMDRV_ASSERT_DRVINS(pDrvIns); 203 NOREF(pDrvIns); 204 return PDMHCCritSectScheduleExitEvent(pCritSect, hEventToSignal); 205 } 206 207 208 /** @interface_method_impl{PDMDRVHLPR0,pfn} */ 209 210 115 211 /** 116 212 * The Ring-0 Context Driver Helper Callbacks. … … 125 221 pdmR0DrvHlp_AssertEMT, 126 222 pdmR0DrvHlp_AssertOther, 223 pdmR0DrvHlp_CritSectEnter, 224 pdmR0DrvHlp_CritSectEnterDebug, 225 pdmR0DrvHlp_CritSectTryEnter, 226 pdmR0DrvHlp_CritSectTryEnterDebug, 227 pdmR0DrvHlp_CritSectLeave, 228 pdmR0DrvHlp_CritSectIsOwner, 229 pdmR0DrvHlp_CritSectIsInitialized, 230 pdmR0DrvHlp_CritSectHasWaiters, 231 pdmR0DrvHlp_CritSectGetRecursion, 232 pdmR0DrvHlp_CritSectScheduleExitEvent, 127 233 PDM_DRVHLPRC_VERSION 128 234 }; -
trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp
r89949 r90329 1783 1783 } 1784 1784 1785 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectYield} */ 1786 static DECLCALLBACK(bool) pdmR3DrvHlp_CritSectYield(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 1787 { 1788 PDMDRV_ASSERT_DRVINS(pDrvIns); 1789 RT_NOREF(pDrvIns); 1790 return PDMR3CritSectYield(pDrvIns->Internal.s.pVMR3, pCritSect); 1791 } 1792 1793 1794 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectEnter} */ 1795 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectEnter(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, int rcBusy) 1796 { 1797 PDMDRV_ASSERT_DRVINS(pDrvIns); 1798 RT_NOREF(pDrvIns); 1799 return PDMCritSectEnter(pCritSect, rcBusy); 1800 } 1801 1802 1803 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectEnterDebug} */ 1804 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectEnterDebug(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, int rcBusy, 1805 RTHCUINTPTR uId, RT_SRC_POS_DECL) 1806 { 1807 PDMDRV_ASSERT_DRVINS(pDrvIns); 1808 RT_NOREF(pDrvIns); 1809 return PDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS); 1810 } 1811 1812 1813 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectTryEnter} */ 1814 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectTryEnter(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 1815 { 1816 PDMDRV_ASSERT_DRVINS(pDrvIns); 1817 RT_NOREF(pDrvIns); 1818 return PDMCritSectTryEnter(pCritSect); 1819 } 1820 1821 1822 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectTryEnterDebug} */ 1823 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectTryEnterDebug(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, 1824 RTHCUINTPTR uId, RT_SRC_POS_DECL) 1825 { 1826 PDMDRV_ASSERT_DRVINS(pDrvIns); 1827 RT_NOREF(pDrvIns); 1828 return PDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS); 1829 } 1830 1831 1832 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectLeave} */ 1833 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectLeave(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 1834 { 1835 PDMDRV_ASSERT_DRVINS(pDrvIns); 1836 RT_NOREF(pDrvIns); 1837 return PDMCritSectLeave(pCritSect); 1838 } 1839 1840 1841 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectIsOwner} */ 1842 static DECLCALLBACK(bool) pdmR3DrvHlp_CritSectIsOwner(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 1843 { 1844 PDMDRV_ASSERT_DRVINS(pDrvIns); 1845 RT_NOREF(pDrvIns); 1846 return PDMCritSectIsOwner(pCritSect); 1847 } 1848 1849 1850 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectIsInitialized} */ 1851 static DECLCALLBACK(bool) pdmR3DrvHlp_CritSectIsInitialized(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 1852 { 1853 PDMDRV_ASSERT_DRVINS(pDrvIns); 1854 RT_NOREF(pDrvIns); 1855 return PDMCritSectIsInitialized(pCritSect); 1856 } 1857 1858 1859 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectHasWaiters} */ 1860 static DECLCALLBACK(bool) pdmR3DrvHlp_CritSectHasWaiters(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 1861 { 1862 PDMDRV_ASSERT_DRVINS(pDrvIns); 1863 RT_NOREF(pDrvIns); 1864 return PDMCritSectHasWaiters(pCritSect); 1865 } 1866 1867 1868 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectGetRecursion} */ 1869 static DECLCALLBACK(uint32_t) pdmR3DrvHlp_CritSectGetRecursion(PPDMDRVINS pDrvIns, PCPDMCRITSECT pCritSect) 1870 { 1871 PDMDRV_ASSERT_DRVINS(pDrvIns); 1872 RT_NOREF(pDrvIns); 1873 return PDMCritSectGetRecursion(pCritSect); 1874 } 1875 1876 1877 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectScheduleExitEvent} */ 1878 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectScheduleExitEvent(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, 1879 SUPSEMEVENT hEventToSignal) 1880 { 1881 PDMDRV_ASSERT_DRVINS(pDrvIns); 1882 RT_NOREF(pDrvIns); 1883 return PDMHCCritSectScheduleExitEvent(pCritSect, hEventToSignal); 1884 } 1885 1886 1887 /** @interface_method_impl{PDMDRVHLPR3,pfnCritSectDelete} */ 1888 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectDelete(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect) 1889 { 1890 PDMDRV_ASSERT_DRVINS(pDrvIns); 1891 RT_NOREF(pDrvIns); 1892 return PDMR3CritSectDelete(pCritSect); 1893 } 1894 1785 1895 1786 1896 /** @interface_method_impl{PDMDRVHLPR3,pfnCallR0} */ … … 1941 2051 pdmR3DrvHlp_LdrGetR0InterfaceSymbols, 1942 2052 pdmR3DrvHlp_CritSectInit, 2053 pdmR3DrvHlp_CritSectYield, 2054 pdmR3DrvHlp_CritSectEnter, 2055 pdmR3DrvHlp_CritSectEnterDebug, 2056 pdmR3DrvHlp_CritSectTryEnter, 2057 pdmR3DrvHlp_CritSectTryEnterDebug, 2058 pdmR3DrvHlp_CritSectLeave, 2059 pdmR3DrvHlp_CritSectIsOwner, 2060 pdmR3DrvHlp_CritSectIsInitialized, 2061 pdmR3DrvHlp_CritSectHasWaiters, 2062 pdmR3DrvHlp_CritSectGetRecursion, 2063 pdmR3DrvHlp_CritSectScheduleExitEvent, 2064 pdmR3DrvHlp_CritSectDelete, 1943 2065 pdmR3DrvHlp_CallR0, 1944 2066 pdmR3DrvHlp_BlkCacheRetain,
Note:
See TracChangeset
for help on using the changeset viewer.