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