This commit may broken the "vendor=" configuration. For instance, the hypervisor CPU vendor is AMD.
I am going to use "-cpu Skylake-Server,vendor=GenuineIntel". Because of the commit, the vendor is still AMD. [root@vm ~]# cpuid -1 -l 0x0 CPU: vendor_id = "AuthenticAMD" If I revert this patch, the vendor because the expected Intel. [root@vm ~]# cpuid -1 -l 0x0 CPU: vendor_id = "GenuineIntel" Thank you very much! Dongli Zhang On 5/20/25 4:05 AM, Paolo Bonzini wrote: > Currently, the instance_post_init calls are performed from the leaf > class and all the way up to Object. This is incorrect because the > leaf class cannot observe property values applied by the superclasses; > for example, a compat property will be set on a device *after* > the class's post_init callback has run. > > In particular this makes it impossible for implementations of > accel_cpu_instance_init() to operate based on the actual values of > the properties, though it seems that cxl_dsp_instance_post_init and > rp_instance_post_init might have similar issues. > > Follow instead the same order as instance_init, starting with Object > and running the child class's instance_post_init after the parent. > > Reviewed-by: Philippe Mathieu-Daudé <phi...@linaro.org> > Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > include/qom/object.h | 3 ++- > qom/object.c | 8 ++++---- > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/include/qom/object.h b/include/qom/object.h > index 1d5b0337242..26df6137b91 100644 > --- a/include/qom/object.h > +++ b/include/qom/object.h > @@ -445,7 +445,8 @@ struct Object > * class will have already been initialized so the type is only responsible > * for initializing its own members. > * @instance_post_init: This function is called to finish initialization of > - * an object, after all @instance_init functions were called. > + * an object, after all @instance_init functions were called, as well as > + * @instance_post_init functions for the parent classes. > * @instance_finalize: This function is called during object destruction. > This > * is called before the parent @instance_finalize function has been called. > * An object should only free the members that are unique to its type in > this > diff --git a/qom/object.c b/qom/object.c > index 7b013f40a0c..1856bb36c74 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -431,13 +431,13 @@ static void object_init_with_type(Object *obj, TypeImpl > *ti) > > static void object_post_init_with_type(Object *obj, TypeImpl *ti) > { > - if (ti->instance_post_init) { > - ti->instance_post_init(obj); > - } > - > if (type_has_parent(ti)) { > object_post_init_with_type(obj, type_get_parent(ti)); > } > + > + if (ti->instance_post_init) { > + ti->instance_post_init(obj); > + } > } > > bool object_apply_global_props(Object *obj, const GPtrArray *props,