On 10/25/21 7:07 AM, Stefan Hajnoczi wrote:
> 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.
I'm not thrilled by this, but I guess it does work.
It could be worthwhile to add some inline asm instead for specific hosts -- one
instruction instead of an out-of-line call.
> 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
Absolutely not. *Perhaps* one or two tls variables which are accessible by coroutines,
but there are plenty that have absolutely no relation. Especially everything related to
user-only execution.
I had the same worry. I'd also worry that the hoops that are jumped through for
coroutines would somehow conflict with the low-level user-only execution
environment. I mean, it should be fine, but I know I'd be cranky if I traced
obscure regressions to being forced to use this construct...
Warner
r~