All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 0/4] tls: add macros for coroutine-safe TLS variables
@ 2021-12-01 17:01 Stefan Hajnoczi
  2021-12-01 17:01 ` [RFC v2 1/4] " Stefan Hajnoczi
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Stefan Hajnoczi @ 2021-12-01 17:01 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, fweimer, thuth, Daniel Berrange, qemu-block,
	Richard Henderson, Stefan Hajnoczi, Paolo Bonzini, Fam Zheng,
	Warner Losh, sguelton

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 | 202 +++++++++++++++++++++++++++++++++++
 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, 229 insertions(+), 24 deletions(-)
 create mode 100644 include/qemu/coroutine-tls.h

-- 
2.33.1




^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-12-03  6:26 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-01 17:01 [RFC v2 0/4] tls: add macros for coroutine-safe TLS variables Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 1/4] " Stefan Hajnoczi
2021-12-01 18:24   ` Florian Weimer
2021-12-02  9:53     ` Stefan Hajnoczi
2021-12-02 14:44   ` Peter Maydell
2021-12-02 14:50     ` Peter Maydell
2021-12-02 14:57       ` Florian Weimer
2021-12-03  6:24     ` Serge Guelton
2021-12-01 17:01 ` [RFC v2 2/4] util/async: replace __thread with QEMU TLS macros Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 3/4] rcu: use coroutine " Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 4/4] cpus: use coroutine TLS macros for iothread_locked Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.