From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40659) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TBLHQ-0008Is-82 for qemu-devel@nongnu.org; Tue, 11 Sep 2012 03:53:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TBLHM-0007R4-3o for qemu-devel@nongnu.org; Tue, 11 Sep 2012 03:53:08 -0400 Received: from mail-ob0-f173.google.com ([209.85.214.173]:38954) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TBLHL-0007Gb-Ut for qemu-devel@nongnu.org; Tue, 11 Sep 2012 03:53:04 -0400 Received: by mail-ob0-f173.google.com with SMTP id ta14so286204obb.4 for ; Tue, 11 Sep 2012 00:53:03 -0700 (PDT) From: Liu Ping Fan Date: Tue, 11 Sep 2012 15:51:50 +0800 Message-Id: <1347349912-15611-10-git-send-email-qemulist@gmail.com> In-Reply-To: <1347349912-15611-1-git-send-email-qemulist@gmail.com> References: <1347349912-15611-1-git-send-email-qemulist@gmail.com> Subject: [Qemu-devel] [PATCH V3 09/11] vcpu: make QemuThread as tls to store thread-self info List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Jan Kiszka , Marcelo Tosatti , Avi Kivity , Anthony Liguori , Paolo Bonzini From: Liu Ping Fan We store the thread self info in QemuThread. Signed-off-by: Liu Ping Fan --- cpus.c | 1 + qemu-thread-posix.c | 7 +++++++ qemu-thread-posix.h | 2 ++ qemu-thread.h | 1 + vl.c | 4 ++++ 5 files changed, 15 insertions(+), 0 deletions(-) diff --git a/cpus.c b/cpus.c index e476a3c..4cd7f85 100644 --- a/cpus.c +++ b/cpus.c @@ -735,6 +735,7 @@ static void *qemu_kvm_cpu_thread_fn(void *arg) CPUState *cpu = ENV_GET_CPU(env); int r; + pthread_setspecific(qemu_thread_key, cpu->thread); qemu_mutex_lock(&qemu_global_mutex); qemu_thread_get_self(cpu->thread); env->thread_id = qemu_get_thread_id(); diff --git a/qemu-thread-posix.c b/qemu-thread-posix.c index 8fbabda..f448fcb 100644 --- a/qemu-thread-posix.c +++ b/qemu-thread-posix.c @@ -19,6 +19,8 @@ #include #include "qemu-thread.h" +pthread_key_t qemu_thread_key; + static void error_exit(int err, const char *msg) { fprintf(stderr, "qemu: %s: %s\n", msg, strerror(err)); @@ -151,6 +153,11 @@ void qemu_thread_get_self(QemuThread *thread) thread->thread = pthread_self(); } +void qemu_thread_key_create(void) +{ + pthread_key_create(&qemu_thread_key, NULL); +} + bool qemu_thread_is_self(QemuThread *thread) { return pthread_equal(pthread_self(), thread->thread); diff --git a/qemu-thread-posix.h b/qemu-thread-posix.h index ee4618e..2607b1c 100644 --- a/qemu-thread-posix.h +++ b/qemu-thread-posix.h @@ -14,4 +14,6 @@ struct QemuThread { pthread_t thread; }; +extern pthread_key_t qemu_thread_key; + #endif diff --git a/qemu-thread.h b/qemu-thread.h index 05fdaaf..4a6427d 100644 --- a/qemu-thread.h +++ b/qemu-thread.h @@ -46,4 +46,5 @@ void qemu_thread_get_self(QemuThread *thread); bool qemu_thread_is_self(QemuThread *thread); void qemu_thread_exit(void *retval); +void qemu_thread_key_create(void); #endif diff --git a/vl.c b/vl.c index 7c577fa..44e2783 100644 --- a/vl.c +++ b/vl.c @@ -149,6 +149,7 @@ int main(int argc, char **argv) #include "qemu-options.h" #include "qmp-commands.h" #include "main-loop.h" +#include "qemu-thread.h" #ifdef CONFIG_VIRTFS #include "fsdev/qemu-fsdev.h" #endif @@ -2342,6 +2343,7 @@ int qemu_init_main_loop(void) return main_loop_init(); } + int main(int argc, char **argv, char **envp) { int i; @@ -3483,6 +3485,8 @@ int main(int argc, char **argv, char **envp) exit(1); } + qemu_thread_key_create(); + os_set_line_buffering(); if (init_timer_alarm() < 0) { -- 1.7.4.4