[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 02/11] store thread-specific env information
From: |
Glauber Costa |
Subject: |
[Qemu-devel] [PATCH v2 02/11] store thread-specific env information |
Date: |
Tue, 1 Dec 2009 10:51:28 -0200 |
Since we'll have multiple cpu threads, at least for kvm, we need a way to store
and retrieve the CPUState associated with the current execution thread.
For the I/O thread, this will be NULL.
I am using pthread functions for that, for portability, but we could as well
use __thread keyword.
Signed-off-by: Glauber Costa <address@hidden>
---
vl.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/vl.c b/vl.c
index 44763af..321b18d 100644
--- a/vl.c
+++ b/vl.c
@@ -3434,6 +3434,24 @@ static void block_io_signals(void);
static void unblock_io_signals(void);
static int tcg_has_work(void);
+static pthread_key_t current_env;
+
+CPUState *qemu_get_current_env(void);
+CPUState *qemu_get_current_env(void)
+{
+ return pthread_getspecific(current_env);
+}
+
+static void qemu_set_current_env(CPUState *env)
+{
+ pthread_setspecific(current_env, env);
+}
+
+static void qemu_init_current_env(void)
+{
+ pthread_key_create(¤t_env, NULL);
+}
+
static int qemu_init_main_loop(void)
{
int ret;
@@ -3446,6 +3464,7 @@ static int qemu_init_main_loop(void)
qemu_mutex_init(&qemu_fair_mutex);
qemu_mutex_init(&qemu_global_mutex);
qemu_mutex_lock(&qemu_global_mutex);
+ qemu_init_current_env();
unblock_io_signals();
qemu_thread_self(&io_thread);
@@ -3484,6 +3503,8 @@ static void *kvm_cpu_thread_fn(void *arg)
block_io_signals();
qemu_thread_self(env->thread);
+ qemu_set_current_env(env);
+
if (kvm_enabled())
kvm_init_vcpu(env);
--
1.6.5.2
- [Qemu-devel] [PATCH v2 0/11], Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 01/11] Don't mess with halted state., Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 02/11] store thread-specific env information,
Glauber Costa <=
- [Qemu-devel] [PATCH v2 03/11] update halted state on mp_state sync, Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 04/11] qemu_flush_work for remote vcpu execution, Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 05/11] tell kernel about all registers instead of just mp_state, Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 06/11] flush state in migration post_load, Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 07/11] Don't call kvm cpu reset on initialization, Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 08/11] use cpu_kick instead of direct signalling., Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 09/11] Use per-cpu reset handlers., Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 10/11] Use __thread where available., Glauber Costa, 2009/12/01
- [Qemu-devel] [PATCH v2 11/11] remove smp restriction from kvm, Glauber Costa, 2009/12/01
- Re: [Qemu-devel] [PATCH v2 05/11] tell kernel about all registers instead of just mp_state, Gleb Natapov, 2009/12/02