qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, l


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events
Date: Fri, 5 May 2017 17:17:36 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0


On 05/05/2017 12:38, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <address@hidden>

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"
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]