VirtualBox

Changeset 53800 in vbox for trunk/src/VBox/HostDrivers


Ignore:
Timestamp:
Jan 14, 2015 12:51:28 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
97608
Message:

HostDrivers/Support: Moved fOsTscDeltasInSync to the GIP, fix SUPReadTsc() and a few other places to check the right macro for TSC-delta availability.

Location:
trunk/src/VBox/HostDrivers/Support
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r53568 r53800  
    137137# define DO_NOT_START_GIP
    138138#endif
    139 
    140 /** Whether the application of TSC-deltas is required. */
    141 #define GIP_ARE_TSC_DELTAS_APPLICABLE(a_pDevExt) \
    142     ((a_pDevExt)->pGip->u32Mode == SUPGIPMODE_INVARIANT_TSC && !((a_pDevExt)->fOsTscDeltasInSync))
    143 
    144139
    145140/*******************************************************************************
     
    58965891static int supdrvTscDeltaThreadInit(PSUPDRVDEVEXT pDevExt)
    58975892{
    5898     Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt));
     5893    Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt->pGip));
    58995894
    59005895    int rc = RTSpinlockCreate(&pDevExt->hTscDeltaSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, "VBoxTscSpnLck");
     
    60786073        ASMSetFlags(uFlags);
    60796074
    6080         if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6075        if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    60816076        {
    60826077            int rc;
     
    61566151    u64NanoTS = RTTimeSystemNanoTS();
    61576152    ASMSetFlags(uFlags);
    6158     SUPTscDeltaApply(pGip, &u64Tsc, idApic, &fDeltaApplied);
     6153    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
     6154        SUPTscDeltaApply(pGip, &u64Tsc, idApic, &fDeltaApplied);
    61596155    u64DeltaNanoTS = u64NanoTS - pDevExt->u64NanoTSAnchor;
    61606156    u64DeltaTsc = u64Tsc - pDevExt->u64TscAnchor;
     
    62306226    pDevExt->u64NanoTSAnchor = RTTimeSystemNanoTS();
    62316227    ASMSetFlags(uFlags);
    6232     SUPTscDeltaApply(pGip, &pDevExt->u64TscAnchor, idApic, &fDeltaApplied);
     6228    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
     6229        SUPTscDeltaApply(pGip, &pDevExt->u64TscAnchor, idApic, &fDeltaApplied);
    62336230
    62346231#ifdef SUPDRV_USE_TSC_DELTA_THREAD
     
    63336330    supdrvGipInit(pDevExt, pGip, HCPhysGip, RTTimeSystemNanoTS(), RT_NS_1SEC / u32Interval /*=Hz*/, u32Interval, cCpus);
    63346331
    6335     if (RT_UNLIKELY(   pDevExt->fOsTscDeltasInSync
     6332    if (RT_UNLIKELY(   pGip->fOsTscDeltasInSync
    63366333                    && pGip->u32Mode == SUPGIPMODE_ASYNC_TSC
    63376334                    && !supdrvOSGetForcedAsyncTscMode(pDevExt)))
     
    63436340
    63446341#ifdef SUPDRV_USE_TSC_DELTA_THREAD
    6345     if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6342    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    63466343    {
    63476344        /* Initialize TSC-delta measurement thread before executing any Mp event callbacks. */
     
    63596356                uint16_t iCpu;
    63606357#ifndef SUPDRV_USE_TSC_DELTA_THREAD
    6361                 if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6358                if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    63626359                {
    63636360                    /*
     
    65336530    u64NanoTS = RTTimeSystemNanoTS();
    65346531
    6535     if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6532    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    65366533    {
    65376534        /*
     
    66786675     * update the state and it'll get serviced when the thread's listening interval times out.
    66796676     */
    6680     if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6677    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    66816678    {
    66826679        RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock);
     
    67376734
    67386735    /* Reset the TSC delta, we will recalculate it lazily. */
    6739     if (GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     6736    if (GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    67406737        ASMAtomicWriteS64(&pGip->aCPUs[i].i64TSCDelta, INT64_MAX);
    67416738
     
    71017098    pGipCpuWorker = &pGip->aCPUs[idxWorker];
    71027099
    7103     Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt));
     7100    Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pGip));
    71047101
    71057102    if (pGipCpuWorker->idCpu == idMaster)
     
    71627159    uint32_t   cOnlineCpus    = pGip->cOnlineCpus;
    71637160
    7164     Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt));
     7161    Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pGip));
    71657162
    71667163    /*
     
    74107407    pCpu->u64TSC             = ASMReadTSC();
    74117408    pCpu->u64TSCSample       = GIP_TSC_DELTA_RSVD;
    7412     pCpu->i64TSCDelta        = pDevExt->fOsTscDeltasInSync ? 0 : INT64_MAX;
     7409    pCpu->i64TSCDelta        = pGip->fOsTscDeltasInSync ? 0 : INT64_MAX;
    74137410
    74147411    ASMAtomicWriteSize(&pCpu->enmState, SUPGIPCPUSTATE_INVALID);
     
    74627459     * We only bother with TSC-deltas on invariant CPUs for now.
    74637460     */
    7464     pDevExt->fOsTscDeltasInSync = supdrvIsInvariantTsc() && supdrvOSAreTscDeltasInSync();
     7461    pGip->fOsTscDeltasInSync = supdrvIsInvariantTsc() && supdrvOSAreTscDeltasInSync();
    74657462
    74667463    /*
     
    78797876    pGip = pDevExt->pGip;
    78807877
    7881     if (!GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt))
     7878    if (!GIP_ARE_TSC_DELTAS_APPLICABLE(pGip))
    78827879        return VINF_SUCCESS;
    78837880
     
    79517948    AssertReturn(pReq, VERR_INVALID_PARAMETER);
    79527949    AssertReturn(pDevExt->pGip, VERR_INVALID_PARAMETER);
     7950
    79537951    pGip = pDevExt->pGip;
     7952    Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pGip));
    79547953
    79557954    cTries = 4;
     
    79737972        AssertMsgReturn(iCpu < pGip->cCpus, ("iCpu=%u cCpus=%u\n", iCpu, pGip->cCpus), VERR_INVALID_CPU_INDEX);
    79747973
    7975         Assert(GIP_ARE_TSC_DELTAS_APPLICABLE(pDevExt));
    79767974        rc2 = supdrvMeasureTscDeltaOne(pDevExt, iCpu);
    79777975        if (RT_SUCCESS(rc2))
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r53464 r53800  
    710710    /** Aligned pointer to the TSC delta sync. struct. */
    711711    PSUPTSCDELTASYNC                pTscDeltaSync;
    712     /** Whether the host OS has already normalized the hardware TSC deltas across
    713      *  CPUs. */
    714     bool                            fOsTscDeltasInSync;
    715712    /** @}  */
    716713
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette