Am 27.10.2011 17:04, schrieb Andreas Färber: > 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. >> > > [Paolo's SoB missing] > >> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> >> --- >> qemu-tls.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 51 insertions(+), 0 deletions(-) >> create mode 100644 qemu-tls.h >> >> 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 <pbonz...@redhat.com> >> + * Peter Maydell <peter.mayd...@linaro.org> >> + * >> + * 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 along >> + * with this program; if not, see <http://www.gnu.org/licenses/>. >> + */ >> + >> +#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-user >> + * - 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.
Reviewed-by: Andreas Färber <afaer...@suse.de> -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg