Signed-off-by: Andreas Färber <afaer...@suse.de>
---
 exec.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/exec.c b/exec.c
index 91618fb..d2e790c 100644
--- a/exec.c
+++ b/exec.c
@@ -262,20 +262,29 @@ static const VMStateDescription vmstate_cpu_common = {
 #define vmstate_cpu_common vmstate_dummy
 #endif
 
-CPUState *qemu_get_cpu(int index)
+typedef struct GetCPUData {
+    int index;
+    CPUState *ret;
+} GetCPUData;
+
+static void qemu_get_one_cpu(CPUState *cpu, void *data)
 {
-    CPUArchState *env = first_cpu;
-    CPUState *cpu = NULL;
+    GetCPUData *s = data;
 
-    while (env) {
-        cpu = ENV_GET_CPU(env);
-        if (cpu->cpu_index == index) {
-            break;
-        }
-        env = env->next_cpu;
+    if (cpu->cpu_index == s->index) {
+        s->ret = cpu;
     }
+}
+
+CPUState *qemu_get_cpu(int index)
+{
+    GetCPUData s = {
+        .index = index,
+        .ret = NULL,
+    };
 
-    return env ? cpu : NULL;
+    qemu_for_each_cpu(qemu_get_one_cpu, &s);
+    return s.ret;
 }
 
 void qemu_for_each_cpu(void (*func)(CPUState *cpu, void *data), void *data)
-- 
1.8.1.4


Reply via email to