On 05/05/2017 12:38, Alex Bennée wrote: > Signed-off-by: Alex Bennée <alex.ben...@linaro.org>
Can you look at the patch I just sent a pull request for? It only has locked and unlocked trace events, you can add lock on top. Paolo > --- > include/qemu/thread.h | 7 +++++-- > util/qemu-thread-posix.c | 11 +++++++++-- > util/trace-events | 5 +++++ > 3 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/include/qemu/thread.h b/include/qemu/thread.h > index 9910f49b3a..ddea4990c0 100644 > --- a/include/qemu/thread.h > +++ b/include/qemu/thread.h > @@ -22,9 +22,12 @@ typedef struct QemuThread QemuThread; > > void qemu_mutex_init(QemuMutex *mutex); > void qemu_mutex_destroy(QemuMutex *mutex); > -void qemu_mutex_lock(QemuMutex *mutex); > int qemu_mutex_trylock(QemuMutex *mutex); > -void qemu_mutex_unlock(QemuMutex *mutex); > +void qemu_mutex_lock_impl(QemuMutex *mutex, const char *file, const int > line); > +void qemu_mutex_unlock_impl(QemuMutex *mutex, const char *file, const int > line); > + > +#define qemu_mutex_lock(mutex) qemu_mutex_lock_impl(mutex, __FILE__, > __LINE__) > +#define qemu_mutex_unlock(mutex) qemu_mutex_unlock_impl(mutex, __FILE__, > __LINE__) > > /* Prototypes for other functions are in thread-posix.h/thread-win32.h. */ > void qemu_rec_mutex_init(QemuRecMutex *mutex); > diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c > index 73e3a0edf5..9da1c9e756 100644 > --- a/util/qemu-thread-posix.c > +++ b/util/qemu-thread-posix.c > @@ -14,6 +14,7 @@ > #include "qemu/thread.h" > #include "qemu/atomic.h" > #include "qemu/notify.h" > +#include "trace.h" > > static bool name_threads; > > @@ -53,13 +54,17 @@ void qemu_mutex_destroy(QemuMutex *mutex) > error_exit(err, __func__); > } > > -void qemu_mutex_lock(QemuMutex *mutex) > +void qemu_mutex_lock_impl(QemuMutex *mutex, const char *file, const int line) > { > int err; > > + trace_qemu_mutex_lock(mutex, file, line); > + > err = pthread_mutex_lock(&mutex->lock); > if (err) > error_exit(err, __func__); > + > + trace_qemu_mutex_locked(mutex, file, line); > } > > int qemu_mutex_trylock(QemuMutex *mutex) > @@ -67,13 +72,15 @@ int qemu_mutex_trylock(QemuMutex *mutex) > return pthread_mutex_trylock(&mutex->lock); > } > > -void qemu_mutex_unlock(QemuMutex *mutex) > +void qemu_mutex_unlock_impl(QemuMutex *mutex, const char *file, const int > line) > { > int err; > > err = pthread_mutex_unlock(&mutex->lock); > if (err) > error_exit(err, __func__); > + > + trace_qemu_mutex_unlock(mutex, file, line); > } > > void qemu_rec_mutex_init(QemuRecMutex *mutex) > diff --git a/util/trace-events b/util/trace-events > index b44ef4f895..972d7e1786 100644 > --- a/util/trace-events > +++ b/util/trace-events > @@ -34,6 +34,11 @@ qemu_co_mutex_lock_return(void *mutex, void *self) "mutex > %p self %p" > qemu_co_mutex_unlock_entry(void *mutex, void *self) "mutex %p self %p" > qemu_co_mutex_unlock_return(void *mutex, void *self) "mutex %p self %p" > > +# util/qemu-thread.c > +qemu_mutex_lock(void *mutex, const char *file, const int line) "waiting on > mutex %p (%s:%d)" > +qemu_mutex_locked(void *mutex, const char *file, const int line) "taken > mutex %p (%s:%d)" > +qemu_mutex_unlock(void *mutex, const char *file, const int line) "released > mutex %p (%s:%d)" > + > # util/oslib-win32.c > # util/oslib-posix.c > qemu_memalign(size_t alignment, size_t size, void *ptr) "alignment %zu size > %zu ptr %p" >