VirtualBox

Changeset 87771 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Feb 16, 2021 6:05:41 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142825
Message:

VMM/TM: Removed pVMR3, pVMR0 and pVMRC from TMTIMER. bugref:9943

File:
1 edited

Legend:

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

    r87770 r87771  
    5757 * @todo needs reworking later as it uses PDMDEVINSR0::pDevInsR0RemoveMe.  */
    5858# ifdef IN_RING3
    59 #  define TMTIMER_GET_CRITSECT(pTimer) ((pTimer)->pCritSect)
     59#  define TMTIMER_GET_CRITSECT(a_pVM, a_pTimer) ((a_pTimer)->pCritSect)
    6060# else
    61 #  define TMTIMER_GET_CRITSECT(pTimer) tmRZTimerGetCritSect(pTimer)
     61#  define TMTIMER_GET_CRITSECT(a_pVM, a_pTimer) tmRZTimerGetCritSect(a_pVM, a_pTimer)
    6262# endif
    6363#endif
     
    6767 * the timer. */
    6868#ifdef VBOX_STRICT
    69 # define TMTIMER_ASSERT_CRITSECT(pTimer) \
     69# define TMTIMER_ASSERT_CRITSECT(a_pVM, a_pTimer) \
    7070    do { \
    71         if ((pTimer)->pCritSect) \
     71        if ((a_pTimer)->pCritSect) \
    7272        { \
    7373            VMSTATE      enmState; \
    74             PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(pTimer); \
     74            PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(a_pVM, a_pTimer); \
    7575            AssertMsg(   pCritSect \
    7676                      && (   PDMCritSectIsOwner(pCritSect) \
    77                           || (enmState = (pTimer)->CTX_SUFF(pVM)->enmVMState) == VMSTATE_CREATING \
     77                          || (enmState = (a_pVM)->enmVMState) == VMSTATE_CREATING \
    7878                          || enmState == VMSTATE_RESETTING \
    7979                          || enmState == VMSTATE_RESETTING_LS ),\
    80                       ("pTimer=%p (%s) pCritSect=%p (%s)\n", pTimer, R3STRING(pTimer->pszDesc), \
    81                        (pTimer)->pCritSect, R3STRING(PDMR3CritSectName((pTimer)->pCritSect)) )); \
     80                      ("pTimer=%p (%s) pCritSect=%p (%s)\n", a_pTimer, R3STRING(a_pTimer->pszDesc), \
     81                       (a_pTimer)->pCritSect, R3STRING(PDMR3CritSectName((a_pTimer)->pCritSect)) )); \
    8282        } \
    8383    } while (0)
    8484#else
    85 # define TMTIMER_ASSERT_CRITSECT(pTimer) do { } while (0)
     85# define TMTIMER_ASSERT_CRITSECT(pVM, pTimer) do { } while (0)
    8686#endif
    8787
     
    105105        { \
    106106            VMSTATE      enmState; \
    107             PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(pTimer); \
     107            PPDMCRITSECT pCritSect = TMTIMER_GET_CRITSECT(pVM, pTimer); \
    108108            AssertMsg(   pCritSect \
    109109                      && (   !PDMCritSectIsOwner(pCritSect) \
     
    126126 * @todo This needs a redo!
    127127 */
    128 DECLINLINE(PPDMCRITSECT) tmRZTimerGetCritSect(PTMTIMER pTimer)
     128DECLINLINE(PPDMCRITSECT) tmRZTimerGetCritSect(PVMCC pVM, PTMTIMER pTimer)
    129129{
    130130    if (pTimer->enmType == TMTIMERTYPE_DEV)
     
    140140            return (PPDMCRITSECT)((uintptr_t)pDevInsR0->pvInstanceDataR0 + offCritSect);
    141141    }
    142     return (PPDMCRITSECT)MMHyperR3ToCC((pTimer)->CTX_SUFF(pVM), pTimer->pCritSect);
     142    return (PPDMCRITSECT)MMHyperR3ToCC(pVM, pTimer->pCritSect);
    143143}
    144144#endif /* VBOX_STRICT && IN_RING0 */
     
    358358 * Schedule the queue which was changed.
    359359 */
    360 DECLINLINE(void) tmSchedule(PTMTIMER pTimer)
    361 {
    362     PVMCC pVM = pTimer->CTX_SUFF(pVM);
     360DECLINLINE(void) tmSchedule(PVMCC pVM, PTMTIMER pTimer)
     361{
    363362    if (    VM_IS_EMT(pVM)
    364363        &&  RT_SUCCESS(TM_TRY_LOCK_TIMERS(pVM)))
     
    432431 *
    433432 * @returns Success indicator.
     433 * @param   pVM             The cross context VM structure.
    434434 * @param   pTimer          Timer in question.
    435435 * @param   enmStateNew     The new timer state.
    436436 * @param   enmStateOld     The old timer state.
    437437 */
    438 DECLINLINE(bool) tmTimerTryWithLink(PTMTIMER pTimer, TMTIMERSTATE enmStateNew, TMTIMERSTATE enmStateOld)
     438DECLINLINE(bool) tmTimerTryWithLink(PVMCC pVM, PTMTIMER pTimer, TMTIMERSTATE enmStateNew, TMTIMERSTATE enmStateOld)
    439439{
    440440    if (tmTimerTry(pTimer, enmStateNew, enmStateOld))
    441441    {
    442         tmTimerLinkSchedule(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF(paTimerQueues)[pTimer->enmClock], pTimer);
     442        tmTimerLinkSchedule(&pVM->tm.s.CTX_SUFF(paTimerQueues)[pTimer->enmClock], pTimer);
    443443        return true;
    444444    }
     
    505505 * Schedules the given timer on the given queue.
    506506 *
     507 * @param   pVM         The cross context VM structure.
    507508 * @param   pQueue      The timer queue.
    508509 * @param   pTimer      The timer that needs scheduling.
     
    510511 * @remarks Called while owning the lock.
    511512 */
    512 DECLINLINE(void) tmTimerQueueScheduleOne(PTMTIMERQUEUE pQueue, PTMTIMER pTimer)
     513DECLINLINE(void) tmTimerQueueScheduleOne(PVMCC pVM, PTMTIMERQUEUE pQueue, PTMTIMER pTimer)
    513514{
    514515    Assert(pQueue->enmClock != TMCLOCK_VIRTUAL_SYNC);
     516    RT_NOREF(pVM);
    515517
    516518    /*
     
    573575            case TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE:
    574576                tmTimerLinkSchedule(pQueue, pTimer);
    575                 STAM_COUNTER_INC(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatPostponed));
     577                STAM_COUNTER_INC(&pVM->tm.s.CTX_SUFF_Z(StatPostponed));
    576578                return;
    577579
     
    601603 * @remarks Called while owning the lock.
    602604 */
    603 void tmTimerQueueSchedule(PVM pVM, PTMTIMERQUEUE pQueue)
     605void tmTimerQueueSchedule(PVMCC pVM, PTMTIMERQUEUE pQueue)
    604606{
    605607    TM_ASSERT_TIMER_LOCK_OWNERSHIP(pVM);
     
    628630        Log2(("tmTimerQueueSchedule: %p:{.enmState=%s, .enmClock=%d, .enmType=%d, .pszDesc=%s}\n",
    629631              pTimer, tmTimerState(pTimer->enmState), pTimer->enmClock, pTimer->enmType, R3STRING(pTimer->pszDesc)));
    630         tmTimerQueueScheduleOne(pQueue, pTimer);
     632        tmTimerQueueScheduleOne(pVM, pQueue, pTimer);
    631633        Log2(("tmTimerQueueSchedule: %p: new %s\n", pTimer, tmTimerState(pTimer->enmState)));
    632634    } /* foreach timer in current schedule batch. */
     
    12871289
    12881290    STAM_PROFILE_START(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a);
    1289     TMTIMER_ASSERT_CRITSECT(pTimer);
     1291    TMTIMER_ASSERT_CRITSECT(pVM, pTimer);
    12901292
    12911293    DBGFTRACE_U64_TAG2(pVM, u64Expire, "TMTimerSet", R3STRING(pTimer->pszDesc));
     
    13501352            case TMTIMERSTATE_EXPIRED_DELIVER:
    13511353            case TMTIMERSTATE_STOPPED:
    1352                 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
     1354                if (tmTimerTryWithLink(pVM, pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
    13531355                {
    13541356                    Assert(!pTimer->offPrev);
     
    13561358                    pTimer->u64Expire = u64Expire;
    13571359                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
    1358                     tmSchedule(pTimer);
     1360                    tmSchedule(pVM, pTimer);
    13591361                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a);
    13601362                    return VINF_SUCCESS;
     
    13681370                    pTimer->u64Expire = u64Expire;
    13691371                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
    1370                     tmSchedule(pTimer);
     1372                    tmSchedule(pVM, pTimer);
    13711373                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a);
    13721374                    return VINF_SUCCESS;
     
    13761378
    13771379            case TMTIMERSTATE_ACTIVE:
    1378                 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
     1380                if (tmTimerTryWithLink(pVM, pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
    13791381                {
    13801382                    pTimer->u64Expire = u64Expire;
    13811383                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
    1382                     tmSchedule(pTimer);
     1384                    tmSchedule(pVM, pTimer);
    13831385                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a);
    13841386                    return VINF_SUCCESS;
     
    13921394                    pTimer->u64Expire = u64Expire;
    13931395                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
    1394                     tmSchedule(pTimer);
     1396                    tmSchedule(pVM, pTimer);
    13951397                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSet), a);
    13961398                    return VINF_SUCCESS;
     
    15941596
    15951597    STAM_PROFILE_START(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
    1596     TMTIMER_ASSERT_CRITSECT(pTimer);
     1598    TMTIMER_ASSERT_CRITSECT(pVM, pTimer);
    15971599
    15981600    DBGFTRACE_U64_TAG2(pVM, cTicksToNext, "TMTimerSetRelative", R3STRING(pTimer->pszDesc));
     
    16411643        {
    16421644            tmTimerSetRelativeOptimizedStart(pVM, pTimer, cTicksToNext, pu64Now);
    1643             STAM_PROFILE_STOP(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
     1645            STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
    16441646            return VINF_SUCCESS;
    16451647        }
     
    16731675                RT_FALL_THRU();
    16741676            case TMTIMERSTATE_EXPIRED_DELIVER:
    1675                 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
     1677                if (tmTimerTryWithLink(pVM, pTimer, TMTIMERSTATE_PENDING_SCHEDULE_SET_EXPIRE, enmState))
    16761678                {
    16771679                    Assert(!pTimer->offPrev);
     
    16811683                          pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
    16821684                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
    1683                     tmSchedule(pTimer);
     1685                    tmSchedule(pVM, pTimer);
    16841686                    rc = VINF_SUCCESS;
    16851687                    break;
     
    16961698                          pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
    16971699                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_SCHEDULE);
    1698                     tmSchedule(pTimer);
     1700                    tmSchedule(pVM, pTimer);
    16991701                    rc = VINF_SUCCESS;
    17001702                    break;
     
    17051707
    17061708            case TMTIMERSTATE_ACTIVE:
    1707                 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
     1709                if (tmTimerTryWithLink(pVM, pTimer, TMTIMERSTATE_PENDING_RESCHEDULE_SET_EXPIRE, enmState))
    17081710                {
    17091711                    pTimer->u64Expire = cTicksToNext + tmTimerSetRelativeNowWorker(pVM, enmClock, pu64Now);
     
    17111713                          pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
    17121714                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
    1713                     tmSchedule(pTimer);
     1715                    tmSchedule(pVM, pTimer);
    17141716                    rc = VINF_SUCCESS;
    17151717                    break;
     
    17261728                          pTimer, tmTimerState(enmState), R3STRING(pTimer->pszDesc), pTimer->u64Expire, cRetries));
    17271729                    TM_SET_STATE(pTimer, TMTIMERSTATE_PENDING_RESCHEDULE);
    1728                     tmSchedule(pTimer);
     1730                    tmSchedule(pVM, pTimer);
    17291731                    rc = VINF_SUCCESS;
    17301732                    break;
     
    17921794        TM_UNLOCK_TIMERS(pVM);
    17931795
    1794     STAM_PROFILE_STOP(&pTimer->CTX_SUFF(pVM)->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
     1796    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerSetRelative), a);
    17951797    return rc;
    17961798}
     
    18341836    PTMTIMER pTimer;
    18351837    TMTIMER_HANDLE_TO_PTR_RETURN(pVM, hTimer, pTimer);
    1836     TMTIMER_ASSERT_CRITSECT(pTimer);
     1838    TMTIMER_ASSERT_CRITSECT(pVM, pTimer);
    18371839
    18381840    uint32_t const uHzOldHint = pTimer->uHzHint;
     
    19381940
    19391941    STAM_PROFILE_START(&pVM->tm.s.CTX_SUFF_Z(StatTimerStop), a);
    1940     TMTIMER_ASSERT_CRITSECT(pTimer);
     1942    TMTIMER_ASSERT_CRITSECT(pVM, pTimer);
    19411943
    19421944    /*
     
    19751977                if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_STOP_SCHEDULE, enmState))
    19761978                {
    1977                     tmSchedule(pTimer);
     1979                    tmSchedule(pVM, pTimer);
    19781980                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerStop), a);
    19791981                    return VINF_SUCCESS;
     
    19841986                if (tmTimerTry(pTimer, TMTIMERSTATE_PENDING_STOP, enmState))
    19851987                {
    1986                     tmSchedule(pTimer);
     1988                    tmSchedule(pVM, pTimer);
    19871989                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerStop), a);
    19881990                    return VINF_SUCCESS;
     
    19911993
    19921994            case TMTIMERSTATE_ACTIVE:
    1993                 if (tmTimerTryWithLink(pTimer, TMTIMERSTATE_PENDING_STOP, enmState))
     1995                if (tmTimerTryWithLink(pVM, pTimer, TMTIMERSTATE_PENDING_STOP, enmState))
    19941996                {
    1995                     tmSchedule(pTimer);
     1997                    tmSchedule(pVM, pTimer);
    19961998                    STAM_PROFILE_STOP(&pVM->tm.s.CTX_SUFF_Z(StatTimerStop), a);
    19971999                    return VINF_SUCCESS;
     
    21042106    PTMTIMER pTimer;
    21052107    TMTIMER_HANDLE_TO_PTR_RETURN_EX(pVM, hTimer, UINT64_MAX, pTimer);
    2106     TMTIMER_ASSERT_CRITSECT(pTimer);
     2108    TMTIMER_ASSERT_CRITSECT(pVM, pTimer);
    21072109    int cRetries = 1000;
    21082110    do
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