VirtualBox

Changeset 90329 in vbox for trunk/src


Ignore:
Timestamp:
Jul 26, 2021 12:47:26 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145892
Message:

PDMDrvHlp: Put the PDMCritSect API into driver helpers just like we've got for devices. bugref:10074

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp

    r87935 r90329  
    290290#else
    291291# 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
    292304    /** @todo If preemption is disabled it means we're in VT-x/AMD-V context
    293305     *        and would be better off switching out of that while waiting for
     
    333345        return pdmR3R0CritSectEnterContended(pCritSect, hNativeSelf, pSrcPos);
    334346#  endif
    335 #endif /* IN_RING0 */
     347# endif /* IN_RING0 */
    336348
    337349    STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock);
  • trunk/src/VBox/VMM/VMMR0/PDMR0Driver.cpp

    r84071 r90329  
    113113
    114114
     115/** @interface_method_impl{PDMDRVHLPR0,pfnCritSectEnter} */
     116static 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} */
     125static 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} */
     135static 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} */
     144static 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} */
     154static 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} */
     163static 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} */
     172static 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} */
     181static 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} */
     190static 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} */
     199static 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
    115211/**
    116212 * The Ring-0 Context Driver Helper Callbacks.
     
    125221    pdmR0DrvHlp_AssertEMT,
    126222    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,
    127233    PDM_DRVHLPRC_VERSION
    128234};
  • trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp

    r89949 r90329  
    17831783}
    17841784
     1785/** @interface_method_impl{PDMDRVHLPR3,pfnCritSectYield} */
     1786static 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} */
     1795static 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} */
     1804static 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} */
     1814static 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} */
     1823static 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} */
     1833static 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} */
     1842static 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} */
     1851static 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} */
     1860static 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} */
     1869static 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} */
     1878static 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} */
     1888static DECLCALLBACK(int)      pdmR3DrvHlp_CritSectDelete(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect)
     1889{
     1890    PDMDRV_ASSERT_DRVINS(pDrvIns);
     1891    RT_NOREF(pDrvIns);
     1892    return PDMR3CritSectDelete(pCritSect);
     1893}
     1894
    17851895
    17861896/** @interface_method_impl{PDMDRVHLPR3,pfnCallR0} */
     
    19412051    pdmR3DrvHlp_LdrGetR0InterfaceSymbols,
    19422052    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,
    19432065    pdmR3DrvHlp_CallR0,
    19442066    pdmR3DrvHlp_BlkCacheRetain,
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette