[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/35] cpu: Move halt_cond to CPUState
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PATCH 15/35] cpu: Move halt_cond to CPUState |
Date: |
Wed, 31 Oct 2012 01:59:46 +0100 |
Signed-off-by: Andreas Färber <address@hidden>
---
cpu-defs.h | 1 -
cpus.c | 22 ++++++++++++----------
include/qemu/cpu.h | 1 +
3 Dateien geändert, 13 Zeilen hinzugefügt(+), 11 Zeilen entfernt(-)
diff --git a/cpu-defs.h b/cpu-defs.h
index 83bf108..76c76f6 100644
--- a/cpu-defs.h
+++ b/cpu-defs.h
@@ -205,7 +205,6 @@ typedef struct CPUWatchpoint {
/* user data */ \
void *opaque; \
\
- struct QemuCond *halt_cond; \
struct qemu_work_item *queued_work_first, *queued_work_last; \
const char *cpu_model_str; \
struct KVMState *kvm_state; \
diff --git a/cpus.c b/cpus.c
index 45877ee..5a80bfa 100644
--- a/cpus.c
+++ b/cpus.c
@@ -722,8 +722,10 @@ static void qemu_tcg_wait_io_event(void)
static void qemu_kvm_wait_io_event(CPUArchState *env)
{
+ CPUState *cpu = ENV_GET_CPU(env);
+
while (cpu_thread_is_idle(env)) {
- qemu_cond_wait(env->halt_cond, &qemu_global_mutex);
+ qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
}
qemu_kvm_eat_signals(env);
@@ -873,7 +875,7 @@ void qemu_cpu_kick(void *_env)
CPUArchState *env = _env;
CPUState *cpu = ENV_GET_CPU(env);
- qemu_cond_broadcast(env->halt_cond);
+ qemu_cond_broadcast(cpu->halt_cond);
if (!tcg_enabled() && !cpu->thread_kicked) {
qemu_cpu_kick_thread(cpu);
cpu->thread_kicked = true;
@@ -997,9 +999,9 @@ static void qemu_tcg_init_vcpu(void *_env)
/* share a single thread for all cpus with TCG */
if (!tcg_cpu_thread) {
cpu->thread = g_malloc0(sizeof(QemuThread));
- env->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(env->halt_cond);
- tcg_halt_cond = env->halt_cond;
+ cpu->halt_cond = g_malloc0(sizeof(QemuCond));
+ qemu_cond_init(cpu->halt_cond);
+ tcg_halt_cond = cpu->halt_cond;
qemu_thread_create(cpu->thread, qemu_tcg_cpu_thread_fn, env,
QEMU_THREAD_JOINABLE);
#ifdef _WIN32
@@ -1011,7 +1013,7 @@ static void qemu_tcg_init_vcpu(void *_env)
tcg_cpu_thread = cpu->thread;
} else {
cpu->thread = tcg_cpu_thread;
- env->halt_cond = tcg_halt_cond;
+ cpu->halt_cond = tcg_halt_cond;
}
}
@@ -1020,8 +1022,8 @@ static void qemu_kvm_start_vcpu(CPUArchState *env)
CPUState *cpu = ENV_GET_CPU(env);
cpu->thread = g_malloc0(sizeof(QemuThread));
- env->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(env->halt_cond);
+ cpu->halt_cond = g_malloc0(sizeof(QemuCond));
+ qemu_cond_init(cpu->halt_cond);
qemu_thread_create(cpu->thread, qemu_kvm_cpu_thread_fn, env,
QEMU_THREAD_JOINABLE);
while (!cpu->created) {
@@ -1034,8 +1036,8 @@ static void qemu_dummy_start_vcpu(CPUArchState *env)
CPUState *cpu = ENV_GET_CPU(env);
cpu->thread = g_malloc0(sizeof(QemuThread));
- env->halt_cond = g_malloc0(sizeof(QemuCond));
- qemu_cond_init(env->halt_cond);
+ cpu->halt_cond = g_malloc0(sizeof(QemuCond));
+ qemu_cond_init(cpu->halt_cond);
qemu_thread_create(cpu->thread, qemu_dummy_cpu_thread_fn, env,
QEMU_THREAD_JOINABLE);
while (!cpu->created) {
diff --git a/include/qemu/cpu.h b/include/qemu/cpu.h
index 4e62032..75e0f8d 100644
--- a/include/qemu/cpu.h
+++ b/include/qemu/cpu.h
@@ -69,6 +69,7 @@ struct CPUState {
#ifdef _WIN32
HANDLE hThread;
#endif
+ struct QemuCond *halt_cond;
bool thread_kicked;
bool created;
bool stop;
--
1.7.10.4
- [Qemu-devel] [PATCH 04/35] target-i386: Inline APIC cpu_env property setting, (continued)
- [Qemu-devel] [PATCH 04/35] target-i386: Inline APIC cpu_env property setting, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 01/35] target-i386: cpu_x86_register(): report error from property setter, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 02/35] target-i386: If x86_cpu_realize() failed, report error and do cleanup, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 03/35] target-i386: Initialize APIC at CPU level, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 09/35] cpu: Move created field to CPUState, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 08/35] cpus: Pass CPUState to qemu_cpu_kick_thread(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 13/35] cpus: Pass CPUState to cpu_is_stopped(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 06/35] target-i386: Pass X86CPU to cpu_x86_load_seg_cache_sipi(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 14/35] cpus: Pass CPUState to cpu_can_run(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 16/35] cpus: Pass CPUState to qemu_tcg_cpu_thread_fn, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 15/35] cpu: Move halt_cond to CPUState,
Andreas Färber <=
- [Qemu-devel] [PATCH 07/35] cpus: Pass CPUState to qemu_cpu_is_self(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 11/35] ppce500_spin: Store PowerPCCPU in SpinKick, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 05/35] apic: Store X86CPU in APICCommonState, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 18/35] ppc: Pass PowerPCCPU to {ppc6xx, ppc970, power7, ppc40x, ppce500}_set_irq(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 10/35] cpu: Move stop field to CPUState, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 12/35] cpu: Move stopped field to CPUState, Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 23/35] cpus: Pass CPUState to qemu_wait_io_event_common(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 17/35] cpus: Pass CPUState to qemu_tcg_init_vcpu(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 22/35] cpus: Pass CPUState to flush_queued_work(), Andreas Färber, 2012/10/30
- [Qemu-devel] [PATCH 21/35] cpu: Move queued_work_{first, last} to CPUState, Andreas Färber, 2012/10/30