From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:37264) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJRVi-0000Vb-GS for qemu-devel@nongnu.org; Thu, 27 Oct 2011 11:04:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RJRVc-0001OV-IT for qemu-devel@nongnu.org; Thu, 27 Oct 2011 11:04:50 -0400 Received: from cantor2.suse.de ([195.135.220.15]:34974 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJRVc-0001ON-9X for qemu-devel@nongnu.org; Thu, 27 Oct 2011 11:04:44 -0400 Message-ID: <4EA97304.9080500@suse.de> Date: Thu, 27 Oct 2011 17:04:36 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1319715472-16286-1-git-send-email-peter.maydell@linaro.org> <1319715472-16286-2-git-send-email-peter.maydell@linaro.org> In-Reply-To: <1319715472-16286-2-git-send-email-peter.maydell@linaro.org> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 1/3] qemu-tls.h: Add abstraction layer for TLS variables List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Paolo Bonzini , patches@linaro.org, "Dr. David Alan Gilbert" , qemu-devel@nongnu.org, Jan Kiszka Am 27.10.2011 13:37, schrieb Peter Maydell: > Add an abstraction layer for defining and using thread-local > variables. For the moment this is implemented only for Linux, > which means they can only be used in restricted circumstances. > The abstraction layer allows us to add POSIX and Win32 support > later. >=20 [Paolo's SoB missing] > Signed-off-by: Peter Maydell > --- > qemu-tls.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 51 insertions(+), 0 deletions(-) > create mode 100644 qemu-tls.h >=20 > diff --git a/qemu-tls.h b/qemu-tls.h > new file mode 100644 > index 0000000..d96a159 > --- /dev/null > +++ b/qemu-tls.h > @@ -0,0 +1,51 @@ > +/* > + * Abstraction layer for defining and using TLS variables > + * > + * Copyright (c) 2011 Red Hat, Inc, Linaro Limited The concatenation looks kind of funny. ;) > + * > + * Authors: > + * Paolo Bonzini > + * Peter Maydell > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License a= long > + * with this program; if not, see . > + */ > + > +#ifndef QEMU_TLS_GCC_H > +#define QEMU_TLS_GCC_H Extra _GCC. But does no harm. > + > +/* Per-thread variables. Note that we only have implementations > + * which are really thread-local on Linux; the dummy implementations > + * define plain global variables. > + * > + * This means that for the moment use should be restricted to > + * per-VCPU variables, which are OK because: > + * - the only -user mode supporting multiple VCPU threads is linux-us= er > + * - TCG system mode is single-threaded regarding VCPUs > + * - KVM system mode is multi-threaded but limited to Linux > + * > + * TODO: proper implementations via Win32 .tls sections and > + * POSIX pthread_getspecific. > + */ > +#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 which define plain global variables */ > +#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 > + > +#endif Looks okay to me. I assume __typeof__() is a GCCism, indicated by ..._GCC_H, to ensure type is actually a valid type? Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg