From: "Alex Bennée" <alex.bennee@linaro.org>
To: Robert Foley <robert.foley@linaro.org>
Cc: peter.puhov@linaro.org, cota@braap.org, qemu-devel@nongnu.org
Subject: Re: [PATCH v1 08/12] thread: add tsan annotations to QemuSpin
Date: Tue, 02 Jun 2020 21:14:45 +0100 [thread overview]
Message-ID: <87367d6x8q.fsf@linaro.org> (raw)
In-Reply-To: <20200529132341.755-8-robert.foley@linaro.org>
Robert Foley <robert.foley@linaro.org> writes:
> From: "Emilio G. Cota" <cota@braap.org>
>
> Signed-off-by: Emilio G. Cota <cota@braap.org>
> Signed-off-by: Robert Foley <robert.foley@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> include/qemu/thread.h | 39 ++++++++++++++++++++++++++++++++++++---
> 1 file changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/include/qemu/thread.h b/include/qemu/thread.h
> index e50a073889..43fc094b96 100644
> --- a/include/qemu/thread.h
> +++ b/include/qemu/thread.h
> @@ -206,6 +206,10 @@ void qemu_thread_atexit_add(struct Notifier *notifier);
> */
> void qemu_thread_atexit_remove(struct Notifier *notifier);
>
> +#ifdef CONFIG_TSAN
> +#include <sanitizer/tsan_interface.h>
> +#endif
> +
> struct QemuSpin {
> int value;
> };
> @@ -213,23 +217,46 @@ struct QemuSpin {
> static inline void qemu_spin_init(QemuSpin *spin)
> {
> __sync_lock_release(&spin->value);
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_create(spin, __tsan_mutex_not_static);
> +#endif
> }
>
> -static inline void qemu_spin_destroy(QemuSpin *spin)
> -{ }
> +/* const parameter because the only purpose here is the TSAN annotation */
> +static inline void qemu_spin_destroy(const QemuSpin *spin)
> +{
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_destroy((void *)spin, __tsan_mutex_not_static);
> +#endif
> +}
>
> static inline void qemu_spin_lock(QemuSpin *spin)
> {
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_pre_lock(spin, 0);
> +#endif
> while (unlikely(__sync_lock_test_and_set(&spin->value, true))) {
> while (atomic_read(&spin->value)) {
> cpu_relax();
> }
> }
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_post_lock(spin, 0, 0);
> +#endif
> }
>
> static inline bool qemu_spin_trylock(QemuSpin *spin)
> {
> - return __sync_lock_test_and_set(&spin->value, true);
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_pre_lock(spin, __tsan_mutex_try_lock);
> +#endif
> + bool busy = __sync_lock_test_and_set(&spin->value, true);
> +#ifdef CONFIG_TSAN
> + unsigned flags = __tsan_mutex_try_lock;
> + flags |= busy ? __tsan_mutex_try_lock_failed : 0;
> + __tsan_mutex_post_lock(spin, flags, 0);
> +#endif
> + return busy;
> }
>
> static inline bool qemu_spin_locked(QemuSpin *spin)
> @@ -239,7 +266,13 @@ static inline bool qemu_spin_locked(QemuSpin *spin)
>
> static inline void qemu_spin_unlock(QemuSpin *spin)
> {
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_pre_unlock(spin, 0);
> +#endif
> __sync_lock_release(&spin->value);
> +#ifdef CONFIG_TSAN
> + __tsan_mutex_post_unlock(spin, 0);
> +#endif
> }
>
> struct QemuLockCnt {
--
Alex Bennée
next prev parent reply other threads:[~2020-06-02 20:15 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-29 13:23 [PATCH v1 01/12] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext Robert Foley
2020-05-29 13:23 ` [PATCH v1 02/12] cpu: convert queued work to a QSIMPLEQ Robert Foley
2020-05-29 13:23 ` [PATCH v1 03/12] thread: add qemu_spin_destroy Robert Foley
2020-06-02 19:23 ` Alex Bennée
2020-05-29 13:23 ` [PATCH v1 04/12] cputlb: destroy CPUTLB with tlb_destroy Robert Foley
2020-06-02 19:25 ` Alex Bennée
2020-05-29 13:23 ` [PATCH v1 05/12] qht: call qemu_spin_destroy for head buckets Robert Foley
2020-06-02 19:26 ` Alex Bennée
2020-05-29 13:23 ` [PATCH v1 06/12] tcg: call qemu_spin_destroy for tb->jmp_lock Robert Foley
2020-05-29 13:23 ` [PATCH v1 07/12] translate-all: call qemu_spin_destroy for PageDesc Robert Foley
2020-05-29 13:23 ` [PATCH v1 08/12] thread: add tsan annotations to QemuSpin Robert Foley
2020-06-02 20:14 ` Alex Bennée [this message]
2020-05-29 13:23 ` [PATCH v1 09/12] tests/docker: Added docker build support for TSan Robert Foley
2020-06-02 20:21 ` Alex Bennée
2020-06-03 15:46 ` Robert Foley
2020-05-29 13:23 ` [PATCH v1 10/12] include/qemu: Added tsan.h for annotations Robert Foley
2020-05-29 13:23 ` [PATCH v1 11/12] util: Added tsan annotate for thread name Robert Foley
2020-06-01 3:56 ` Emilio G. Cota
2020-05-29 13:51 ` [PATCH v1 01/12] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext Eric Blake
2020-05-29 14:56 ` Robert Foley
2020-06-02 19:22 ` Alex Bennée
2020-06-03 16:51 ` Robert Foley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87367d6x8q.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=cota@braap.org \
--cc=peter.puhov@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=robert.foley@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).