vl: take iothread lock very early
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 3 Mar 2015 10:36:09 +0000 (11:36 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 3 Mar 2015 13:21:53 +0000 (13:21 +0000)
If the iothread lock isn't taken by the main thread, the RCU callbacks
might run concurrently with the main thread.  QEMU's not ready for that.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
vl.c

diff --git a/vl.c b/vl.c
index 5d13d2f..801d487 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -2767,6 +2767,9 @@ int main(int argc, char **argv, char **envp)
     FILE *vmstate_dump_file = NULL;
     Error *main_loop_err = NULL;
 
+    qemu_init_cpu_loop();
+    qemu_mutex_lock_iothread();
+
     atexit(qemu_run_exit_notifiers);
     error_set_progname(argv[0]);
     qemu_init_exec_dir(argv[0]);
@@ -4102,9 +4105,6 @@ int main(int argc, char **argv, char **envp)
 
     os_set_line_buffering();
 
-    qemu_init_cpu_loop();
-    qemu_mutex_lock_iothread();
-
 #ifdef CONFIG_SPICE
     /* spice needs the timers to be initialized by this point */
     qemu_spice_init();