From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:49818) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJ5Ad-000713-JL for qemu-devel@nongnu.org; Wed, 26 Oct 2011 11:13:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RJ5AY-0002Ww-V6 for qemu-devel@nongnu.org; Wed, 26 Oct 2011 11:13:35 -0400 Received: from thoth.sbs.de ([192.35.17.2]:25809) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJ5AY-0002Wa-KD for qemu-devel@nongnu.org; Wed, 26 Oct 2011 11:13:30 -0400 Message-ID: <4EA82395.20408@siemens.com> Date: Wed, 26 Oct 2011 17:13:25 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <20111003163352.GA22822@davesworkthinkpad> <4E89F62E.1020804@web.de> <87lit0n66z.fsf@ginnungagap.bsc.es> <4E8B41D8.3050502@web.de> <4E8C0275.50107@redhat.com> <4E8C0CA0.2010006@web.de> <4E8C217D.10800@redhat.com> <4EA81BB2.90904@redhat.com> <4EA82120.8060702@siemens.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Make cpu_single_env thread local (Linux only for now) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Paolo Bonzini , "agraf@suse.de" , "Dr. David Alan Gilbert" , "qemu-devel@nongnu.org" , "patches@linaro.org" On 2011-10-26 17:09, Peter Maydell wrote: > On 26 October 2011 16:02, Jan Kiszka wrote: >> On 2011-10-26 16:54, Peter Maydell wrote: >>> On 26 October 2011 15:39, Paolo Bonzini 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