VirtualBox

Changeset 19439 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 6, 2009 3:04:30 PM (16 years ago)
Author:
vboxsync
Message:

PDM: Renamed PDMR3CritSectTryEnter to PDMCritSectTryEnter.

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PDMCritSect.cpp

    r18532 r19439  
    312312    pVM->pdm.s.cQueuedCritSectLeaves = 0;
    313313    VM_FF_CLEAR(pVM, VM_FF_PDM_CRITSECT);
    314 }
    315 
    316 
    317 /**
    318  * Try enter a critical section.
    319  *
    320  * @returns VINF_SUCCESS on success.
    321  * @returns VERR_SEM_BUSY if the critsect was owned.
    322  * @returns VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
    323  * @returns VERR_SEM_DESTROYED if RTCritSectDelete was called while waiting.
    324  * @param   pCritSect   The critical section.
    325  */
    326 VMMR3DECL(int) PDMR3CritSectTryEnter(PPDMCRITSECT pCritSect)
    327 {
    328     return RTCritSectTryEnter(&pCritSect->s.Core);
    329314}
    330315
  • trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp

    r19293 r19439  
    7777    {
    7878        pCritSect->s.Core.cNestings = 1;
    79         Assert(pVCpu->hNativeThread);
     79        Assert(pVCpu->hNativeThread != NIL_RTNATIVETHREAD);
    8080        ASMAtomicXchgSize(&pCritSect->s.Core.NativeThreadOwner, pVCpu->hNativeThread);
    8181        STAM_PROFILE_ADV_START(&pCritSect->s.StatLocked, l);
     
    9999    STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock);
    100100    return rcBusy;
     101#endif /* !IN_RING3 */
     102}
     103
     104
     105/**
     106 * Try enter a critical section.
     107 *
     108 * @retval  VINF_SUCCESS on success.
     109 * @retval  VERR_SEM_BUSY if the critsect was owned.
     110 * @retval  VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
     111 * @retval  VERR_SEM_DESTROYED if RTCritSectDelete was called while waiting.
     112 *
     113 * @param   pCritSect   The critical section.
     114 */
     115VMMDECL(int) PDMCritSectTryEnter(PPDMCRITSECT pCritSect)
     116{
     117#ifdef IN_RING3
     118    return RTCritSectTryEnter(&pCritSect->s.Core);
     119#else   /* !IN_RING3 (same code as PDMCritSectEnter except for the log statement) */
     120    AssertMsgReturn(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC, ("%RX32\n", pCritSect->s.Core.u32Magic),
     121                    VERR_SEM_DESTROYED);
     122    PVM pVM = pCritSect->s.CTX_SUFF(pVM);
     123    Assert(pVM);
     124    PVMCPU pVCpu = VMMGetCpu(pVM);
     125    Assert(pVCpu);
     126
     127    /*
     128     * Try to take the lock.
     129     */
     130    if (ASMAtomicCmpXchgS32(&pCritSect->s.Core.cLockers, 0, -1))
     131    {
     132        pCritSect->s.Core.cNestings = 1;
     133        Assert(pVCpu->hNativeThread != NIL_RTNATIVETHREAD);
     134        ASMAtomicXchgSize(&pCritSect->s.Core.NativeThreadOwner, pVCpu->hNativeThread);
     135        STAM_PROFILE_ADV_START(&pCritSect->s.StatLocked, l);
     136        return VINF_SUCCESS;
     137    }
     138
     139    /*
     140     * Nested?
     141     */
     142    if (pCritSect->s.Core.NativeThreadOwner == pVCpu->hNativeThread)
     143    {
     144        pCritSect->s.Core.cNestings++;
     145        ASMAtomicIncS32(&pCritSect->s.Core.cLockers);
     146        return VINF_SUCCESS;
     147    }
     148
     149    /*
     150     * Failed.
     151     */
     152    LogFlow(("PDMCritSectTryEnter: locked\n"));
     153    STAM_REL_COUNTER_INC(&pCritSect->s.StatContentionRZLock);
     154    return VERR_SEM_BUSY;
    101155#endif /* !IN_RING3 */
    102156}
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