Changeset 87760 in vbox
- Timestamp:
- Feb 15, 2021 10:45:27 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 31 edited
-
include/VBox/vmm/pdmdev.h (modified) (7 diffs)
-
include/VBox/vmm/pdmdrv.h (modified) (1 diff)
-
include/VBox/vmm/tm.h (modified) (1 diff)
-
src/VBox/Devices/Audio/DevHDA.cpp (modified) (1 diff)
-
src/VBox/Devices/Audio/DevIchAc97.cpp (modified) (3 diffs)
-
src/VBox/Devices/Audio/DevSB16.cpp (modified) (1 diff)
-
src/VBox/Devices/Graphics/DevVGA.cpp (modified) (2 diffs)
-
src/VBox/Devices/Input/DevPS2K.cpp (modified) (3 diffs)
-
src/VBox/Devices/Input/DevPS2M.cpp (modified) (2 diffs)
-
src/VBox/Devices/Network/DevE1000.cpp (modified) (5 diffs)
-
src/VBox/Devices/Network/DevPCNet.cpp (modified) (2 diffs)
-
src/VBox/Devices/Network/DevVirtioNet.cpp (modified) (2 diffs)
-
src/VBox/Devices/Network/DevVirtioNet_1_0.cpp (modified) (1 diff)
-
src/VBox/Devices/PC/DevACPI.cpp (modified) (1 diff)
-
src/VBox/Devices/PC/DevHPET.cpp (modified) (1 diff)
-
src/VBox/Devices/PC/DevPit-i8254.cpp (modified) (1 diff)
-
src/VBox/Devices/PC/DevRTC.cpp (modified) (7 diffs)
-
src/VBox/Devices/Serial/UartCore.cpp (modified) (2 diffs)
-
src/VBox/Devices/Storage/DevAHCI.cpp (modified) (1 diff)
-
src/VBox/Devices/Storage/DevFdc.cpp (modified) (3 diffs)
-
src/VBox/Devices/USB/DevOHCI.cpp (modified) (1 diff)
-
src/VBox/Devices/VMMDev/VMMDev.cpp (modified) (1 diff)
-
src/VBox/ExtPacks/BusMouseSample/DevBusMouse.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMAll/TMAll.cpp (modified) (20 diffs)
-
src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp (modified) (3 diffs)
-
src/VBox/VMM/VMMR3/APIC.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMR3/PDMDevHlp.cpp (modified) (7 diffs)
-
src/VBox/VMM/VMMR3/PDMDriver.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMR3/PDMUsb.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMR3/TM.cpp (modified) (9 diffs)
-
src/VBox/VMM/include/TMInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r87691 r87760 2351 2351 2352 2352 /** Current PDMDEVHLPR3 version number. */ 2353 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 4 5, 0)2353 #define PDM_DEVHLPR3_VERSION PDM_VERSION_MAKE_PP(0xffe7, 46, 0) 2354 2354 2355 2355 /** … … 2800 2800 2801 2801 /** 2802 * Creates a timer.2803 *2804 * @returns VBox status.2805 * @param pDevIns The device instance.2806 * @param enmClock The clock to use on this timer.2807 * @param pfnCallback Callback function.2808 * @param pvUser User argument for the callback.2809 * @param fFlags Flags, see TMTIMER_FLAGS_*.2810 * @param pszDesc Pointer to description string which must stay around2811 * until the timer is fully destroyed (i.e. a bit after TMTimerDestroy()).2812 * @param ppTimer Where to store the timer on success.2813 * @remarks Caller enters the device critical section prior to invoking the2814 * callback.2815 */2816 DECLR3CALLBACKMEMBER(int, pfnTMTimerCreate,(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback,2817 void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer));2818 2819 /**2820 2802 * Creates a timer w/ a cross context handle. 2821 2803 * … … 2834 2816 DECLR3CALLBACKMEMBER(int, pfnTimerCreate,(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, 2835 2817 void *pvUser, uint32_t fFlags, const char *pszDesc, PTMTIMERHANDLE phTimer)); 2836 2837 /**2838 * Translates a timer handle to a pointer.2839 *2840 * @returns The time address.2841 * @param pDevIns The device instance.2842 * @param hTimer The timer handle.2843 */2844 DECLR3CALLBACKMEMBER(PTMTIMERR3, pfnTimerToPtr,(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer));2845 2818 2846 2819 /** @name Timer handle method wrappers … … 5225 5198 DECLR0CALLBACKMEMBER(VMCPUID, pfnGetCurrentCpuId,(PPDMDEVINS pDevIns)); 5226 5199 5227 /**5228 * Translates a timer handle to a pointer.5229 *5230 * @returns The time address.5231 * @param pDevIns The device instance.5232 * @param hTimer The timer handle.5233 */5234 DECLR0CALLBACKMEMBER(PTMTIMERR0, pfnTimerToPtr,(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer));5235 5236 5200 /** @name Timer handle method wrappers 5237 5201 * @{ */ … … 5489 5453 5490 5454 /** Current PDMDEVHLP version number. */ 5491 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 1 8, 0)5455 #define PDM_DEVHLPR0_VERSION PDM_VERSION_MAKE(0xffe5, 19, 0) 5492 5456 5493 5457 … … 6320 6284 6321 6285 /** 6322 * @copydoc PDMDEVHLPR3::pfnTMTimerCreate6323 */6324 DECLINLINE(int) PDMDevHlpTMTimerCreate(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, void *pvUser,6325 uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer)6326 {6327 return pDevIns->pHlpR3->pfnTMTimerCreate(pDevIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer);6328 }6329 6330 /**6331 6286 * @copydoc PDMDEVHLPR3::pfnTimerCreate 6332 6287 */ … … 6338 6293 6339 6294 #endif /* IN_RING3 */ 6340 6341 /**6342 * @copydoc PDMDEVHLPR3::pfnTimerToPtr6343 */6344 DECLINLINE(PTMTIMER) PDMDevHlpTimerToPtr(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer)6345 {6346 return pDevIns->CTX_SUFF(pHlp)->pfnTimerToPtr(pDevIns, hTimer);6347 }6348 6295 6349 6296 /** -
trunk/include/VBox/vmm/pdmdrv.h
r85121 r87760 1509 1509 * @copydoc PDMDRVHLPR3::pfnTMTimerCreate 1510 1510 */ 1511 DECLINLINE(int) PDMDrvHlpTMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1511 DECLINLINE(int) PDMDrvHlpTMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, 1512 uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1512 1513 { 1513 1514 return pDrvIns->pHlpR3->pfnTMTimerCreate(pDrvIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer); -
trunk/include/VBox/vmm/tm.h
r87751 r87760 82 82 * TMR3TimerSetCritSect(). */ 83 83 #define TMTIMER_FLAGS_NO_CRIT_SECT RT_BIT_32(0) 84 /** Used in ring-0. Must set this or TMTIMER_FLAGS_NO_RING0. */ 85 #define TMTIMER_FLAGS_RING0 RT_BIT_32(1) 86 /** Not used in ring-0 (for refactoring and doc purposes). */ 87 #define TMTIMER_FLAGS_NO_RING0 RT_BIT_32(31) 84 88 /** @} */ 85 89 -
trunk/src/VBox/Devices/Audio/DevHDA.cpp
r87758 r87760 4922 4922 * instead of the LPIB registers. 4923 4923 */ 4924 /** @todo r=bird: The need to use virtual sync is perhaps because TM 4925 * doesn't schedule regular TMCLOCK_VIRTUAL timers as accurately as it 4926 * should (VT-x preemption timer, etc). Hope to address that before 4927 * long. @bugref{9943}. */ 4924 4928 static const char * const s_apszNames[] = 4925 { 4926 "HDA SD0", "HDA SD1", "HDA SD2", "HDA SD3", 4927 "HDA SD4", "HDA SD5", "HDA SD6", "HDA SD7", 4928 }; 4929 { "HDA SD0", "HDA SD1", "HDA SD2", "HDA SD3", "HDA SD4", "HDA SD5", "HDA SD6", "HDA SD7", }; 4929 4930 AssertCompile(RT_ELEMENTS(s_apszNames) == HDA_MAX_STREAMS); 4930 4931 for (size_t i = 0; i < HDA_MAX_STREAMS; i++) 4931 4932 { 4932 4933 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, hdaR3Timer, (void *)(uintptr_t)i, 4933 TMTIMER_FLAGS_NO_CRIT_SECT, s_apszNames[i], &pThis->aStreams[i].hTimer); 4934 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 4935 s_apszNames[i], &pThis->aStreams[i].hTimer); 4934 4936 AssertRCReturn(rc, rc); 4935 4937 -
trunk/src/VBox/Devices/Audio/DevIchAc97.cpp
r86741 r87760 651 651 /** 652 652 * Acquires the TM lock and AC'97 lock, returns on failure. 653 * 654 * @todo r=bird: Isn't this overkill for ring-0, only ring-3 access the timer 655 * from what I can tell (ichac97R3StreamTransferCalcNext, 656 * ichac97R3TimerSet, timer callback and state load). 653 657 */ 654 658 #define DEVAC97_LOCK_BOTH_RETURN(a_pDevIns, a_pThis, a_pStream, a_rcBusy) \ … … 4330 4334 * instead of the LPIB registers. 4331 4335 */ 4336 /** @todo r=bird: The need to use virtual sync is perhaps because TM 4337 * doesn't schedule regular TMCLOCK_VIRTUAL timers as accurately as it 4338 * should (VT-x preemption timer, etc). Hope to address that before 4339 * long. @bugref{9943}. */ 4332 4340 static const char * const s_apszNames[] = { "AC97 PI", "AC97 PO", "AC97 MC" }; 4333 4341 AssertCompile(RT_ELEMENTS(s_apszNames) == AC97_MAX_STREAMS); … … 4335 4343 { 4336 4344 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, ichac97R3Timer, &pThis->aStreams[i], 4337 TMTIMER_FLAGS_NO_CRIT_SECT , s_apszNames[i], &pThis->aStreams[i].hTimer);4345 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, s_apszNames[i], &pThis->aStreams[i].hTimer); 4338 4346 AssertRCReturn(rc, rc); 4339 4347 -
trunk/src/VBox/Devices/Audio/DevSB16.cpp
r82968 r87760 2430 2430 */ 2431 2431 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, sb16TimerIRQ, pThis, 2432 TMTIMER_FLAGS_DEFAULT_CRIT_SECT , "SB16 IRQ timer", &pThis->hTimerIRQ);2432 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "SB16 IRQ timer", &pThis->hTimerIRQ); 2433 2433 AssertRCReturn(rc, rc); 2434 2434 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, sb16TimerIO, pThis, 2435 TMTIMER_FLAGS_DEFAULT_CRIT_SECT , "SB16 IO timer", &pThis->hTimerIO);2435 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "SB16 IO timer", &pThis->hTimerIO); 2436 2436 AssertRCReturn(rc, rc); 2437 2437 pThis->cTicksTimerIOInterval = PDMDevHlpTimerGetFreq(pDevIns, pThis->hTimerIO) / uTimerHz; -
trunk/src/VBox/Devices/Graphics/DevVGA.cpp
r87118 r87760 5445 5445 * @callback_method_impl{FNTMTIMERDEV, VGA Refresh Timer} 5446 5446 */ 5447 static DECLCALLBACK(void) vga TimerRefresh(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)5447 static DECLCALLBACK(void) vgaR3TimerRefresh(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser) 5448 5448 { 5449 5449 PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE); … … 6783 6783 * Create the refresh timer. 6784 6784 */ 6785 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_REAL, vga TimerRefresh, NULL, TMTIMER_FLAGS_NO_CRIT_SECT,6786 "VGA Refresh Timer", &pThis->hRefreshTimer);6785 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_REAL, vgaR3TimerRefresh, NULL, 6786 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "VGA Refresh Timer", &pThis->hRefreshTimer); 6787 6787 AssertRCReturn(rc, rc); 6788 6788 -
trunk/src/VBox/Devices/Input/DevPS2K.cpp
r87378 r87760 1401 1401 */ 1402 1402 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ps2kR3ThrottleTimer, pThis, 1403 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "PS2K Throttle Timer", &pThis->hThrottleTimer); 1403 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, 1404 "PS2K Throttle Timer", &pThis->hThrottleTimer); 1404 1405 AssertRCReturn(rc, rc); 1405 1406 … … 1408 1409 */ 1409 1410 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ps2kR3TypematicTimer, pThis, 1410 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "PS2K Typematic Timer", &pThis->hKbdTypematicTimer); 1411 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, 1412 "PS2K Typematic Timer", &pThis->hKbdTypematicTimer); 1411 1413 AssertRCReturn(rc, rc); 1412 1414 … … 1415 1417 */ 1416 1418 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ps2kR3DelayTimer, pThis, 1417 TMTIMER_FLAGS_DEFAULT_CRIT_SECT , "PS2K Delay Timer", &pThis->hKbdDelayTimer);1419 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, "PS2K Delay Timer", &pThis->hKbdDelayTimer); 1418 1420 AssertRCReturn(rc, rc); 1419 1421 -
trunk/src/VBox/Devices/Input/DevPS2M.cpp
r83444 r87760 1085 1085 */ 1086 1086 int rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_REAL, ps2mR3ThrottleTimer, pThis, 1087 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "PS2M Throttle Timer", &pThis->hThrottleTimer); 1087 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 1088 "PS2M Throttle Timer", &pThis->hThrottleTimer); 1088 1089 AssertRCReturn(rc, rc); 1089 1090 … … 1092 1093 */ 1093 1094 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ps2mR3DelayTimer, pThis, 1094 TMTIMER_FLAGS_DEFAULT_CRIT_SECT , "PS2M Delay Timer", &pThis->hDelayTimer);1095 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, "PS2M Delay Timer", &pThis->hDelayTimer); 1095 1096 AssertRCReturn(rc, rc); 1096 1097 -
trunk/src/VBox/Devices/Network/DevE1000.cpp
r87111 r87760 8074 8074 #ifdef E1K_TX_DELAY 8075 8075 /* Create Transmit Delay Timer */ 8076 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxDelayTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8076 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxDelayTimer, pThis, 8077 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8077 8078 "E1000 Transmit Delay Timer", &pThis->hTXDTimer); 8078 8079 AssertRCReturn(rc, rc); … … 8085 8086 { 8086 8087 /* Create Transmit Interrupt Delay Timer */ 8087 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxIntDelayTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8088 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxIntDelayTimer, pThis, 8089 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8088 8090 "E1000 Transmit Interrupt Delay Timer", &pThis->hTIDTimer); 8089 8091 AssertRCReturn(rc, rc); … … 8091 8093 # ifndef E1K_NO_TAD 8092 8094 /* Create Transmit Absolute Delay Timer */ 8093 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxAbsDelayTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8095 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3TxAbsDelayTimer, pThis, 8096 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8094 8097 "E1000 Transmit Absolute Delay Timer", &pThis->hTADTimer); 8095 8098 AssertRCReturn(rc, rc); … … 8100 8103 #ifdef E1K_USE_RX_TIMERS 8101 8104 /* Create Receive Interrupt Delay Timer */ 8102 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3RxIntDelayTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8105 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3RxIntDelayTimer, pThis, 8106 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8103 8107 "E1000 Receive Interrupt Delay Timer", &pThis->hRIDTimer); 8104 8108 AssertRCReturn(rc, rc); 8105 8109 8106 8110 /* Create Receive Absolute Delay Timer */ 8107 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3RxAbsDelayTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8111 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3RxAbsDelayTimer, pThis, 8112 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8108 8113 "E1000 Receive Absolute Delay Timer", &pThis->hRADTimer); 8109 8114 AssertRCReturn(rc, rc); … … 8111 8116 8112 8117 /* Create Late Interrupt Timer */ 8113 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3LateIntTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8118 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3LateIntTimer, pThis, 8119 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8114 8120 "E1000 Late Interrupt Timer", &pThis->hIntTimer); 8115 8121 AssertRCReturn(rc, rc); 8116 8122 8117 8123 /* Create Link Up Timer */ 8118 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3LinkUpTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 8124 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, e1kR3LinkUpTimer, pThis, 8125 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 8119 8126 "E1000 Link Up Timer", &pThis->hLUTimer); 8120 8127 AssertRCReturn(rc, rc); -
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r87285 r87760 5328 5328 5329 5329 #else 5330 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3Timer, NULL, TMTIMER_FLAGS_NO_CRIT_SECT ,5330 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3Timer, NULL, TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 5331 5331 "PCnet Poll Timer", &pThis->hTimerPoll); 5332 5332 AssertRCReturn(rc, rc); … … 5337 5337 { 5338 5338 /* Software Interrupt timer */ 5339 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3TimerSoftInt, NULL, TMTIMER_FLAGS_NO_CRIT_SECT,5340 "PCnet SoftInt Timer", &pThis->hTimerSoftInt);5339 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3TimerSoftInt, NULL, 5340 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, "PCnet SoftInt Timer", &pThis->hTimerSoftInt); 5341 5341 AssertRCReturn(rc, rc); 5342 5342 rc = PDMDevHlpTimerSetCritSect(pDevIns, pThis->hTimerSoftInt, &pThis->CritSect); 5343 5343 AssertRCReturn(rc, rc); 5344 5344 } 5345 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3TimerRestore, pThis, TMTIMER_FLAGS_NO_CRIT_SECT,5346 "PCnet Restore Timer", &pThis->hTimerRestore);5345 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, pcnetR3TimerRestore, pThis, 5346 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "PCnet Restore Timer", &pThis->hTimerRestore); 5347 5347 AssertRCReturn(rc, rc); 5348 5348 -
trunk/src/VBox/Devices/Network/DevVirtioNet.cpp
r85109 r87760 2248 2248 2249 2249 /* Create Link Up Timer */ 2250 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vnetR3LinkUpTimer, NULL, TMTIMER_FLAGS_NO_CRIT_SECT, 2250 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vnetR3LinkUpTimer, NULL, 2251 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 2251 2252 "VirtioNet Link Up Timer", &pThisCC->hLinkUpTimer); 2252 2253 AssertRCReturn(rc, rc); … … 2254 2255 # ifdef VNET_TX_DELAY 2255 2256 /* Create Transmit Delay Timer */ 2256 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vnetR3TxTimer, pThis, TMTIMER_FLAGS_NO_CRIT_SECT, 2257 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vnetR3TxTimer, pThis, 2258 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 2257 2259 "VirtioNet TX Delay Timer", &pThis->hTxTimer); 2258 2260 AssertRCReturn(rc, rc); -
trunk/src/VBox/Devices/Network/DevVirtioNet_1_0.cpp
r86407 r87760 3036 3036 3037 3037 /* Create Link Up Timer */ 3038 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, virtioNetR3LinkUpTimer, NULL, TMTIMER_FLAGS_NO_CRIT_SECT, 3038 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, virtioNetR3LinkUpTimer, NULL, 3039 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 3039 3040 "VirtioNet Link Up Timer", &pThisCC->hLinkUpTimer); 3040 3041 -
trunk/src/VBox/Devices/PC/DevACPI.cpp
r86408 r87760 4388 4388 */ 4389 4389 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, acpiR3PmTimer, NULL /*pvUser*/, 4390 TMTIMER_FLAGS_NO_CRIT_SECT , "ACPI PM Timer", &pThis->hPmTimer);4390 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, "ACPI PM Timer", &pThis->hPmTimer); 4391 4391 AssertRCReturn(rc, rc); 4392 4392 -
trunk/src/VBox/Devices/PC/DevHPET.cpp
r86591 r87760 1465 1465 1466 1466 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, hpetR3Timer, pHpetTimer, 1467 TMTIMER_FLAGS_NO_CRIT_SECT, s_apszTimerNames[i], &pThis->aTimers[i].hTimer); 1467 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 1468 s_apszTimerNames[i], &pThis->aTimers[i].hTimer); 1468 1469 AssertRCReturn(rc, rc); 1469 1470 /** @todo r=bird: This is TOTALLY MESSED UP! Why do we need -
trunk/src/VBox/Devices/PC/DevPit-i8254.cpp
r84334 r87760 1424 1424 */ 1425 1425 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, pitR3Timer, &pThis->channels[0], 1426 TMTIMER_FLAGS_NO_CRIT_SECT, "i8254 Programmable Interval Timer", &pThis->channels[0].hTimer); 1426 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, 1427 "i8254 Programmable Interval Timer", &pThis->channels[0].hTimer); 1427 1428 AssertRCReturn(rc, rc); 1428 1429 rc = PDMDevHlpTimerSetCritSect(pDevIns, pThis->channels[0].hTimer, &pThis->CritSect); -
trunk/src/VBox/Devices/PC/DevRTC.cpp
r82968 r87760 588 588 RT_NOREF2(pTimer, pvUser); 589 589 PRTCSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PRTCSTATE); 590 Assert(pTimer == PDMDevHlpTimerToPtr(pDevIns, pThis->hPeriodicTimer));591 590 Assert(PDMDevHlpTimerIsLockOwner(pDevIns, pThis->hPeriodicTimer)); 592 591 Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo))); … … 667 666 * @callback_method_impl{FNTMTIMERDEV, Second timer.} 668 667 */ 669 static DECLCALLBACK(void) rtc TimerSecond(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)668 static DECLCALLBACK(void) rtcR3TimerSecond(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser) 670 669 { 671 670 PRTCSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PRTCSTATE); … … 673 672 Assert(PDMDevHlpTimerIsLockOwner(pDevIns, pThis->hPeriodicTimer)); 674 673 Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo))); 675 Assert(pTimer == PDMDevHlpTimerToPtr(pDevIns, pThis->hSecondTimer));676 674 RT_NOREF(pvUser, pTimer); 677 675 … … 700 698 701 699 702 /* Used by rtc_set_date and rtc TimerSecond2. */700 /* Used by rtc_set_date and rtcR3TimerSecond2. */ 703 701 static void rtc_copy_date(PRTCSTATE pThis) 704 702 { … … 730 728 * @callback_method_impl{FNTMTIMERDEV, Second2 timer.} 731 729 */ 732 static DECLCALLBACK(void) rtc TimerSecond2(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)730 static DECLCALLBACK(void) rtcR3TimerSecond2(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser) 733 731 { 734 732 PRTCSTATE pThis = PDMDEVINS_2_DATA(pDevIns, PRTCSTATE); … … 736 734 Assert(PDMDevHlpTimerIsLockOwner(pDevIns, pThis->hPeriodicTimer)); 737 735 Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo))); 738 Assert(pTimer == PDMDevHlpTimerToPtr(pDevIns, pThis->hSecondTimer2));739 736 RT_NOREF2(pTimer, pvUser); 740 737 … … 1159 1156 /* Periodic timer. */ 1160 1157 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, rtcTimerPeriodic, pThis, 1161 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "MC146818 RTC (CMOS) - Periodic", &pThis->hPeriodicTimer); 1158 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, 1159 "MC146818 RTC (CMOS) - Periodic", &pThis->hPeriodicTimer); 1162 1160 AssertRCReturn(rc, rc); 1163 1161 1164 1162 /* Seconds timer. */ 1165 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, rtcTimerSecond, pThis, 1166 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "MC146818 RTC (CMOS) - Second", &pThis->hSecondTimer); 1163 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, rtcR3TimerSecond, pThis, 1164 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_RING0, 1165 "MC146818 RTC (CMOS) - Second", &pThis->hSecondTimer); 1167 1166 AssertRCReturn(rc, rc); 1168 1167 1169 1168 /* The second2 timer, this is always active. */ 1170 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, rtcTimerSecond2, pThis, 1171 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "MC146818 RTC (CMOS) - Second2", &pThis->hSecondTimer2); 1169 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, rtcR3TimerSecond2, pThis, 1170 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 1171 "MC146818 RTC (CMOS) - Second2", &pThis->hSecondTimer2); 1172 1172 AssertRCReturn(rc, rc); 1173 1173 -
trunk/src/VBox/Devices/Serial/UartCore.cpp
r87726 r87760 2070 2070 */ 2071 2071 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, uartR3RcvFifoTimeoutTimer, pThisCC, 2072 TMTIMER_FLAGS_NO_CRIT_SECT , "UART Rcv FIFO Timer",2072 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, "UART Rcv FIFO Timer", 2073 2073 &pThis->hTimerRcvFifoTimeout); 2074 2074 AssertRCReturn(rc, rc); … … 2081 2081 */ 2082 2082 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, uartR3TxUnconnectedTimer, pThisCC, 2083 TMTIMER_FLAGS_NO_CRIT_SECT , "UART TX uncon. Timer",2083 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "UART TX uncon. Timer", 2084 2084 &pThis->hTimerTxUnconnected); 2085 2085 AssertRCReturn(rc, rc); -
trunk/src/VBox/Devices/Storage/DevAHCI.cpp
r87047 r87760 5937 5937 */ 5938 5938 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ahciCccTimer, pThis, 5939 TMTIMER_FLAGS_NO_CRIT_SECT , "AHCI CCC Timer", &pThis->hHbaCccTimer);5939 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, "AHCI CCC Timer", &pThis->hHbaCccTimer); 5940 5940 AssertRCReturn(rc, rc); 5941 5941 -
trunk/src/VBox/Devices/Storage/DevFdc.cpp
r87121 r87760 2924 2924 */ 2925 2925 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, fdcTimerCallback, pThis, 2926 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "FDC Timer", &pThis->hResultTimer); 2926 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 2927 "FDC Timer", &pThis->hResultTimer); 2927 2928 AssertRCReturn(rc, rc); 2928 2929 … … 2931 2932 */ 2932 2933 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, fdcTransferDelayTimer, pThis, 2933 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "FDC Transfer Delay Timer", &pThis->hXferDelayTimer); 2934 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 2935 "FDC Transfer Delay Timer", &pThis->hXferDelayTimer); 2934 2936 AssertRCReturn(rc, rc); 2935 2937 … … 2938 2940 */ 2939 2941 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, fdcIrqDelayTimer, pThis, 2940 TMTIMER_FLAGS_DEFAULT_CRIT_SECT, "FDC IRQ Delay Timer", &pThis->hIrqDelayTimer); 2942 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, 2943 "FDC IRQ Delay Timer", &pThis->hIrqDelayTimer); 2941 2944 AssertRCReturn(rc, rc); 2942 2945 -
trunk/src/VBox/Devices/USB/DevOHCI.cpp
r87190 r87760 5822 5822 { 5823 5823 int rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, ohciR3LoadReattachDevices, NULL /*pvUser*/, 5824 TMTIMER_FLAGS_NO_CRIT_SECT, "OHCI reattach devices on load", &pThisCC->pLoad->hTimer); 5824 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "OHCI reattach devices on load", 5825 &pThisCC->pLoad->hTimer); 5825 5826 if (RT_SUCCESS(rc)) 5826 5827 rc = PDMDevHlpTimerSetMillies(pDevIns, pThisCC->pLoad->hTimer, 250); -
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r87283 r87760 4792 4792 */ 4793 4793 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vmmDevHeartbeatFlatlinedTimer, pThis, 4794 TMTIMER_FLAGS_NO_CRIT_SECT , "Heartbeat flatlined", &pThis->hFlatlinedTimer);4794 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, "Heartbeat flatlined", &pThis->hFlatlinedTimer); 4795 4795 AssertRCReturn(rc, rc); 4796 4796 -
trunk/src/VBox/ExtPacks/BusMouseSample/DevBusMouse.cpp
r82968 r87760 716 716 */ 717 717 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL, bmsR3TimerCallback, pThis, 718 TMTIMER_FLAGS_DEFAULT_CRIT_SECT , "Bus Mouse Timer", &pThis->hMouseTimer);718 TMTIMER_FLAGS_DEFAULT_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "Bus Mouse Timer", &pThis->hMouseTimer); 719 719 AssertRCReturn(rc, rc); 720 720 -
trunk/src/VBox/VMM/VMMAll/TMAll.cpp
r87751 r87760 1109 1109 VMMDECL(PTMTIMERR3) TMTimerR3Ptr(PTMTIMER pTimer) 1110 1110 { 1111 #ifdef IN_RING0 1112 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1113 #endif 1111 1114 return (PTMTIMERR3)MMHyperCCToR3(pTimer->CTX_SUFF(pVM), pTimer); 1112 1115 } … … 1121 1124 VMMDECL(PTMTIMERR0) TMTimerR0Ptr(PTMTIMER pTimer) 1122 1125 { 1126 #ifdef IN_RING0 1127 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1128 #endif 1123 1129 return (PTMTIMERR0)MMHyperCCToR0(pTimer->CTX_SUFF(pVM), pTimer); 1124 1130 } … … 1133 1139 VMMDECL(PTMTIMERRC) TMTimerRCPtr(PTMTIMER pTimer) 1134 1140 { 1141 #ifdef IN_RING0 1142 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1143 #endif 1135 1144 return (PTMTIMERRC)MMHyperCCToRC(pTimer->CTX_SUFF(pVM), pTimer); 1136 1145 } … … 1152 1161 VMMDECL(int) TMTimerLock(PTMTIMER pTimer, int rcBusy) 1153 1162 { 1163 #ifdef IN_RING0 1164 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1165 #endif 1154 1166 AssertPtr(pTimer); 1155 1167 AssertReturn(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC, VERR_NOT_SUPPORTED); … … 1165 1177 VMMDECL(void) TMTimerUnlock(PTMTIMER pTimer) 1166 1178 { 1179 #ifdef IN_RING0 1180 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1181 #endif 1167 1182 AssertPtr(pTimer); 1168 1183 AssertReturnVoid(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC); … … 1179 1194 VMMDECL(bool) TMTimerIsLockOwner(PTMTIMER pTimer) 1180 1195 { 1196 #ifdef IN_RING0 1197 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1198 #endif 1181 1199 AssertPtr(pTimer); 1182 1200 AssertReturn(pTimer->enmClock == TMCLOCK_VIRTUAL_SYNC, false); … … 1306 1324 VMMDECL(int) TMTimerSet(PTMTIMER pTimer, uint64_t u64Expire) 1307 1325 { 1326 #ifdef IN_RING0 1327 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1328 #endif 1308 1329 PVMCC pVM = pTimer->CTX_SUFF(pVM); 1309 1330 STAM_COUNTER_INC(&pTimer->StatSetAbsolute); … … 1613 1634 VMMDECL(int) TMTimerSetRelative(PTMTIMER pTimer, uint64_t cTicksToNext, uint64_t *pu64Now) 1614 1635 { 1636 #ifdef IN_RING0 1637 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1638 #endif 1615 1639 PVMCC pVM = pTimer->CTX_SUFF(pVM); 1616 1640 STAM_COUNTER_INC(&pTimer->StatSetRelative); … … 1841 1865 VMMDECL(int) TMTimerSetFrequencyHint(PTMTIMER pTimer, uint32_t uHzHint) 1842 1866 { 1867 #ifdef IN_RING0 1868 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1869 #endif 1843 1870 TMTIMER_ASSERT_CRITSECT(pTimer); 1844 1871 … … 1936 1963 VMMDECL(int) TMTimerStop(PTMTIMER pTimer) 1937 1964 { 1965 #ifdef IN_RING0 1966 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 1967 #endif 1938 1968 PVMCC pVM = pTimer->CTX_SUFF(pVM); 1939 1969 STAM_COUNTER_INC(&pTimer->StatStop); … … 2044 2074 VMMDECL(uint64_t) TMTimerGet(PTMTIMER pTimer) 2045 2075 { 2076 #ifdef IN_RING0 2077 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2078 #endif 2046 2079 PVMCC pVM = pTimer->CTX_SUFF(pVM); 2047 2080 STAM_COUNTER_INC(&pTimer->StatGet); … … 2077 2110 VMMDECL(uint64_t) TMTimerGetFreq(PTMTIMER pTimer) 2078 2111 { 2112 #ifdef IN_RING0 2113 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2114 #endif 2079 2115 switch (pTimer->enmClock) 2080 2116 { … … 2102 2138 VMMDECL(uint64_t) TMTimerGetExpire(PTMTIMER pTimer) 2103 2139 { 2140 #ifdef IN_RING0 2141 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2142 #endif 2104 2143 TMTIMER_ASSERT_CRITSECT(pTimer); 2105 2144 int cRetries = 1000; … … 2164 2203 VMMDECL(bool) TMTimerIsActive(PTMTIMER pTimer) 2165 2204 { 2205 #ifdef IN_RING0 2206 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2207 #endif 2166 2208 TMTIMERSTATE enmState = pTimer->enmState; 2167 2209 switch (enmState) … … 2341 2383 VMMDECL(uint64_t) TMTimerToNano(PTMTIMER pTimer, uint64_t u64Ticks) 2342 2384 { 2385 #ifdef IN_RING0 2386 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2387 #endif 2343 2388 switch (pTimer->enmClock) 2344 2389 { … … 2370 2415 VMMDECL(uint64_t) TMTimerToMicro(PTMTIMER pTimer, uint64_t u64Ticks) 2371 2416 { 2417 #ifdef IN_RING0 2418 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2419 #endif 2372 2420 switch (pTimer->enmClock) 2373 2421 { … … 2399 2447 VMMDECL(uint64_t) TMTimerToMilli(PTMTIMER pTimer, uint64_t u64Ticks) 2400 2448 { 2449 #ifdef IN_RING0 2450 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2451 #endif 2401 2452 switch (pTimer->enmClock) 2402 2453 { … … 2427 2478 VMMDECL(uint64_t) TMTimerFromNano(PTMTIMER pTimer, uint64_t cNanoSecs) 2428 2479 { 2480 #ifdef IN_RING0 2481 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2482 #endif 2429 2483 switch (pTimer->enmClock) 2430 2484 { … … 2455 2509 VMMDECL(uint64_t) TMTimerFromMicro(PTMTIMER pTimer, uint64_t cMicroSecs) 2456 2510 { 2511 #ifdef IN_RING0 2512 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2513 #endif 2457 2514 switch (pTimer->enmClock) 2458 2515 { … … 2483 2540 VMMDECL(uint64_t) TMTimerFromMilli(PTMTIMER pTimer, uint64_t cMilliSecs) 2484 2541 { 2542 #ifdef IN_RING0 2543 Assert(pTimer->fFlags & TMTIMER_FLAGS_RING0); 2544 #endif 2485 2545 switch (pTimer->enmClock) 2486 2546 { -
trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
r87691 r87760 415 415 416 416 417 /** @interface_method_impl{PDMDEVHLPR0,pfnTimerToPtr} */418 static DECLCALLBACK(PTMTIMERR0) pdmR0DevHlp_TimerToPtr(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer) 419 { 420 PDMDEV_ASSERT_DEVINS(pDevIns); 421 RT_NOREF(pDevIns);417 /** Converts a timer handle to a pointer (used to be exposed, will be 418 * rewritten later). */ 419 DECLINLINE(PTMTIMERR0) pdmR0DevHlp_TimerToPtr(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer) 420 { 421 PDMDEV_ASSERT_DEVINS(pDevIns); 422 422 return (PTMTIMERR0)MMHyperR3ToCC(pDevIns->Internal.s.pGVM, hTimer); 423 423 } … … 1249 1249 pdmR0DevHlp_GetVMCPU, 1250 1250 pdmR0DevHlp_GetCurrentCpuId, 1251 pdmR0DevHlp_TimerToPtr,1252 1251 pdmR0DevHlp_TimerFromMicro, 1253 1252 pdmR0DevHlp_TimerFromMilli, … … 1347 1346 pdmR0DevHlp_GetVMCPU, 1348 1347 pdmR0DevHlp_GetCurrentCpuId, 1349 pdmR0DevHlp_TimerToPtr,1350 1348 pdmR0DevHlp_TimerFromMicro, 1351 1349 pdmR0DevHlp_TimerFromMilli, -
trunk/src/VBox/VMM/VMMR3/APIC.cpp
r87519 r87760 1502 1502 PAPICCPU pApicCpu = VMCPU_TO_APICCPU(pVCpu); 1503 1503 RTStrPrintf(&pApicCpu->szTimerDesc[0], sizeof(pApicCpu->szTimerDesc), "APIC Timer %u", pVCpu->idCpu); 1504 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, apicR3TimerCallback, pVCpu, TMTIMER_FLAGS_NO_CRIT_SECT,1505 pApicCpu->szTimerDesc, &pApicCpu->hTimer);1504 rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, apicR3TimerCallback, pVCpu, 1505 TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0, pApicCpu->szTimerDesc, &pApicCpu->hTimer); 1506 1506 AssertRCReturn(rc, rc); 1507 1507 } -
trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
r87494 r87760 412 412 413 413 414 /** @interface_method_impl{PDMDEVHLPR3,pfnTMTimerCreate} */ 415 static DECLCALLBACK(int) pdmR3DevHlp_TMTimerCreate(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 414 /** @interface_method_impl{PDMDEVHLPR3,pfnTimerCreate} */ 415 static DECLCALLBACK(int) pdmR3DevHlp_TimerCreate(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, 416 void *pvUser, uint32_t fFlags, const char *pszDesc, PTMTIMERHANDLE phTimer) 416 417 { 417 418 PDMDEV_ASSERT_DEVINS(pDevIns); 418 419 PVM pVM = pDevIns->Internal.s.pVMR3; 419 420 VM_ASSERT_EMT(pVM); 420 LogFlow(("pdmR3DevHlp_T MTimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} ppTimer=%p\n",421 pDevIns->pReg->szName, pDevIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, p pTimer));421 LogFlow(("pdmR3DevHlp_TimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} phTimer=%p\n", 422 pDevIns->pReg->szName, pDevIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, phTimer)); 422 423 423 424 if (pDevIns->iInstance > 0) /** @todo use a string cache here later. */ … … 428 429 } 429 430 430 int rc = TMR3TimerCreateDevice(pVM, pDevIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer); 431 432 LogFlow(("pdmR3DevHlp_TMTimerCreate: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc)); 433 return rc; 434 } 435 436 437 438 /** @interface_method_impl{PDMDEVHLPR3,pfnTimerCreate} */ 439 static DECLCALLBACK(int) pdmR3DevHlp_TimerCreate(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, 440 void *pvUser, uint32_t fFlags, const char *pszDesc, PTMTIMERHANDLE phTimer) 441 { 442 PDMDEV_ASSERT_DEVINS(pDevIns); 443 PVM pVM = pDevIns->Internal.s.pVMR3; 444 VM_ASSERT_EMT(pVM); 445 LogFlow(("pdmR3DevHlp_TimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} phTimer=%p\n", 446 pDevIns->pReg->szName, pDevIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, phTimer)); 447 448 if (pDevIns->iInstance > 0) /** @todo use a string cache here later. */ 449 { 450 char *pszDesc2 = MMR3HeapAPrintf(pVM, MM_TAG_PDM_DEVICE_DESC, "%s[%u]", pszDesc, pDevIns->iInstance); 451 if (pszDesc2) 452 pszDesc = pszDesc2; 453 } 431 /* Clear the ring-0 flag if the device isn't configured for ring-0. */ 432 if (fFlags & TMTIMER_FLAGS_RING0) 433 { 434 Assert(pDevIns->Internal.s.pDevR3->pReg->fFlags & PDM_DEVREG_FLAGS_R0); 435 if (!(pDevIns->Internal.s.fIntFlags & PDMDEVINSINT_FLAGS_R0_ENABLED)) 436 fFlags &= ~TMTIMER_FLAGS_RING0; 437 } 438 else 439 Assert(fFlags & TMTIMER_FLAGS_NO_RING0 /* just to make sure all devices has been considered */); 454 440 455 441 PTMTIMER pTimer = NULL; … … 462 448 463 449 464 /** @interface_method_impl{PDMDEVHLPR3,pfnTimerToPtr}*/465 static DECLCALLBACK(PTMTIMERR3) pdmR3DevHlp_TimerToPtr(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer)450 /** Converts timer handle to pointer (used to exposed, will be replace soon.) */ 451 DECLINLINE(PTMTIMERR3) pdmR3DevHlp_TimerToPtr(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer) 466 452 { 467 453 PDMDEV_ASSERT_DEVINS(pDevIns); … … 4189 4175 SSMR3HandleVersion, 4190 4176 SSMR3HandleHostOSAndArch, 4191 pdmR3DevHlp_TMTimerCreate,4192 4177 pdmR3DevHlp_TimerCreate, 4193 pdmR3DevHlp_TimerToPtr,4194 4178 pdmR3DevHlp_TimerFromMicro, 4195 4179 pdmR3DevHlp_TimerFromMilli, … … 4538 4522 SSMR3HandleVersion, 4539 4523 SSMR3HandleHostOSAndArch, 4540 pdmR3DevHlp_TMTimerCreate,4541 4524 pdmR3DevHlp_TimerCreate, 4542 pdmR3DevHlp_TimerToPtr,4543 4525 pdmR3DevHlp_TimerFromMicro, 4544 4526 pdmR3DevHlp_TimerFromMilli, … … 4776 4758 PDM_DEVHLPR3_VERSION /* the end */ 4777 4759 }; 4778 #endif 4760 #endif /* VBOX_WITH_DBGF_TRACING */ 4779 4761 4780 4762 … … 5044 5026 SSMR3HandleVersion, 5045 5027 SSMR3HandleHostOSAndArch, 5046 pdmR3DevHlp_TMTimerCreate,5047 5028 pdmR3DevHlp_TimerCreate, 5048 pdmR3DevHlp_TimerToPtr,5049 5029 pdmR3DevHlp_TimerFromMicro, 5050 5030 pdmR3DevHlp_TimerFromMilli, -
trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp
r82968 r87760 1324 1324 LogFlow(("pdmR3DrvHlp_TMTimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} ppTimer=%p\n", 1325 1325 pDrvIns->pReg->szName, pDrvIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, ppTimer)); 1326 1327 /* Clear the ring-0 flag if the driver isn't configured for ring-0. */ 1328 if (fFlags & TMTIMER_FLAGS_RING0) 1329 { 1330 Assert(pDrvIns->Internal.s.pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_R0); 1331 /** @todo if (!(pDrvIns->Internal.s.fIntFlags & PDMDRVINSINT_FLAGS_R0_ENABLED)) */ 1332 fFlags &= ~TMTIMER_FLAGS_RING0; 1333 } 1326 1334 1327 1335 int rc = TMR3TimerCreateDriver(pDrvIns->Internal.s.pVMR3, pDrvIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer); -
trunk/src/VBox/VMM/VMMR3/PDMUsb.cpp
r83196 r87760 1829 1829 if (pszDesc2) 1830 1830 pszDesc = pszDesc2; 1831 1832 AssertStmt(!(fFlags & TMTIMER_FLAGS_RING0), fFlags &= ~TMTIMER_FLAGS_RING0); 1831 1833 1832 1834 int rc = TMR3TimerCreateUsb(pVM, pUsbIns, enmClock, pfnCallback, pvUser, fFlags, pszDesc, ppTimer); -
trunk/src/VBox/VMM/VMMR3/TM.cpp
r87748 r87760 1508 1508 * @param pVM The cross context VM structure. 1509 1509 * @param enmClock The timer clock. 1510 * @param fFlags TMTIMER_FLAGS_XXX. 1510 1511 * @param pszDesc The timer description. 1511 1512 * @param ppTimer Where to store the timer pointer on success. 1512 1513 */ 1513 static int tmr3TimerCreate(PVM pVM, TMCLOCK enmClock, const char *pszDesc, PPTMTIMERR3 ppTimer)1514 static int tmr3TimerCreate(PVM pVM, TMCLOCK enmClock, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1514 1515 { 1515 1516 VM_ASSERT_EMT(pVM); … … 1549 1550 pTimer->pCritSect = NULL; 1550 1551 pTimer->pszDesc = pszDesc; 1552 pTimer->fFlags = fFlags; 1551 1553 1552 1554 /* insert into the list of created timers. */ … … 1604 1606 uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1605 1607 { 1606 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT)), VERR_INVALID_PARAMETER); 1608 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0 | TMTIMER_FLAGS_NO_RING0)), 1609 VERR_INVALID_FLAGS); 1607 1610 1608 1611 /* 1609 1612 * Allocate and init stuff. 1610 1613 */ 1611 int rc = tmr3TimerCreate(pVM, enmClock, pszDesc, ppTimer);1614 int rc = tmr3TimerCreate(pVM, enmClock, fFlags, pszDesc, ppTimer); 1612 1615 if (RT_SUCCESS(rc)) 1613 1616 { … … 1645 1648 uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1646 1649 { 1647 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT )), VERR_INVALID_PARAMETER);1650 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0)), VERR_INVALID_PARAMETER); 1648 1651 1649 1652 /* 1650 1653 * Allocate and init stuff. 1651 1654 */ 1652 int rc = tmr3TimerCreate(pVM, enmClock, pszDesc, ppTimer);1655 int rc = tmr3TimerCreate(pVM, enmClock, fFlags, pszDesc, ppTimer); 1653 1656 if (RT_SUCCESS(rc)) 1654 1657 { … … 1688 1691 uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer) 1689 1692 { 1690 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT)), VERR_INVALID_PARAMETER); 1693 AssertReturn(!(fFlags & ~(TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_RING0 | TMTIMER_FLAGS_NO_RING0)), 1694 VERR_INVALID_FLAGS); 1691 1695 1692 1696 /* 1693 1697 * Allocate and init stuff. 1694 1698 */ 1695 int rc = tmr3TimerCreate(pVM, enmClock, pszDesc, ppTimer);1699 int rc = tmr3TimerCreate(pVM, enmClock, fFlags, pszDesc, ppTimer); 1696 1700 if (RT_SUCCESS(rc)) 1697 1701 { … … 1719 1723 * @param ppTimer Where to store the timer on success. 1720 1724 */ 1721 VMMR3DECL(int) TMR3TimerCreateInternal(PVM pVM, TMCLOCK enmClock, PFNTMTIMERINT pfnCallback, void *pvUser, const char *pszDesc, PPTMTIMERR3 ppTimer) 1725 VMMR3DECL(int) TMR3TimerCreateInternal(PVM pVM, TMCLOCK enmClock, 1726 PFNTMTIMERINT pfnCallback, void *pvUser, const char *pszDesc, PPTMTIMERR3 ppTimer) 1722 1727 { 1723 1728 /* … … 1725 1730 */ 1726 1731 PTMTIMER pTimer; 1727 int rc = tmr3TimerCreate(pVM, enmClock, pszDesc, &pTimer);1732 int rc = tmr3TimerCreate(pVM, enmClock, 0 /*fFlags*/, pszDesc, &pTimer); 1728 1733 if (RT_SUCCESS(rc)) 1729 1734 { … … 1750 1755 * until the timer is fully destroyed (i.e. a bit after TMTimerDestroy()). 1751 1756 */ 1752 VMMR3DECL(PTMTIMERR3) TMR3TimerCreateExternal(PVM pVM, TMCLOCK enmClock, PFNTMTIMEREXT pfnCallback, void *pvUser, const char *pszDesc) 1757 VMMR3DECL(PTMTIMERR3) TMR3TimerCreateExternal(PVM pVM, TMCLOCK enmClock, 1758 PFNTMTIMEREXT pfnCallback, void *pvUser, const char *pszDesc) 1753 1759 { 1754 1760 /* … … 1756 1762 */ 1757 1763 PTMTIMERR3 pTimer; 1758 int rc = tmr3TimerCreate(pVM, enmClock, pszDesc, &pTimer);1764 int rc = tmr3TimerCreate(pVM, enmClock, 0 /*fFlags*/, pszDesc, &pTimer); 1759 1765 if (RT_SUCCESS(rc)) 1760 1766 { -
trunk/src/VBox/VMM/include/TMInternal.h
r87750 r87760 206 206 uint32_t padding0; /**< pad structure to multiple of 8 bytes. */ 207 207 #endif 208 209 /** TMTIMER_FLAGS_XXX. */ 210 uint32_t fFlags; 211 uint32_t u32Pading; 212 208 213 #ifdef VBOX_WITH_STATISTICS 209 214 STAMPROFILE StatTimer;
Note:
See TracChangeset
for help on using the changeset viewer.

