From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Fam Zheng <fam@euphon.net>,
fweimer@redhat.com, thuth@redhat.com,
Daniel Berrange <berrange@redhat.com>,
qemu-block@nongnu.org,
Richard Henderson <richard.henderson@linaro.org>,
Stefan Hajnoczi <stefanha@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Kevin Wolf <kwolf@redhat.com>, Warner Losh <imp@bsdimp.com>,
sguelton@redhat.com
Subject: [RFC v3 0/4] tls: add macros for coroutine-safe TLS variables
Date: Mon, 6 Dec 2021 14:26:28 +0000 [thread overview]
Message-ID: <20211206142632.116925-1-stefanha@redhat.com> (raw)
v3:
- Added __attribute__((weak)) to get_ptr_*() [Florian]
- Replace rdfsbase with mov %%fs:0,%0 [Florian]
This patch series solves the coroutines TLS problem. Coroutines re-entered from
another thread sometimes see stale TLS values. This happens because compilers
may cache values across yield points, so a value from the previous thread will
be used when the coroutine is re-entered in another thread.
Serge Guelton developed a portable technique and Richard Henderson developed an
inline-friendly architecture-specific technique, see the first patch for
details.
I have audited all __thread variables in QEMU and converted those that can be
used from coroutines. Most actually look safe to me. This patch does not
include a checkpatch.pl rule that requires coroutine-tls.h usage, but perhaps
we should add one for block/ at least?
Stefan Hajnoczi (4):
tls: add macros for coroutine-safe TLS variables
util/async: replace __thread with QEMU TLS macros
rcu: use coroutine TLS macros
cpus: use coroutine TLS macros for iothread_locked
include/qemu/coroutine-tls.h | 205 +++++++++++++++++++++++++++++++++++
include/qemu/rcu.h | 7 +-
softmmu/cpus.c | 8 +-
tests/unit/rcutorture.c | 10 +-
tests/unit/test-rcu-list.c | 4 +-
util/async.c | 12 +-
util/rcu.c | 10 +-
7 files changed, 232 insertions(+), 24 deletions(-)
create mode 100644 include/qemu/coroutine-tls.h
--
2.33.1
next reply other threads:[~2021-12-06 14:32 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-06 14:26 Stefan Hajnoczi [this message]
2021-12-06 14:26 ` [RFC v3 1/4] tls: add macros for coroutine-safe TLS variables Stefan Hajnoczi
2021-12-06 14:26 ` [RFC v3 2/4] util/async: replace __thread with QEMU TLS macros Stefan Hajnoczi
2021-12-06 14:26 ` [RFC v3 3/4] rcu: use coroutine " Stefan Hajnoczi
2021-12-06 14:26 ` [RFC v3 4/4] cpus: use coroutine TLS macros for iothread_locked Stefan Hajnoczi
2021-12-06 14:34 ` [RFC v3 0/4] tls: add macros for coroutine-safe TLS variables Peter Maydell
2021-12-07 13:34 ` Stefan Hajnoczi
2021-12-07 13:53 ` Stefan Hajnoczi
2021-12-07 13:55 ` Peter Maydell
2021-12-07 16:29 ` Stefan Hajnoczi
2021-12-13 14:09 ` Stefan Hajnoczi
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=20211206142632.116925-1-stefanha@redhat.com \
--to=stefanha@redhat.com \
--cc=berrange@redhat.com \
--cc=fam@euphon.net \
--cc=fweimer@redhat.com \
--cc=imp@bsdimp.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sguelton@redhat.com \
--cc=thuth@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).