From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YCAZg-0002TE-BU for qemu-devel@nongnu.org; Fri, 16 Jan 2015 12:20:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YCAZa-0003mN-3D for qemu-devel@nongnu.org; Fri, 16 Jan 2015 12:20:44 -0500 Received: from greensocs.com ([178.33.234.66]:54842) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YCAZZ-0003l1-B5 for qemu-devel@nongnu.org; Fri, 16 Jan 2015 12:20:37 -0500 From: fred.konrad@greensocs.com Date: Fri, 16 Jan 2015 18:19:54 +0100 Message-Id: <1421428797-23697-8-git-send-email-fred.konrad@greensocs.com> In-Reply-To: <1421428797-23697-1-git-send-email-fred.konrad@greensocs.com> References: <1421428797-23697-1-git-send-email-fred.konrad@greensocs.com> Subject: [Qemu-devel] [RFC 07/10] tcg: remove tcg_halt_cond global variable. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, mttcg@listserver.greensocs.com Cc: peter.maydell@linaro.org, jan.kiszka@siemens.com, mark.burton@greensocs.com, agraf@suse.de, pbonzini@redhat.com, fred.konrad@greensocs.com From: KONRAD Frederic This removes tcg_halt_cond global variable. We need one QemuCond per virtual cpu for multithread TCG. Signed-off-by: KONRAD Frederic --- cpus.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/cpus.c b/cpus.c index 2edb5cd..91a48f2 100644 --- a/cpus.c +++ b/cpus.c @@ -796,7 +796,6 @@ static bool iothread_requesting_mutex; static QemuThread io_thread; static QemuThread *tcg_cpu_thread; -static QemuCond *tcg_halt_cond; /* cpu creation */ static QemuCond qemu_cpu_cond; @@ -902,15 +901,13 @@ static void qemu_wait_io_event_common(CPUState *cpu) 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()) { /* Start accounting real time to the virtual clock if the CPUs are idle. */ 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) { @@ -1030,7 +1027,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) /* wait for initial kick-off after machine start */ while (QTAILQ_FIRST(&cpus)->stopped) { - qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex); + qemu_cond_wait(QTAILQ_FIRST(&cpus)->halt_cond, &qemu_global_mutex); /* process any pending work */ CPU_FOREACH(cpu) { @@ -1048,7 +1045,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) qemu_clock_notify(QEMU_CLOCK_VIRTUAL); } } - qemu_tcg_wait_io_event(); + qemu_tcg_wait_io_event(QTAILQ_FIRST(&cpus)); } return NULL; @@ -1214,12 +1211,12 @@ static void qemu_tcg_init_vcpu(CPUState *cpu) tcg_cpu_address_space_init(cpu, cpu->as); + cpu->halt_cond = g_malloc0(sizeof(QemuCond)); + qemu_cond_init(cpu->halt_cond); + /* share a single thread for all cpus with TCG */ if (!tcg_cpu_thread) { cpu->thread = g_malloc0(sizeof(QemuThread)); - cpu->halt_cond = g_malloc0(sizeof(QemuCond)); - qemu_cond_init(cpu->halt_cond); - tcg_halt_cond = cpu->halt_cond; snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG", cpu->cpu_index); qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn, @@ -1233,7 +1230,6 @@ static void qemu_tcg_init_vcpu(CPUState *cpu) tcg_cpu_thread = cpu->thread; } else { cpu->thread = tcg_cpu_thread; - cpu->halt_cond = tcg_halt_cond; } } -- 1.9.0