diff --git a/cpu-defs.h b/cpu-defs.h index f49e9500a9..d0dd781046 100644 --- a/cpu-defs.h +++ b/cpu-defs.h @@ -151,14 +151,6 @@ typedef struct CPUWatchpoint { QTAILQ_ENTRY(CPUWatchpoint) entry; } CPUWatchpoint; -#ifdef _WIN32 -#define CPU_COMMON_THREAD \ - void *hThread; - -#else -#define CPU_COMMON_THREAD -#endif - #define CPU_TEMP_BUF_NLONGS 128 #define CPU_COMMON \ struct TranslationBlock *current_tb; /* currently executing TB */ \ @@ -217,7 +209,6 @@ typedef struct CPUWatchpoint { uint32_t stop; /* Stop request */ \ uint32_t stopped; /* Artificially stopped */ \ struct QemuThread *thread; \ - CPU_COMMON_THREAD \ struct QemuCond *halt_cond; \ int thread_kicked; \ struct qemu_work_item *queued_work_first, *queued_work_last; \ diff --git a/cpus.c b/cpus.c index 756e6245fd..7042fb5837 100644 --- a/cpus.c +++ b/cpus.c @@ -852,9 +852,10 @@ static void qemu_cpu_kick_thread(CPUArchState *env) } #else /* _WIN32 */ if (!qemu_cpu_is_self(env)) { - SuspendThread(env->hThread); + CPUState *cpu = ENV_GET_CPU(env); + SuspendThread(cpu->hThread); cpu_signal(0); - ResumeThread(env->hThread); + ResumeThread(cpu->hThread); } #endif } @@ -974,6 +975,9 @@ void resume_all_vcpus(void) static void qemu_tcg_init_vcpu(void *_env) { CPUArchState *env = _env; +#ifdef _WIN32 + CPUState *cpu = ENV_GET_CPU(env); +#endif /* share a single thread for all cpus with TCG */ if (!tcg_cpu_thread) { @@ -984,7 +988,7 @@ static void qemu_tcg_init_vcpu(void *_env) qemu_thread_create(env->thread, qemu_tcg_cpu_thread_fn, env, QEMU_THREAD_JOINABLE); #ifdef _WIN32 - env->hThread = qemu_thread_get_handle(env->thread); + cpu->hThread = qemu_thread_get_handle(env->thread); #endif while (env->created == 0) { qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex); diff --git a/include/qemu/cpu.h b/include/qemu/cpu.h index 78b65b35fc..5d52e1cd54 100644 --- a/include/qemu/cpu.h +++ b/include/qemu/cpu.h @@ -21,6 +21,7 @@ #define QEMU_CPU_H #include "qemu/object.h" +#include "qemu-thread.h" /** * SECTION:cpu @@ -61,6 +62,10 @@ struct CPUState { Object parent_obj; /*< public >*/ +#ifdef _WIN32 + HANDLE hThread; +#endif + /* TODO Move common fields from CPUArchState here. */ };