File:  [Qemu by Fabrice Bellard] / qemu / qemu-tls.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 19:17:54 2018 UTC (3 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu1001, HEAD
qemu 1.0.1

    1: /*
    2:  * Abstraction layer for defining and using TLS variables
    3:  *
    4:  * Copyright (c) 2011 Red Hat, Inc
    5:  * Copyright (c) 2011 Linaro Limited
    6:  *
    7:  * Authors:
    8:  *  Paolo Bonzini <pbonzini@redhat.com>
    9:  *  Peter Maydell <peter.maydell@linaro.org>
   10:  *
   11:  * This program is free software; you can redistribute it and/or
   12:  * modify it under the terms of the GNU General Public License as
   13:  * published by the Free Software Foundation; either version 2 of
   14:  * the License, or (at your option) any later version.
   15:  *
   16:  * This program is distributed in the hope that it will be useful,
   17:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   18:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   19:  * GNU General Public License for more details.
   20:  *
   21:  * You should have received a copy of the GNU General Public License along
   22:  * with this program; if not, see <http://www.gnu.org/licenses/>.
   23:  */
   24: 
   25: #ifndef QEMU_TLS_H
   26: #define QEMU_TLS_H
   27: 
   28: /* Per-thread variables. Note that we only have implementations
   29:  * which are really thread-local on Linux; the dummy implementations
   30:  * define plain global variables.
   31:  *
   32:  * This means that for the moment use should be restricted to
   33:  * per-VCPU variables, which are OK because:
   34:  *  - the only -user mode supporting multiple VCPU threads is linux-user
   35:  *  - TCG system mode is single-threaded regarding VCPUs
   36:  *  - KVM system mode is multi-threaded but limited to Linux
   37:  *
   38:  * TODO: proper implementations via Win32 .tls sections and
   39:  * POSIX pthread_getspecific.
   40:  */
   41: #ifdef __linux__
   42: #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
   43: #define DEFINE_TLS(type, x)  __thread __typeof__(type) tls__##x
   44: #define get_tls(x)           tls__##x
   45: #else
   46: /* Dummy implementations which define plain global variables */
   47: #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x)
   48: #define DEFINE_TLS(type, x)  __typeof__(type) tls__##x
   49: #define get_tls(x)           tls__##x
   50: #endif
   51: 
   52: #endif

unix.superglobalmegacorp.com