@@ -77,16 +77,24 @@ static bool cpu_thread_is_idle(CPUState *cpu)
return true;
}
-static bool all_cpu_threads_idle(void)
+static void one_cpu_thread_idle(CPUState *cpu, void *data)
{
- CPUArchState *env;
+ bool *all_idle = data;
- for (env = first_cpu; env != NULL; env = env->next_cpu) {
- if (!cpu_thread_is_idle(ENV_GET_CPU(env))) {
- return false;
- }
+ if (!*all_idle) {
+ return;
}
- return true;
+ if (!cpu_thread_is_idle(cpu)) {
+ *all_idle = false;
+ }
+}
+
+static bool all_cpu_threads_idle(void)
+{
+ bool ret = true;
+
+ qemu_for_each_cpu(one_cpu_thread_idle, &ret);
+ return ret;
}
/***********************************************************/
Signed-off-by: Andreas Färber <afaerber@suse.de> --- cpus.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)