From: "Andreas Färber" <afaerber@suse.de>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Ed Maste <emaste@freebsd.org>,
qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [Qemu-devel] [PATCH 1/2] exec: do not use qemu/tls.h
Date: Mon, 01 Jul 2013 12:47:39 +0200 [thread overview]
Message-ID: <51D15E4B.3010504@suse.de> (raw)
In-Reply-To: <1372671341-19855-2-git-send-email-stefanha@redhat.com>
Am 01.07.2013 11:35, schrieb Stefan Hajnoczi:
> From: Paolo Bonzini <pbonzini@redhat.com>
>
> The next patch will change qemu/tls.h to support more platforms, but at
> some performance cost. Declare cpu_single_env directly instead of using
> the tls.h abstractions.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> exec.c | 10 ++++++++--
> include/exec/cpu-all.h | 14 +++++++++++---
> include/qemu/tls.h | 52 --------------------------------------------------
> 3 files changed, 19 insertions(+), 57 deletions(-)
> delete mode 100644 include/qemu/tls.h
>
> diff --git a/exec.c b/exec.c
> index c49806c..02263db 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -70,9 +70,15 @@ static MemoryRegion io_mem_unassigned;
> #endif
>
> CPUArchState *first_cpu;
> +
> /* current CPU in the current thread. It is only valid inside
> - cpu_exec() */
> -DEFINE_TLS(CPUArchState *,cpu_single_env);
> + * cpu_exec(). See comment in include/exec/cpu-all.h. */
> +#if defined CONFIG_KVM || (defined CONFIG_USER_ONLY && defined CONFIG_USE_NPTL)
> +__thread CPUArchState *cpu_single_env;
> +#else
> +CPUArchState *cpu_single_env;
> +#endif
As indicated elsewhere, this conflicts with my pending CPUState part 10
series, which moves, renames and changes type of cpu_single_env:
http://patchwork.ozlabs.org/patch/254825/
The latest version received no further feedback after finding a better
name than cpu_single_cpu (current_cpu), first_cpu/next_cpu is ack'ed and
so are the prereqs for current_cpu, so I will pull that in as soon as
potential conflicts with ppc and memory pulls are sorted out, since
pretty invasive and a milestone towards getting rid of CPUArchState.
I'd be happy to help with rebasing this afterwards when needed.
Regards,
Andreas
> +
> /* 0 = Do not count executed instructions.
> 1 = Precise instruction counting.
> 2 = Adaptive rate instruction counting. */
> diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
> index 35bdf85..7e8df70 100644
> --- a/include/exec/cpu-all.h
> +++ b/include/exec/cpu-all.h
> @@ -20,7 +20,6 @@
> #define CPU_ALL_H
>
> #include "qemu-common.h"
> -#include "qemu/tls.h"
> #include "exec/cpu-common.h"
> #include "qemu/thread.h"
>
> @@ -358,8 +357,17 @@ CPUArchState *cpu_copy(CPUArchState *env);
> void QEMU_NORETURN cpu_abort(CPUArchState *env, const char *fmt, ...)
> GCC_FMT_ATTR(2, 3);
> extern CPUArchState *first_cpu;
> -DECLARE_TLS(CPUArchState *,cpu_single_env);
> -#define cpu_single_env tls_var(cpu_single_env)
> +
> +/* This is thread-local depending on __linux__ 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
> + */
> +#if defined CONFIG_KVM || (defined CONFIG_USER_ONLY && defined CONFIG_USE_NPTL)
> +extern __thread CPUArchState *cpu_single_env;
> +#else
> +extern CPUArchState *cpu_single_env;
> +#endif
>
> /* Flags for use in ENV->INTERRUPT_PENDING.
>
> diff --git a/include/qemu/tls.h b/include/qemu/tls.h
> deleted file mode 100644
> index b92ea9d..0000000
> --- a/include/qemu/tls.h
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -/*
> - * Abstraction layer for defining and using TLS variables
> - *
> - * Copyright (c) 2011 Red Hat, Inc
> - * Copyright (c) 2011 Linaro Limited
> - *
> - * Authors:
> - * Paolo Bonzini <pbonzini@redhat.com>
> - * Peter Maydell <peter.maydell@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_H
> -#define QEMU_TLS_H
> -
> -/* 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 tls_var(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 tls_var(x) tls__##x
> -#endif
> -
> -#endif
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
next prev parent reply other threads:[~2013-07-01 10:47 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 9:35 [Qemu-devel] [PATCH 0/2] Fast Thread-Local Storage support Stefan Hajnoczi
2013-07-01 9:35 ` [Qemu-devel] [PATCH 1/2] exec: do not use qemu/tls.h Stefan Hajnoczi
2013-07-01 9:51 ` Peter Maydell
2013-07-01 10:15 ` Paolo Bonzini
2013-07-01 10:47 ` Andreas Färber [this message]
2013-07-01 9:35 ` [Qemu-devel] [PATCH 2/2] qemu-thread: add TLS wrappers Stefan Hajnoczi
2013-07-01 9:54 ` Peter Maydell
2013-07-01 10:14 ` Paolo Bonzini
2013-07-04 16:27 ` Jan Kiszka
2013-07-04 16:38 ` Paolo Bonzini
2013-07-01 12:34 ` Stefan Hajnoczi
2013-07-01 18:52 ` Ed Maste
2013-07-01 19:25 ` Peter Maydell
2013-07-01 20:00 ` Ed Maste
2013-07-01 20:30 ` Richard Henderson
2013-07-02 7:54 ` Paolo Bonzini
2013-07-02 7:50 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51D15E4B.3010504@suse.de \
--to=afaerber@suse.de \
--cc=aliguori@us.ibm.com \
--cc=emaste@freebsd.org \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.