socsvn commit: r237812 - in soc2012/gmiller/locking-head: include
lib/libthr/thread
gmiller at FreeBSD.org
gmiller at FreeBSD.org
Sat Jun 16 21:17:05 UTC 2012
Author: gmiller
Date: Sat Jun 16 21:17:03 2012
New Revision: 237812
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237812
Log:
Implement profiling of spinlocks.
Modified:
soc2012/gmiller/locking-head/include/pthread.h
soc2012/gmiller/locking-head/lib/libthr/thread/thr_private.h
soc2012/gmiller/locking-head/lib/libthr/thread/thr_profile.c
soc2012/gmiller/locking-head/lib/libthr/thread/thr_pspinlock.c
Modified: soc2012/gmiller/locking-head/include/pthread.h
==============================================================================
--- soc2012/gmiller/locking-head/include/pthread.h Sat Jun 16 20:49:08 2012 (r237811)
+++ soc2012/gmiller/locking-head/include/pthread.h Sat Jun 16 21:17:03 2012 (r237812)
@@ -344,6 +344,8 @@
int _pthread_spin_trylock_profiled(pthread_spinlock_t *,
const char *,
int);
+int _pthread_spin_unlock_profiled(pthread_spinlock_t *,
+ const char *, int);
#ifdef pthread_mutex_lock
@@ -359,8 +361,10 @@
#undef pthread_rwlock_timedwrlock
#undef pthread_rwlock_tryrdlock
#undef pthread_rwlock_trywrlock
+#undef pthread_rwlock_unlock
#undef pthread_spin_lock
#undef pthread_spin_trylock
+#undef pthread_spin_unlock
#endif
@@ -392,6 +396,8 @@
_pthread_spin_lock(s, __FILE__, __LINE__)
#define pthread_spin_trylock(s) \
_pthread_spin_trylock(s, __FILE__, __LINE__)
+#define pthread_spin_unlock(s) \
+ _pthread_spin_unlock(s, __FILE__, __LINE__)
#endif
Modified: soc2012/gmiller/locking-head/lib/libthr/thread/thr_private.h
==============================================================================
--- soc2012/gmiller/locking-head/lib/libthr/thread/thr_private.h Sat Jun 16 20:49:08 2012 (r237811)
+++ soc2012/gmiller/locking-head/lib/libthr/thread/thr_private.h Sat Jun 16 21:17:03 2012 (r237812)
@@ -754,11 +754,6 @@
void _lock_profile_obtain_success(void *, struct timespec *, const char *,
int) __hidden;
void _lock_profile_release(void *, const char *file) __hidden;
-void _spin_obtain_success(struct pthread_spinlock *,
- struct timespec *wait_time, const char *file, int line) __hidden;
-void _spin_obtain_failed(struct pthread_spinlock *,
- struct timespec *wait_time) __hidden;
-void _spin_release(struct pthread_spinlock *, struct timespec *) __hidden;
void _libpthread_init(struct pthread *) __hidden;
struct pthread *_thr_alloc(struct pthread *) __hidden;
void _thread_exit(const char *, int, const char *) __hidden __dead2;
@@ -826,12 +821,6 @@
#define LOCK_PROFILE_OBTAIN_FAILED(ts) \
_lock_profile_obtain_failed(ts, file)
#define LOCK_PROFILE_RELEASE(l) _lock_profile_release(l, file)
-#define SPIN_OBTAIN_SUCCESS(s, ts) \
- _spin_obtain_success(s, ts, file, line)
-#define SPIN_OBTAIN_FAILED(s, ts) \
- _spin_obtain_failed(s, ts)
-#define SPIN_RELEASE(s, ts) \
- _spin_release(s, ts)
#else
@@ -839,9 +828,6 @@
#define LOCK_PROFILE_OBTAIN_SUCCESS(l, ts) do { } while (0)
#define LOCK_PROFILE_OBTAIN_FAILED(ts) do { } while (0)
#define LOCK_PROFILE_RELEASE(l) do { } while (0)
-#define SPIN_OBTAIN_SUCCESS(s, ts) do { } while (0)
-#define SPIN_OBTAIN_FAILED(s, ts) do { } while (0)
-#define SPIN_RELEASE(s, ts) do { } while (0)
#endif
Modified: soc2012/gmiller/locking-head/lib/libthr/thread/thr_profile.c
==============================================================================
--- soc2012/gmiller/locking-head/lib/libthr/thread/thr_profile.c Sat Jun 16 20:49:08 2012 (r237811)
+++ soc2012/gmiller/locking-head/lib/libthr/thread/thr_profile.c Sat Jun 16 21:17:03 2012 (r237812)
@@ -240,22 +240,6 @@
THR_CRITICAL_LEAVE(curthread);
}
-void
-_spin_obtain_success(struct pthread_spinlock *s, struct timespec *wait_time,
- const char *file, int line)
-{
-}
-
-void
-_spin_obtain_failed(struct pthread_spinlock *s, struct timespec *wait_time)
-{
-}
-
-void
-_spin_release(struct pthread_spinlock *s, struct timespec *wait_time)
-{
-}
-
static int
find_next_record(struct pthread_statistics_np *stats)
{
Modified: soc2012/gmiller/locking-head/lib/libthr/thread/thr_pspinlock.c
==============================================================================
--- soc2012/gmiller/locking-head/lib/libthr/thread/thr_pspinlock.c Sat Jun 16 20:49:08 2012 (r237811)
+++ soc2012/gmiller/locking-head/lib/libthr/thread/thr_pspinlock.c Sat Jun 16 21:17:03 2012 (r237812)
@@ -44,10 +44,12 @@
#ifdef LOCK_PROFILING
-int _pthread_spin_trylock_profiled(pthread_spinlock_t *lock,
- const char *file, int line);
int _pthread_spin_lock_profiled(pthread_spinlock_t *lock,
const char *file, int line);
+int _pthread_spin_trylock_profiled(pthread_spinlock_t *lock,
+ const char *file, int line);
+int _pthread_spin_unlock_profiled(pthread_spinlock_t *lock,
+ const char *file, int line);
#endif
@@ -111,9 +113,9 @@
else {
ret = THR_UMUTEX_TRYLOCK(curthread, &lck->s_lock);
if (ret == 0) {
- SPIN_OBTAIN_SUCCESS(lck, &waittime);
+ LOCK_PROFILE_OBTAIN_SUCCESS(lck, &waittime);
} else {
- SPIN_OBTAIN_FAILED(lck, &waittime);
+ LOCK_PROFILE_OBTAIN_FAILED(&waittime);
}
}
@@ -149,7 +151,7 @@
#ifdef LOCK_PROFILING
if (!spin_needed) {
spin_needed = 1;
- SPIN_OBTAIN_FAILED(lck, &waittime);
+ LOCK_PROFILE_OBTAIN_FAILED(&waittime);
}
#endif
while (lck->s_lock.m_owner) {
@@ -166,7 +168,7 @@
}
}
ret = 0;
- SPIN_OBTAIN_SUCCESS(lck, &waittime);
+ LOCK_PROFILE_OBTAIN_SUCCESS(lck, &waittime);
}
return (ret);
@@ -174,21 +176,26 @@
int
_pthread_spin_unlock(pthread_spinlock_t *lock)
+#ifdef LOCK_PROFILING
+{
+ return (_pthread_spin_unlock_profiled(lock, NULL, 0));
+}
+
+int
+_pthread_spin_unlock_profiled(pthread_spinlock_t *lock, const char *file,
+ int line)
+#endif
{
struct pthread *curthread = _get_curthread();
struct pthread_spinlock *lck;
int ret;
-#ifdef LOCK_PROFILING
- struct timespec waittime;
- bzero(&waittime, sizeof(waittime));
-#endif
if (lock == NULL || (lck = *lock) == NULL)
ret = EINVAL;
else {
ret = THR_UMUTEX_UNLOCK(curthread, &lck->s_lock);
if (ret == 0) {
- SPIN_RELEASE(lck, &waittime);
+ LOCK_PROFILE_RELEASE(lck);
}
}
return (ret);
More information about the svn-soc-all
mailing list