target-i386: Move TCG initialization to realize time
authorEduardo Habkost <ehabkost@redhat.com>
Fri, 13 Feb 2015 00:57:44 +0000 (22:57 -0200)
committerEduardo Habkost <ehabkost@redhat.com>
Mon, 23 May 2016 22:47:37 +0000 (19:47 -0300)
QOM instance_init functions are not supposed to have any side-effects,
as new objects may be created at any moment for querying property
information (see qmp_device_list_properties()).

Move TCG initialization to realize time so it won't be called when just
doing object_new() on a X86CPU subclass.

Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
target-i386/cpu.c

index 2dc3d3cf3bbc933f710ebb246605ab6aba7b3d14..9ac2e5915110326994a67107844754a954a31d7b 100644 (file)
@@ -2902,6 +2902,10 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
     }
 
 
+    if (tcg_enabled()) {
+        tcg_x86_init();
+    }
+
 #ifndef CONFIG_USER_ONLY
     qemu_register_reset(x86_cpu_machine_reset_cb, cpu);
 
@@ -3136,11 +3140,6 @@ static void x86_cpu_initfn(Object *obj)
     }
 
     x86_cpu_load_def(cpu, xcc->cpu_def, &error_abort);
-
-    /* init various static tables used in TCG mode */
-    if (tcg_enabled()) {
-        tcg_x86_init();
-    }
 }
 
 static int64_t x86_cpu_get_arch_id(CPUState *cs)