From: "Alex Bennée" <alex.bennee@linaro.org>
To: Robert Foley <robert.foley@linaro.org>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
qemu-devel@nongnu.org, cota@braap.org,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Lingfeng Yang" <lfy@google.com>,
peter.puhov@linaro.org,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: Re: [PATCH v2 01/13] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext
Date: Mon, 08 Jun 2020 14:39:36 +0100 [thread overview]
Message-ID: <877dwh7k2v.fsf@linaro.org> (raw)
In-Reply-To: <20200605173422.1490-2-robert.foley@linaro.org>
Robert Foley <robert.foley@linaro.org> writes:
> From: Lingfeng Yang <lfy@google.com>
>
> We tried running QEMU under tsan in 2016, but tsan's lack of support for
> longjmp-based fibers was a blocker:
> https://groups.google.com/forum/#!topic/thread-sanitizer/se0YuzfWazw
>
> Fortunately, thread sanitizer gained fiber support in early 2019:
> https://reviews.llvm.org/D54889
>
> This patch brings tsan support upstream by importing the patch that annotated
> QEMU's coroutines as tsan fibers in Android's QEMU fork:
> https://android-review.googlesource.com/c/platform/external/qemu/+/844675
>
> Tested with '--enable-tsan --cc=clang-9 --cxx=clang++-9 --disable-werror'
> configure flags.
>
> Signed-off-by: Lingfeng Yang <lfy@google.com>
> Signed-off-by: Emilio G. Cota <cota@braap.org>
> [cota: minor modifications + configure changes]
> Signed-off-by: Robert Foley <robert.foley@linaro.org>
> [RF: configure changes for warnings, erorr handling + minor modifications]
<snip>
>
> +#define UC_DEBUG 0
> +#if UC_DEBUG && defined(CONFIG_TSAN)
> +#define UC_TRACE(fmt, ...) fprintf(stderr, "%s:%d:%p " fmt "\n", \
> + __func__, __LINE__, __tsan_get_current_fiber(), ##__VA_ARGS__);
> +#else
> +#define UC_TRACE(fmt, ...)
> +#endif
> +
We shouldn't be introducing new debug printfs if we can avoid it. I
suspect a separate patch could introduce some relevant trace points that
are outside the #if CONFIG_TSAN chunks.
> /**
> * Per-thread coroutine bookkeeping
> */
> @@ -65,7 +80,20 @@ union cc_arg {
> int i[2];
> };
>
> -static void finish_switch_fiber(void *fake_stack_save)
> +/* QEMU_ALWAYS_INLINE only does so if __OPTIMIZE__, so we cannot use it. */
> +static inline __attribute__((always_inline))
> +void on_new_fiber(CoroutineUContext *co)
> +{
We could put a tracepoint here at something like trace_new_fibre() but I
suspect for following what's going on you could probably just have
tracepoints in the higher coroutine functions and leave the fibre stuff
as purely a CONFIG_TSAN detail.
Please we wouldn't have to ague about American vs British spelling for
the tracepoints ;-)
<snip>
Otherwise without the UC_TRACE verbiage:
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
--
Alex Bennée
next prev parent reply other threads:[~2020-06-08 13:40 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-05 17:34 [PATCH v2 00/13] Add Thread Sanitizer support to QEMU Robert Foley
2020-06-05 17:34 ` [PATCH v2 01/13] configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext Robert Foley
2020-06-08 13:39 ` Alex Bennée [this message]
2020-06-08 20:09 ` Robert Foley
2020-06-05 17:34 ` [PATCH v2 02/13] cpu: convert queued work to a QSIMPLEQ Robert Foley
2020-06-05 17:34 ` [PATCH v2 03/13] thread: add qemu_spin_destroy Robert Foley
2020-06-05 17:34 ` [PATCH v2 04/13] cputlb: destroy CPUTLB with tlb_destroy Robert Foley
2020-06-05 17:34 ` [PATCH v2 05/13] qht: call qemu_spin_destroy for head buckets Robert Foley
2020-06-05 17:34 ` [PATCH v2 06/13] tcg: call qemu_spin_destroy for tb->jmp_lock Robert Foley
2020-06-08 14:44 ` Alex Bennée
2020-06-08 21:10 ` Robert Foley
2020-06-05 17:34 ` [PATCH v2 07/13] translate-all: call qemu_spin_destroy for PageDesc Robert Foley
2020-06-08 15:04 ` Alex Bennée
2020-06-05 17:34 ` [PATCH v2 08/13] thread: add tsan annotations to QemuSpin Robert Foley
2020-06-05 17:34 ` [PATCH v2 09/13] tests/docker: Added docker build support for TSan Robert Foley
2020-06-08 13:56 ` Alex Bennée
2020-06-05 17:34 ` [PATCH v2 10/13] include/qemu: Added tsan.h for annotations Robert Foley
2020-06-08 15:10 ` Alex Bennée
2020-06-05 17:34 ` [PATCH v2 11/13] util: Added tsan annotate for thread name Robert Foley
2020-06-05 17:34 ` [PATCH v2 12/13] docs: Added details on TSan to testing.rst Robert Foley
2020-06-08 15:13 ` Alex Bennée
2020-06-05 17:34 ` [PATCH v2 13/13] tests: Disable select tests under TSan, which hit TSan issue Robert Foley
2020-06-08 3:51 ` Emilio G. Cota
2020-06-08 15:41 ` Alex Bennée
2020-06-05 21:44 ` [PATCH v2 00/13] Add Thread Sanitizer support to QEMU no-reply
2020-06-08 15:42 ` Alex Bennée
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=877dwh7k2v.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=cota@braap.org \
--cc=kwolf@redhat.com \
--cc=lfy@google.com \
--cc=peter.puhov@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=robert.foley@linaro.org \
--cc=stefanha@redhat.com \
/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).