From: VMware, Inc <> Date: Mon, 26 Jul 2010 18:04:26 +0000 (-0700) Subject: lib/lock: MXUserSemaphore stats on TimedDown X-Git-Tag: 2010.07.25-280253~109 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3036a1740dc0e834b4e4fc479eb2db1f68ceea57;p=thirdparty%2Fopen-vm-tools.git lib/lock: MXUserSemaphore stats on TimedDown Report more statistics. Clean up TryAcquire for Excl and Rec locks. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/lock/ulExcl.c b/open-vm-tools/lib/lock/ulExcl.c index 8b6c2a73b..7c46dc438 100644 --- a/open-vm-tools/lib/lock/ulExcl.c +++ b/open-vm-tools/lib/lock/ulExcl.c @@ -388,27 +388,16 @@ MXUser_TryAcquireExclLock(MXUserExclLock *lock) // IN/OUT: { Bool success; -#if defined(MXUSER_STATS) - VmTimeType begin; -#endif - ASSERT(lock && (lock->header.signature == MXUSER_EXCL_SIGNATURE)); if (MXUserTryAcquireFail(lock->header.name)) { return FALSE; } -#if defined(MXUSER_STATS) - begin = Hostinfo_SystemTimerNS(); -#endif success = MXRecLockTryAcquire(&lock->recursiveLock, GetReturnAddress()); if (success) { -#if defined(MXUSER_STATS) - VmTimeType end = Hostinfo_SystemTimerNS(); -#endif - MXUserAcquisitionTracking(&lock->header, FALSE); if (MXRecLockCount(&lock->recursiveLock) > 1) { @@ -418,7 +407,7 @@ MXUser_TryAcquireExclLock(MXUserExclLock *lock) // IN/OUT: } #if defined(MXUSER_STATS) - MXUserAcquisitionSample(&lock->acquisitionStats, FALSE, end - begin); + MXUserAcquisitionSample(&lock->acquisitionStats, FALSE, 0ULL); #endif } diff --git a/open-vm-tools/lib/lock/ulRec.c b/open-vm-tools/lib/lock/ulRec.c index a3038ddee..3cf200a1f 100644 --- a/open-vm-tools/lib/lock/ulRec.c +++ b/open-vm-tools/lib/lock/ulRec.c @@ -423,25 +423,16 @@ MXUser_TryAcquireRecLock(MXUserRecLock *lock) // IN/OUT: ASSERT(MXUserMX_TryLockRec); success = (*MXUserMX_TryLockRec)(lock->vmmLock); } else { -#if defined(MXUSER_STATS) - VmTimeType begin; -#endif - if (MXUserTryAcquireFail(lock->header.name)) { return FALSE; } -#if defined(MXUSER_STATS) - begin = Hostinfo_SystemTimerNS(); -#endif - success = MXRecLockTryAcquire(&lock->recursiveLock, GetReturnAddress()); if (success) { #if defined(MXUSER_STATS) if (MXRecLockCount(&lock->recursiveLock) == 1) { - MXUserAcquisitionSample(&lock->acquisitionStats, FALSE, - Hostinfo_SystemTimerNS() - begin); + MXUserAcquisitionSample(&lock->acquisitionStats, FALSE, 0ULL); } #endif diff --git a/open-vm-tools/lib/lock/ulSema.c b/open-vm-tools/lib/lock/ulSema.c index f22d6ffd1..d1576f193 100644 --- a/open-vm-tools/lib/lock/ulSema.c +++ b/open-vm-tools/lib/lock/ulSema.c @@ -684,7 +684,39 @@ MXUser_TimedDownSemaphore(MXUserSemaphore *sema, // IN/OUT: MXUserAcquisitionTracking(&sema->header, TRUE); // rank checking +#if defined(MXUSER_STATS) + { + Bool tryDownSuccess = FALSE; + VmTimeType begin = Hostinfo_SystemTimerNS(); + + err = MXUserTryDown(&sema->nativeSemaphore, &tryDownSuccess); + + if (LIKELY(err == 0)) { + if (tryDownSuccess) { + downOccurred = TRUE; + } else { + err = MXUserTimedDown(&sema->nativeSemaphore, msecWait, + &downOccurred); + } + + if (LIKELY(err == 0) && downOccurred) { + MXUserHisto *histo; + VmTimeType value = Hostinfo_SystemTimerNS() - begin; + + MXUserAcquisitionSample(&sema->acquisitionStats, !tryDownSuccess, + value); + + histo = Atomic_ReadPtr(&sema->acquisitionHisto); + + if (UNLIKELY(histo != NULL)) { + MXUserHistoSample(histo, value); + } + } + } + } +#else err = MXUserTimedDown(&sema->nativeSemaphore, msecWait, &downOccurred); +#endif if (UNLIKELY(err != 0)) { MXUserDumpAndPanic(&sema->header, "%s: Internal error (%d)\n",