From: Avi Kivity <[EMAIL PROTECTED]>

Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>

diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index 7a88cdd..f7a217a 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -389,6 +389,8 @@ static void kvm_add_signal(struct qemu_kvm_signal_table 
*sigtab, int signum)
 void kvm_init_new_ap(int cpu, CPUState *env)
 {
     pthread_create(&vcpu_info[cpu].thread, NULL, ap_main_loop, env);
+    /* FIXME: wait for thread to spin up */
+    usleep(200);
 }
 
 static void qemu_kvm_init_signal_tables(void)
@@ -408,9 +410,6 @@ static void qemu_kvm_init_signal_tables(void)
 
 int kvm_init_ap(void)
 {
-    CPUState *env = first_cpu;
-    int i;
-
 #ifdef TARGET_I386
     kvm_tpr_opt_setup();
 #endif
@@ -418,10 +417,6 @@ int kvm_init_ap(void)
     qemu_kvm_init_signal_tables();
 
     signal(SIG_IPI, sig_ipi_handler);
-    for (i = 0; i < smp_cpus; ++i) {
-        kvm_init_new_ap(i, env);
-        env = env->next_cpu;
-    }
     return 0;
 }
 
diff --git a/qemu/target-i386/helper2.c b/qemu/target-i386/helper2.c
index 29ed7b8..dbbf38c 100644
--- a/qemu/target-i386/helper2.c
+++ b/qemu/target-i386/helper2.c
@@ -119,6 +119,10 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
 #ifdef USE_KQEMU
     kqemu_init(env);
 #endif
+#ifdef USE_KVM
+    if (kvm_enabled())
+       kvm_init_new_ap(env->cpu_index, env);
+#endif
     return env;
 }
 
diff --git a/qemu/target-ia64/op_helper.c b/qemu/target-ia64/op_helper.c
index 8660b17..5dfa6fa 100644
--- a/qemu/target-ia64/op_helper.c
+++ b/qemu/target-ia64/op_helper.c
@@ -36,6 +36,7 @@ CPUState *cpu_ia64_init(char *cpu_model){
     if (kvm_enabled()) {
        kvm_qemu_init_env(env);
        env->ready_for_interrupt_injection = 1;
+       kvm_init_new_ap(env->cpu_index, env);
     }
     return env;
 }
diff --git a/qemu/target-ppc/helper.c b/qemu/target-ppc/helper.c
index 2a52dc6..e632787 100644
--- a/qemu/target-ppc/helper.c
+++ b/qemu/target-ppc/helper.c
@@ -2980,6 +2980,10 @@ CPUPPCState *cpu_ppc_init (const char *cpu_model)
     env->cpu_model_str = cpu_model;
     cpu_ppc_register_internal(env, def);
     cpu_ppc_reset(env);
+#ifdef USE_KVM
+    if (kvm_enabled())
+       kvm_init_new_ap(env->cpu_index, env);
+#endif
     return env;
 }
 
diff --git a/qemu/vl.c b/qemu/vl.c
index ca407e6..74be059 100644
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -9809,6 +9809,9 @@ int main(int argc, char **argv)
         }
     }
 
+    if (kvm_enabled())
+       kvm_init_ap();
+
     machine->init(ram_size, vga_ram_size, boot_devices, ds,
                   kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
 
@@ -9829,9 +9832,6 @@ int main(int argc, char **argv)
         qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
     }
 
-    if (kvm_enabled())
-       kvm_init_ap();
-
 #ifdef CONFIG_GDBSTUB
     if (use_gdbstub) {
         /* XXX: use standard host:port notation and modify options

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-commits mailing list
kvm-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-commits

Reply via email to