Lines Matching refs:pVCpu

69  * @param   pVCpu       Pointer to the VMCPU.
72 int tmCpuTickResume(PVM pVM, PVMCPU pVCpu)
74 if (!pVCpu->tm.s.fTSCTicking)
76 pVCpu->tm.s.fTSCTicking = true;
81 pVCpu->tm.s.offTSCRawSrc = SUPReadTsc() - pVCpu->tm.s.u64TSC;
83 pVCpu->tm.s.offTSCRawSrc = tmCpuTickGetRawVirtual(pVM, false /* don't check for pending timers */)
84 - pVCpu->tm.s.u64TSC;
97 * @param pVCpu Pointer to the VCPU.
99 int tmCpuTickResumeLocked(PVM pVM, PVMCPU pVCpu)
101 if (!pVCpu->tm.s.fTSCTicking)
104 pVCpu->tm.s.fTSCTicking = true;
110 uint64_t offTSCRawSrcOld = pVCpu->tm.s.offTSCRawSrc;
116 pVCpu->tm.s.offTSCRawSrc = SUPReadTsc() - pVM->tm.s.u64LastPausedTSC;
118 pVCpu->tm.s.offTSCRawSrc = tmCpuTickGetRawVirtual(pVM, false /* don't check for pending timers */)
122 pVM->tm.s.offTSCPause = pVCpu->tm.s.offTSCRawSrc - offTSCRawSrcOld;
127 pVCpu->tm.s.offTSCRawSrc += pVM->tm.s.offTSCPause;
138 * @param pVCpu Pointer to the VMCPU.
141 int tmCpuTickPause(PVMCPU pVCpu)
143 if (pVCpu->tm.s.fTSCTicking)
145 pVCpu->tm.s.u64TSC = TMCpuTickGetNoCheck(pVCpu);
146 pVCpu->tm.s.fTSCTicking = false;
159 * @param pVCpu Pointer to the VMCPU.
162 int tmCpuTickPauseLocked(PVM pVM, PVMCPU pVCpu)
164 if (pVCpu->tm.s.fTSCTicking)
166 pVCpu->tm.s.u64TSC = TMCpuTickGetNoCheck(pVCpu);
167 pVCpu->tm.s.fTSCTicking = false;
175 pVM->tm.s.u64LastPausedTSC = pVCpu->tm.s.u64TSC;
190 * @param pVCpu The current CPU.
192 DECLINLINE(void) tmCpuTickRecordOffsettedTscRefusal(PVM pVM, PVMCPU pVCpu)
197 else if (!pVCpu->tm.s.fTSCTicking)
225 * @param pVCpu Pointer to the VMCPU.
230 * @thread EMT(pVCpu).
233 VMM_INT_DECL(bool) TMCpuTickCanUseRealTSC(PVM pVM, PVMCPU pVCpu, uint64_t *poffRealTsc, bool *pfParavirtTsc)
235 Assert(pVCpu->tm.s.fTSCTicking);
244 * SUPReadTsc() - pVCpu->tm.s.offTSCRawSrc;
248 * ASMReadTSC() - pGipCpu->i64TscDelta - pVCpu->tm.s.offTSCRawSrc;
250 * offRealTsc = -(pGipCpu->i64TscDelta + pVCpu->tm.s.offTSCRawSrc)
257 *poffRealTsc = 0 - pVCpu->tm.s.offTSCRawSrc - SUPGetTscDelta();
259 *poffRealTsc = 0 - pVCpu->tm.s.offTSCRawSrc - SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet);
280 - pVCpu->tm.s.offTSCRawSrc;
285 if (u64Now >= pVCpu->tm.s.u64TSCLastSeen)
293 tmCpuTickRecordOffsettedTscRefusal(pVM, pVCpu);
306 * @param pVCpu The current CPU.
310 DECLINLINE(uint64_t) tmCpuCalcTicksToDeadline(PVMCPU pVCpu, uint64_t cNsToDeadline)
316 uint64_t uCpuHz = SUPGetCpuHzFromGipBySetIndex(g_pSUPGlobalInfoPage, pVCpu->iHostCpuSet);
335 * @param pVCpu The current CPU.
341 * @thread EMT(pVCpu).
344 VMM_INT_DECL(uint64_t) TMCpuTickGetDeadlineAndTscOffset(PVM pVM, PVMCPU pVCpu, uint64_t *poffRealTsc,
347 Assert(pVCpu->tm.s.fTSCTicking);
359 *poffRealTsc = 0 - pVCpu->tm.s.offTSCRawSrc - SUPGetTscDelta();
361 *poffRealTsc = 0 - pVCpu->tm.s.offTSCRawSrc - SUPGetTscDeltaByCpuSetIndex(pVCpu->iHostCpuSet);
364 return tmCpuCalcTicksToDeadline(pVCpu, TMVirtualSyncGetNsToDeadline(pVM));
381 u64Now -= pVCpu->tm.s.offTSCRawSrc;
383 *pfOffsettedTsc = u64Now >= pVCpu->tm.s.u64TSCLastSeen;
384 return tmCpuCalcTicksToDeadline(pVCpu, cNsToDeadline);
388 tmCpuTickRecordOffsettedTscRefusal(pVM, pVCpu);
392 return tmCpuCalcTicksToDeadline(pVCpu, TMVirtualSyncGetNsToDeadline(pVM));
400 * @param pVCpu Pointer to the VMCPU.
402 DECLINLINE(uint64_t) tmCpuTickGetInternal(PVMCPU pVCpu, bool fCheckTimers)
406 if (RT_LIKELY(pVCpu->tm.s.fTSCTicking))
408 PVM pVM = pVCpu->CTX_SUFF(pVM);
413 u64 -= pVCpu->tm.s.offTSCRawSrc;
416 if (RT_LIKELY(u64 > pVCpu->tm.s.u64TSCLastSeen))
417 pVCpu->tm.s.u64TSCLastSeen = u64;
421 pVCpu->tm.s.u64TSCLastSeen += 64; /** @todo choose a good increment here */
422 u64 = pVCpu->tm.s.u64TSCLastSeen;
426 u64 = pVCpu->tm.s.u64TSC;
435 * @param pVCpu Pointer to the VMCPU.
437 VMMDECL(uint64_t) TMCpuTickGet(PVMCPU pVCpu)
439 return tmCpuTickGetInternal(pVCpu, true /* fCheckTimers */);
447 * @param pVCpu Pointer to the VMCPU.
449 VMM_INT_DECL(uint64_t) TMCpuTickGetNoCheck(PVMCPU pVCpu)
451 return tmCpuTickGetInternal(pVCpu, false /* fCheckTimers */);
460 * @param pVCpu Pointer to the VMCPU.
465 VMM_INT_DECL(int) TMCpuTickSet(PVM pVM, PVMCPU pVCpu, uint64_t u64Tick)
467 VMCPU_ASSERT_EMT(pVCpu);
475 bool fTSCTicking = pVCpu->tm.s.fTSCTicking;
476 pVCpu->tm.s.fTSCTicking = false;
477 pVCpu->tm.s.u64TSC = u64Tick;
478 pVCpu->tm.s.u64TSCLastSeen = u64Tick;
480 tmCpuTickResume(pVM, pVCpu);
490 * @param pVCpu Pointer to the VMCPU.
495 VMM_INT_DECL(int) TMCpuTickSetLastSeen(PVMCPU pVCpu, uint64_t u64LastSeenTick)
497 VMCPU_ASSERT_EMT(pVCpu);
500 if (pVCpu->tm.s.u64TSCLastSeen < u64LastSeenTick)
501 pVCpu->tm.s.u64TSCLastSeen = u64LastSeenTick;
509 * @param pVCpu Pointer to the VMCPU.
511 * @thread EMT(pVCpu).
513 VMM_INT_DECL(uint64_t) TMCpuTickGetLastSeen(PVMCPU pVCpu)
515 VMCPU_ASSERT_EMT(pVCpu);
517 return pVCpu->tm.s.u64TSCLastSeen;
550 * @param pVCpu Pointer to the VMCPU.
552 VMM_INT_DECL(bool) TMCpuTickIsTicking(PVMCPU pVCpu)
554 return pVCpu->tm.s.fTSCTicking;