Lines Matching refs:pArgs

2694                                        bool fIsMaster, PRTCCUINTREG pfEFlags, PSUPDRVGIPTSCDELTARGS pArgs)
2757 ASMAtomicWriteBool(&pArgs->fTimedOut, true);
2992 * @param pArgs The argument/state data.
2998 static void supdrvTscDeltaMethod1Loop(PSUPDRVGIPTSCDELTARGS pArgs, PSUPTSCDELTASYNC2 pMySync, PSUPTSCDELTASYNC2 pOtherSync,
3001 PSUPGIPCPU pGipCpuWorker = pArgs->pWorker;
3002 PSUPGIPCPU pGipCpuMaster = pArgs->pMaster;
3017 pGipCpuMaster->u64TSCSample, pGipCpuMaster->idCpu, pGipCpuWorker->idCpu, pArgs->pDevExt->idGipMaster));
3018 TSCDELTA_MASTER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3056 TSCDELTA_OTHER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3117 static void supdrvTscDeltaMethod2ProcessDataOnMaster(PSUPDRVGIPTSCDELTARGS pArgs, uint32_t iLoop)
3119 int64_t iMasterTscDelta = pArgs->pMaster->i64TSCDelta;
3120 int64_t iBestDelta = pArgs->pWorker->i64TSCDelta;
3127 for (idxResult = 0; idxResult < RT_ELEMENTS(pArgs->uMaster.M2.Data.aResults); idxResult++)
3129 uint32_t idxOther = pArgs->uMaster.M2.Data.aResults[idxResult].iSeqOther;
3133 if (idxOther < RT_ELEMENTS(pArgs->uWorker.M2.Data.aResults))
3135 if (pArgs->uWorker.M2.Data.aResults[idxOther].iSeqOther == pArgs->uMaster.M2.Data.aResults[idxResult].iSeqMine)
3138 iDelta = pArgs->uWorker.M2.Data.aResults[idxOther].uTsc
3139 - (pArgs->uMaster.M2.Data.aResults[idxResult].uTsc - iMasterTscDelta);
3154 pArgs->pWorker->i64TSCDelta = iBestDelta;
3155 pArgs->uMaster.M2.cHits += cHits;
3206 * @param pArgs The argument/state data.
3212 static void supdrvTscDeltaMethod2Loop(PSUPDRVGIPTSCDELTARGS pArgs, PSUPTSCDELTASYNC2 pMySync, PSUPTSCDELTASYNC2 pOtherSync,
3229 pArgs->uMaster.M2.fLag = true;
3230 pArgs->uWorker.M2.fLag = true;
3237 pArgs->uMaster.M2.fLag = false;
3238 pArgs->uWorker.M2.fLag = false;
3243 pArgs->uMaster.M2.fLag = true;
3244 pArgs->uWorker.M2.fLag = true;
3249 pArgs->uMaster.M2.fLag = (iLoop & 1) == 0;
3250 pArgs->uWorker.M2.fLag= (iLoop & 1) == 1;
3256 TSCDELTA_MASTER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3257 supdrvTscDeltaMethod2CollectData(&pArgs->uMaster.M2.Data, &pArgs->uWorker.M2.Data.iCurSeqNo, pArgs->uMaster.M2.fLag);
3266 supdrvTscDeltaMethod2ProcessDataOnMaster(pArgs, iLoop);
3275 TSCDELTA_OTHER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3276 supdrvTscDeltaMethod2CollectData(&pArgs->uWorker.M2.Data, &pArgs->uMaster.M2.Data.iCurSeqNo, pArgs->uWorker.M2.fLag);
3286 static int supdrvTscDeltaVerify(PSUPDRVGIPTSCDELTARGS pArgs, PSUPTSCDELTASYNC2 pMySync,
3289 /*PSUPGIPCPU pGipCpuWorker = pArgs->pWorker; - unused */
3290 PSUPGIPCPU pGipCpuMaster = pArgs->pMaster;
3297 AssertCompile((RT_ELEMENTS(pArgs->uMaster.Verify.auTscs) & 1) == 0);
3298 AssertCompile(RT_ELEMENTS(pArgs->uMaster.Verify.auTscs) == RT_ELEMENTS(pArgs->uWorker.Verify.auTscs));
3303 TSCDELTA_MASTER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3308 for (i = 0; i < RT_ELEMENTS(pArgs->uMaster.Verify.auTscs); i += 2)
3314 pArgs->uMaster.Verify.auTscs[i] = uTsc;
3326 pArgs->uMaster.Verify.auTscs[i + 1] = uTsc;
3341 pArgs->cMaxVerifyTscTicks = INT64_MIN;
3342 pArgs->cMinVerifyTscTicks = INT64_MAX;
3343 pArgs->iVerifyBadTscDiff = 0;
3345 ASMAtomicWriteS32(&pArgs->rcVerify, VINF_SUCCESS);
3347 for (i = 0; i < RT_ELEMENTS(pArgs->uMaster.Verify.auTscs); i++)
3350 uint64_t uTscMaster = pArgs->uMaster.Verify.auTscs[i] - pGipCpuMaster->i64TSCDelta;
3356 if (iDiff > pArgs->cMaxVerifyTscTicks)
3357 pArgs->cMaxVerifyTscTicks = iDiff;
3358 if (iDiff < pArgs->cMinVerifyTscTicks)
3359 pArgs->cMinVerifyTscTicks = iDiff;
3364 pArgs->iVerifyBadTscDiff = -iDiff;
3366 ASMAtomicWriteS32(&pArgs->rcVerify, VERR_OUT_OF_RANGE);
3372 uTscWorker = pArgs->uWorker.Verify.auTscs[i] - iWorkerTscDelta;
3375 if (iDiff > pArgs->cMaxVerifyTscTicks)
3376 pArgs->cMaxVerifyTscTicks = iDiff;
3377 if (iDiff < pArgs->cMinVerifyTscTicks)
3378 pArgs->cMinVerifyTscTicks = iDiff;
3383 pArgs->iVerifyBadTscDiff = iDiff;
3385 ASMAtomicWriteS32(&pArgs->rcVerify, VERR_OUT_OF_RANGE);
3398 TSCDELTA_OTHER_SYNC_BEFORE(pMySync, pOtherSync, &fEFlags, pArgs);
3400 for (i = 0; i < RT_ELEMENTS(pArgs->uWorker.Verify.auTscs); i += 2)
3414 pArgs->uWorker.Verify.auTscs[i] = uTsc;
3426 pArgs->uWorker.Verify.auTscs[i + 1] = uTsc;
3431 return pArgs->rcVerify;
3437 ASMAtomicWriteS32(&pArgs->rcVerify, VERR_TRY_AGAIN);
3448 * @param pArgs Pointer to argument/state data.
3454 supdrvMeasureTscDeltaCallbackAbortSyncSetup(PSUPDRVGIPTSCDELTARGS pArgs, PSUPTSCDELTASYNC2 pMySync, bool fIsMaster, bool fTimeout)
3456 PSUPTSCDELTASYNC2 volatile *ppMySync = fIsMaster ? &pArgs->pSyncMaster : &pArgs->pSyncWorker;
3457 PSUPTSCDELTASYNC2 volatile *ppOtherSync = fIsMaster ? &pArgs->pSyncWorker : &pArgs->pSyncMaster;
3464 ASMAtomicWriteBool(&pArgs->fAbortSetup, true);
3466 ASMAtomicWriteBool(&pArgs->fTimedOut, true);
3495 * @param pArgs Pointer to a parameter package.
3503 static int supdrvMeasureTscDeltaCallbackUnwrapped(RTCPUID idCpu, PSUPDRVGIPTSCDELTARGS pArgs)
3505 PSUPDRVDEVEXT pDevExt = pArgs->pDevExt;
3506 PSUPGIPCPU pGipCpuWorker = pArgs->pWorker;
3507 PSUPGIPCPU pGipCpuMaster = pArgs->pMaster;
3510 PSUPTSCDELTASYNC2 volatile *ppMySync = fIsMaster ? &pArgs->pSyncMaster : &pArgs->pSyncWorker;
3511 PSUPTSCDELTASYNC2 volatile *ppOtherSync = fIsMaster ? &pArgs->pSyncWorker : &pArgs->pSyncMaster;
3539 MySync.cMaxTscTicks = pArgs->cMaxTscTicks;
3547 if ( ASMAtomicReadBool(&pArgs->fAbortSetup)
3549 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, false /*fTimeout*/);
3551 && ASMReadTSC() - MySync.uTscStart > pArgs->cMaxTscTicks)
3552 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, true /*fTimeout*/);
3560 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, false /*fTimeout*/);
3567 if (ASMAtomicReadBool(&pArgs->fAbortSetup))
3568 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, false /*fTimeout*/);
3570 && ASMReadTSC() - MySync.uTscStart > pArgs->cMaxTscTicks)
3575 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, true /*fTimeout*/);
3582 return supdrvMeasureTscDeltaCallbackAbortSyncSetup(pArgs, &MySync, fIsMaster, false /*fTimeout*/);
3584 /** @todo Add a resumable state to pArgs so we don't waste time if we time
3592 rc = supdrvTscDeltaVerify(pArgs, &MySync, pOtherSync, fIsMaster, GIP_TSC_DELTA_INITIAL_MASTER_VALUE);
3626 supdrvTscDeltaMethod1Loop(pArgs, &MySync, pOtherSync, fIsMaster, iTry);
3628 supdrvTscDeltaMethod2Loop(pArgs, &MySync, pOtherSync, fIsMaster, iTry);
3662 pArgs->iTry = iTry;
3687 pArgs->cElapsedMasterTscTicks = ASMReadTSC() - MySync.uTscStart;
3689 pArgs->cElapsedWorkerTscTicks = ASMReadTSC() - MySync.uTscStart;
3803 PSUPDRVGIPTSCDELTARGS pArgs = (PSUPDRVGIPTSCDELTARGS)RTMemAllocZ(sizeof(*pArgs));
3804 if (pArgs)
3806 pArgs->pWorker = pGipCpuWorker;
3807 pArgs->pMaster = pGipCpuMaster;
3808 pArgs->pDevExt = pDevExt;
3809 pArgs->pSyncMaster = NULL;
3810 pArgs->pSyncWorker = NULL;
3811 pArgs->cMaxTscTicks = ASMAtomicReadU64(&pGip->u64CpuHz) / 512; /* 1953 us */
3817 /** @todo Store the i64TSCDelta result in pArgs first? Perhaps deals with
3821 supdrvMeasureTscDeltaCallback, pArgs, NULL);
3825 SUPR0Printf("mponpair ticks: %9llu %9llu max: %9llu iTry: %u%s\n", pArgs->cElapsedMasterTscTicks,
3826 pArgs->cElapsedWorkerTscTicks, pArgs->cMaxTscTicks, pArgs->iTry,
3827 pArgs->fTimedOut ? " timed out" :"");
3831 pArgs->rcVerify, pArgs->iVerifyBadTscDiff, pArgs->cMinVerifyTscTicks, pArgs->cMaxVerifyTscTicks);
3859 RTMemFree(pArgs);