On 26 October 2011 16:02, Jan Kiszka <jan.kis...@siemens.com> wrote: > On 2011-10-26 16:54, Peter Maydell wrote: >> On 26 October 2011 15:39, Paolo Bonzini <pbonz...@redhat.com> wrote: >>> On 10/26/2011 04:03 PM, Peter Maydell wrote: >>>> >>>> For the record (since I think we only talked about this on IRC): >>>> * the POSIX TLS fallback code doesn't work on Linux hosts for >>>> linux-user emulation (the constructor is never called to set up >>>> the TLS for the main thread, probably something to do with our >>>> custom linker script, since it does work OK for system emulation) >>>> * if I recall correctly from IRC it doesn't compile on OpenBSD >>>> >>>> so for 1.0 perhaps we need to fall back to a simpler set of patches >>>> that just avoid the regression in thread support for linux-user ? >>> >>> I agree. >> >> I was thinking something like a trivial qemu-tls.h which does >> >> #ifdef __linux__ >> #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) >> #define DEFINE_TLS(type, x) __thread __typeof__(type) tls__##x >> #define get_tls(x) tls__##x >> #else >> /* Dummy implementations -- we can get away with this because system >> * mode is effectively single-threaded for our current limited use of >> * TLS, and the only -user mode which supports multiple threads is >> * linux-user. > > We will use it in system mode as well, e.g. when I'll push away the > global lock from KVM entry/exits. So let's state that it is only > interesting on Linux hosts for now. > > Otherwise, this looks good.
The point of the comment is that you can't use this facility in system mode until we've added the non-Linux support (because you'd break Win32 &c). So fixing and committing the non-Linux support is a prerequisite for anything like the global lock moves. I can be a bit more explicit about that if you like: /* Dummy implementations -- we can get away with this because system * mode is effectively single-threaded for our current limited use of * TLS, and the only -user mode which supports multiple threads is * linux-user. * This means you cannot use this for any variables which will * actually be accessed by more than one thread in system mode * until the implementations for Win32 and POSIX systems without * __thread have been added! * * TODO: add implementations via Win32 .tls sections and * POSIX pthread_getspecific. */ -- PMM