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,


Reply via email to