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. Jan > * TODO: proper implementations via Win32 .tls sections and > * POSIX pthread_getspecific. > */ > #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) > #define DEFINE_TLS(type, x) __typeof__(type) tls__##x > #define get_tls(x) tls__##x > #endif > > and then we can just use your "Make cpu_single_env thread-local" > patch as-is: > > http://git.linaro.org/gitweb?p=people/pmaydell/qemu-arm.git;a=commitdiff;h=b674559fc8a67ae7d30fe3ab3062d5855ac77d2d > > (for that matter we could apply the "Prepare Windows port for > thread-local cpu_single_env" patch too, but that's not a requirement.) > > -- PMM -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux