[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: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events |
Date: |
Fri, 05 May 2017 16:59:58 +0100 |
User-agent: |
mu4e 0.9.19; emacs 25.2.17 |
Paolo Bonzini <address@hidden> writes:
> 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.
Cool - great minds think alike ;-)
I'll re-spin my trace analysis script and the lock trace point once that
pull request is merged. I would be nice if we could associate locks with
names though as the QemuMutex * is basically just an anonymous handle.
Would it be overly extravagant to add a const char * to QemuMutex to can
be init'ed with a human readable name?
Stefan,
Does the trace sub-system have any way to register a human readable
string to a given pointer value? I guess this is something that could be
added to the trace pre-amble?
>
> 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"
>>
--
Alex Bennée
- [Qemu-devel] [RFC PATCH v1 0/9] BQL and Replay Lock changes, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 1/9] target/arm/arm-powertctl: drop BQL assertions, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 5/9] replay: make locking visible outside replay code, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 2/9] cpus: push BQL lock to qemu_*_wait_io_event, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 3/9] cpus: only take BQL for sleeping threads, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 4/9] replay/replay-internal.c: track holding of replay_lock, Alex Bennée, 2017/05/05
- [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Alex Bennée, 2017/05/05
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Paolo Bonzini, 2017/05/05
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events,
Alex Bennée <=
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Paolo Bonzini, 2017/05/06
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Stefan Hajnoczi, 2017/05/08
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Alex Bennée, 2017/05/09
- Re: [Qemu-devel] [RFC PATCH v1 8/9] util/qemu-thread-*: add qemu_lock, locked and unlock trace events, Paolo Bonzini, 2017/05/09
[Qemu-devel] [RFC PATCH v1 6/9] replay: push replay_mutex_lock up the call tree, Alex Bennée, 2017/05/05
[Qemu-devel] [RFC PATCH v1 7/9] scripts/qemu-gdb: add simple tcg lock status helper, Alex Bennée, 2017/05/05
[Qemu-devel] [RFC PATCH v1 9/9] scripts/analyse-locks-simpletrace.py: script to analyse lock times, Alex Bennée, 2017/05/05
Re: [Qemu-devel] [RFC PATCH v1 0/9] BQL and Replay Lock changes, no-reply, 2017/05/05
Re: [Qemu-devel] [RFC PATCH v1 0/9] BQL and Replay Lock changes, Pavel Dovgalyuk, 2017/05/10