We have now the cpu_exec_realize() in realize, so the init part must be in init.
I've removed the cannot_destroy_with_object_finalize_yet field as unsafe references have been moved to cpu_exec_realize(). (tested with QOM command provided by commit 4c315c27 with "athlon-x86_64-cpu") CC: Eduardo Habkost <ehabk...@redhat.com> Signed-off-by: Laurent Vivier <lviv...@redhat.com> --- target-i386/cpu.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index b977130..4741dd6 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -3158,8 +3158,11 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) cpu->phys_bits = 32; } } - cpu_exec_init(cs); - cpu_exec_realize(cs, &error_abort); + cpu_exec_realize(cs, &local_err); + if (local_err != NULL) { + error_propagate(errp, local_err); + return; + } if (tcg_enabled()) { tcg_x86_init(); @@ -3365,6 +3368,7 @@ static void x86_cpu_initfn(Object *obj) FeatureWord w; cs->env_ptr = env; + cpu_exec_init(cs); object_property_add(obj, "family", "int", x86_cpuid_version_get_family, @@ -3538,11 +3542,6 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) cc->cpu_exec_exit = x86_cpu_exec_exit; dc->cannot_instantiate_with_device_add_yet = false; - /* - * Reason: x86_cpu_initfn() calls cpu_exec_init(), which saves the - * object in cpus -> dangling pointer after final object_unref(). - */ - dc->cannot_destroy_with_object_finalize_yet = true; } static const TypeInfo x86_cpu_type_info = { -- 2.7.4