Changeset 92709 in vbox for trunk/src/VBox/VMM/VMMAll/TMAllCpu.cpp
- Timestamp:
- Dec 2, 2021 1:56:44 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 148608
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/TMAllCpu.cpp
r90380 r92709 310 310 * exact opposite of what the hardware implements. */ 311 311 # 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); 313 313 # else 314 314 *poffRealTsc = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet); … … 342 342 { 343 343 # ifdef IN_RING3 344 *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDelta( );344 *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage); 345 345 # else 346 346 *poffRealTsc = u64Now - (uTscNow + (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet)); … … 373 373 # ifdef IN_RING3 374 374 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; 376 377 # else 377 378 uint64_t uCpuHz = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, pVCpu->iHostCpuSet); … … 427 428 * exact opposite of what the hardware implements. */ 428 429 # 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); 430 431 # else 431 432 *poffRealTsc = (uint64_t)0 - pVCpu->tm.s.offTSCRawSrc - (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet); … … 450 451 451 452 # ifdef IN_RING3 452 *poffRealTsc = u64Now - (*puTscNow + (uint64_t)SUPGetTscDelta( )); /* undoing delta */453 *poffRealTsc = u64Now - (*puTscNow + (uint64_t)SUPGetTscDelta(g_pSUPGlobalInfoPage)); /* undoing delta */ 453 454 # else 454 455 *poffRealTsc = u64Now - (*puTscNow + (uint64_t)SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet)); /* undoing delta */ … … 618 619 VMMDECL(uint64_t) TMCpuTicksPerSecond(PVMCC pVM) 619 620 { 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 { 623 626 #ifdef IN_RING3 624 uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGip(g_pSUPGlobalInfoPage);627 uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGip(pGip); 625 628 #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())); 627 630 #else 628 uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, VMMGetCpu(pVM)->iHostCpuSet);631 uint64_t cTSCTicksPerSecond = SUPGetCpuHzFromGipBySetIndex(pGip, VMMGetCpu(pVM)->iHostCpuSet); 629 632 #endif 630 if (RT_LIKELY(cTSCTicksPerSecond != ~(uint64_t)0)) 631 return cTSCTicksPerSecond; 633 if (RT_LIKELY(cTSCTicksPerSecond != ~(uint64_t)0)) 634 return cTSCTicksPerSecond; 635 } 632 636 } 633 637 return pVM->tm.s.cTSCTicksPerSecond;
Note:
See TracChangeset
for help on using the changeset viewer.