On 2011-10-26 17:09, Peter Maydell wrote: > 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
My point is that it is fine to use for per-vcpu variables because: - they are single-threaded in TCG mode - they are multi-threaded in KVM mode, but that's only affecting Linux hosts for which this TLS wrapper is already usable Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux