VirtualBox

Ignore:
Timestamp:
Dec 2, 2021 1:56:44 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
148608
Message:

VMM/TM,SUP: Made it thru TM init in driverless mode... bugref:10138

File:
1 edited

Legend:

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

    r90380 r92709  
    310310         *        exact opposite of what the hardware implements. */
    311311# ifdef IN_RING3
    312         *poffRealTsc = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDelta();
     312        *poffRealTsc = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage);
    313313# else
    314314        *poffRealTsc = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet);
     
    342342        {
    343343# ifdef IN_RING3
    344             *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDelta();
     344            *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage);
    345345# else
    346346            *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet));
     
    373373# ifdef IN_RING3
    374374    RT_NOREF_PV(pVCpu);
    375     uint64_t uCpuHz = SUPGetCpuHzFromGip(g_pSUPGlobalInfoPage);
     375    PSUPGIP const pGip = g_pSUPGlobalInfoPage;
     376    uint64_t uCpuHz = pGip ? SUPGetCpuHzFromGip(pGip) : pVCpu->pVMR3->tm.s.cTSCTicksPerSecondHost;
    376377# else
    377378    uint64_t uCpuHz = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, pVCpu->iHostCpuSet);
     
    427428         *        exact opposite of what the hardware implements. */
    428429# ifdef IN_RING3
    429         *poffRealTsc     = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDelta();
     430        *poffRealTsc     = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage);
    430431# else
    431432        *poffRealTsc     = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet);
     
    450451
    451452# ifdef IN_RING3
    452         *poffRealTsc     = u64Now - (*puTscNow + (uint64_t)SUPGetTscDelta()); /* undoing delta */
     453        *poffRealTsc     = u64Now - (*puTscNow + (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage)); /* undoing delta */
    453454# else
    454455        *poffRealTsc     = u64Now - (*puTscNow + (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet)); /* undoing delta */
     
    618619VMMDECL(uint64_t) TMCpuTicksPerSecond(PVMCC pVM)
    619620{
    620     if (   pVM->tm.s.enmTSCMode == TMTSCMODE_REAL_TSC_OFFSET
    621         && g_pSUPGlobalInfoPage->u32Mode != SUPGIPMODE_INVARIANT_TSC)
    622     {
     621    if (pVM->tm.s.enmTSCMode == TMTSCMODE_REAL_TSC_OFFSET)
     622    {
     623        PSUPGLOBALINFOPAGE const pGip = g_pSUPGlobalInfoPage;
     624        if (pGip && pGip->u32Mode != SUPGIPMODE_INVARIANT_TSC)
     625        {
    623626#ifdef IN_RING3
    624         uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGip(g_pSUPGlobalInfoPage);
     627            uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGip(pGip);
    625628#elif defined(IN_RING0)
    626         uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, (uint32_t)RTMpCpuIdToSetIndex(RTMpCpuId()));
     629            uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(pGip, (uint32_t)RTMpCpuIdToSetIndex(RTMpCpuId()));
    627630#else
    628         uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, VMMGetCpu(pVM)->iHostCpuSet);
     631            uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(pGip, VMMGetCpu(pVM)->iHostCpuSet);
    629632#endif
    630         if (RT_LIKELY(cTSCTicksPerSecond != ~(uint64_t)0))
    631             return cTSCTicksPerSecond;
     633            if (RT_LIKELY(cTSCTicksPerSecond != ~(uint64_t)0))
     634                return cTSCTicksPerSecond;
     635        }
    632636    }
    633637    return pVM->tm.s.cTSCTicksPerSecond;
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