]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/lock: MXUserSemaphore stats on TimedDown
authorVMware, Inc <>
Mon, 26 Jul 2010 18:04:26 +0000 (11:04 -0700)
committerMarcelo Vanzin <mvanzin@vmware.com>
Mon, 26 Jul 2010 18:04:26 +0000 (11:04 -0700)
Report more statistics. Clean up TryAcquire for Excl and Rec locks.

Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/lib/lock/ulExcl.c
open-vm-tools/lib/lock/ulRec.c
open-vm-tools/lib/lock/ulSema.c

index 8b6c2a73b3a3ab9f5630d8a63e3a95711a2745c7..7c46dc438457dc7f17b76b38da587cff7e19e154 100644 (file)
@@ -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
    }
 
index a3038ddeeb1b9f98ece4424c1bc390a247fcc5e0..3cf200a1fd86f3fc1ae3861ee7a72714b6c476a9 100644 (file)
@@ -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
 
index f22d6ffd19b2f9449c00467c01b1f0499e24c020..d1576f19365e4e59d63aea456c7028f59291858c 100644 (file)
@@ -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",