This is a preview of how we can solve 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 this technique, see the first patch for details. I'm submitting it for discussion before I go ahead with a full conversion of the source tree. Todo: - Convert all uses of __thread - Extend checkpatch.pl to reject code that uses __thread Stefan Hajnoczi (2): tls: add macros for coroutine-safe TLS variables util/async: replace __thread with QEMU TLS macros MAINTAINERS | 1 + include/qemu/tls.h | 142 +++++++++++++++++++++++++++++++++++++++++++++ util/async.c | 12 ++-- 3 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 include/qemu/tls.h -- 2.31.1