From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MT22A-0007N5-68 for qemu-devel@nongnu.org; Mon, 20 Jul 2009 19:12:38 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MT225-0007L1-BD for qemu-devel@nongnu.org; Mon, 20 Jul 2009 19:12:37 -0400 Received: from [199.232.76.173] (port=54582 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MT225-0007Kt-4t for qemu-devel@nongnu.org; Mon, 20 Jul 2009 19:12:33 -0400 Received: from mx2.redhat.com ([66.187.237.31]:36438) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MT222-0007qx-VF for qemu-devel@nongnu.org; Mon, 20 Jul 2009 19:12:31 -0400 From: Glauber Costa Date: Mon, 20 Jul 2009 19:12:28 -0400 Message-Id: <1248131548-11428-1-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH] Provide a general purpose way of probing if cpus are stopped List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com We don't have anything that requires that in tree yet, but avi does. So Let's be nice with him, and provide him with those functions that diminish the amount of kvm-specific code. Signed-off-by: Glauber Costa --- cpu-all.h | 3 +++ exec.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/cpu-all.h b/cpu-all.h index df3aa2e..6801938 100644 --- a/cpu-all.h +++ b/cpu-all.h @@ -741,6 +741,9 @@ int page_get_flags(target_ulong address); void page_set_flags(target_ulong start, target_ulong end, int flags); int page_check_range(target_ulong start, target_ulong len, int flags); +int qemu_cpu_stopped(CPUState *env); +uint32_t qemu_cpus_running(void); + void cpu_exec_init_all(unsigned long tb_size); CPUState *cpu_copy(CPUState *env); CPUState *qemu_get_cpu(int cpu); diff --git a/exec.c b/exec.c index d6e5d3c..2e5f05a 100644 --- a/exec.c +++ b/exec.c @@ -32,6 +32,7 @@ #include #include +#include "sysemu.h" #include "cpu.h" #include "exec-all.h" #include "qemu-common.h" @@ -558,6 +559,27 @@ CPUState *qemu_get_cpu(int cpu) return env; } +int qemu_cpu_stopped(CPUState *env) +{ + return !vm_running || env->stopped; +} + +/* Returns the number of cpus that are in the stopped state. + * It is a 32-bit value, because if it weren't SGI would */ +uint32_t qemu_cpus_running(void) +{ + uint32_t count = 0; + + if (!vm_running) + return count; + + CPUState *penv = first_cpu; + while (penv) { + count += !penv->stopped; + } + return count; +} + void cpu_exec_init(CPUState *env) { CPUState **penv; -- 1.6.2.2