cpus: remove tcg_halt_cond and tcg_cpu_thread globals

This hides the tcg_halt_cond and tcg_cpu_thread global variables
inside qemu_tcg_init_vcpu.  Multi-threaded TCG will need one
QemuCond and one QemuThread per virtual cpu, so it's preferrable
to use cpu->halt_cond and cpu->thread.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
Message-Id: <1439220437-23957-9-git-send-email-fred.konrad@greensocs.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
KONRAD Frederic 2015-08-10 17:27:06 +02:00 committed by Paolo Bonzini
parent 376692b9dc
commit d5f8d61390
1 changed files with 6 additions and 9 deletions

15
cpus.c
View File

@ -786,9 +786,6 @@ static unsigned iothread_requesting_mutex;
static QemuThread io_thread; static QemuThread io_thread;
static QemuThread *tcg_cpu_thread;
static QemuCond *tcg_halt_cond;
/* cpu creation */ /* cpu creation */
static QemuCond qemu_cpu_cond; static QemuCond qemu_cpu_cond;
/* system init */ /* system init */
@ -907,15 +904,13 @@ static void qemu_wait_io_event_common(CPUState *cpu)
cpu->thread_kicked = false; cpu->thread_kicked = false;
} }
static void qemu_tcg_wait_io_event(void) static void qemu_tcg_wait_io_event(CPUState *cpu)
{ {
CPUState *cpu;
while (all_cpu_threads_idle()) { while (all_cpu_threads_idle()) {
/* Start accounting real time to the virtual clock if the CPUs /* Start accounting real time to the virtual clock if the CPUs
are idle. */ are idle. */
qemu_clock_warp(QEMU_CLOCK_VIRTUAL); qemu_clock_warp(QEMU_CLOCK_VIRTUAL);
qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex); qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
} }
while (iothread_requesting_mutex) { while (iothread_requesting_mutex) {
@ -1040,7 +1035,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
/* wait for initial kick-off after machine start */ /* wait for initial kick-off after machine start */
while (first_cpu->stopped) { while (first_cpu->stopped) {
qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex); qemu_cond_wait(first_cpu->halt_cond, &qemu_global_mutex);
/* process any pending work */ /* process any pending work */
CPU_FOREACH(cpu) { CPU_FOREACH(cpu) {
@ -1061,7 +1056,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
qemu_clock_notify(QEMU_CLOCK_VIRTUAL); qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
} }
} }
qemu_tcg_wait_io_event(); qemu_tcg_wait_io_event(QTAILQ_FIRST(&cpus));
} }
return NULL; return NULL;
@ -1224,6 +1219,8 @@ void resume_all_vcpus(void)
static void qemu_tcg_init_vcpu(CPUState *cpu) static void qemu_tcg_init_vcpu(CPUState *cpu)
{ {
char thread_name[VCPU_THREAD_NAME_SIZE]; char thread_name[VCPU_THREAD_NAME_SIZE];
static QemuCond *tcg_halt_cond;
static QemuThread *tcg_cpu_thread;
tcg_cpu_address_space_init(cpu, cpu->as); tcg_cpu_address_space_init(cpu, cpu->as);