On 5/8/2026 5:54 PM, Pierrick Bouvier wrote:
> Instead of defining a class_init per class, just use a common
> constructor and set class_data to corresponding TargetInfo structure.
> 
> Suggested-by: Richard Henderson <[email protected]>
> Signed-off-by: Pierrick Bouvier <[email protected]>
> ---
>  include/qemu/target-info-init.h | 14 ++------------
>  include/qemu/target-info-qom.h  |  1 +
>  target-info-qom.c               |  6 ++++++
>  3 files changed, 9 insertions(+), 12 deletions(-)
> 
> diff --git a/include/qemu/target-info-init.h b/include/qemu/target-info-init.h
> index 176fd975a16..3945f2998e0 100644
> --- a/include/qemu/target-info-init.h
> +++ b/include/qemu/target-info-init.h
> @@ -37,8 +37,6 @@ const TargetInfo *target_info(void)     \
>  #include "qemu/target-info-qom.h"
>  #include "qom/object.h"
>  
> -#define TYPE_TARGET_INFO_TARGET TYPE_TARGET_INFO"-"TARGET_NAME
> -
>  typedef struct TargetInfoQomTarget {
>      TargetInfoQom parent;
>  } TargetInfoQomTarget;
> @@ -47,24 +45,16 @@ typedef struct TargetInfoQomTargetClass {
>      TargetInfoQomClass parent_class;
>  } TargetInfoQomTargetClass;
>  
> -OBJECT_DECLARE_TYPE(TargetInfoQomTarget, TargetInfoQomTargetClass, 
> TARGET_INFO_TARGET)
> -
>  #define target_info_init(ti_var)                                            \
> -static void target_info_qom_class_init(ObjectClass *oc, const void * data)  \
> -{                                                                           \
> -    TargetInfoQomTargetClass *klass = TARGET_INFO_TARGET_CLASS(oc);         \
> -    klass->parent_class.target_info = &ti_var;                              \
> -}                                                                           \
> -                                                                            \
>  static const TypeInfo target_info_qom_target_type_info = {                  \
> -    .name = TYPE_TARGET_INFO_TARGET,                                        \
> +    .name =  TYPE_TARGET_INFO"-"TARGET_NAME,                                \
>      .parent = TYPE_TARGET_INFO,                                             \
>      .instance_size = sizeof(TargetInfoQomTarget),                           \
>      .class_size = sizeof(TargetInfoQomTargetClass),                         \
>      .class_init = target_info_qom_class_init,                               \
> +    .class_data = &ti_var,                                                  \
>      .abstract = false,                                                      \
>  };                                                                          \
> -                                                                            \
>  DEFINE_TARGET_INFO_TYPE(target_info_qom_target_type_info)
>  
>  #endif /* CONFIG_USER_ONLY */
> diff --git a/include/qemu/target-info-qom.h b/include/qemu/target-info-qom.h
> index 91be415ed33..a37c3e101e0 100644
> --- a/include/qemu/target-info-qom.h
> +++ b/include/qemu/target-info-qom.h
> @@ -25,6 +25,7 @@ typedef struct TargetInfoQomClass {
>  
>  OBJECT_DECLARE_TYPE(TargetInfoQom, TargetInfoQomClass, TARGET_INFO)
>  
> +void target_info_qom_class_init(ObjectClass *oc, const void * data);
>  void target_info_qom_set_target(void);
>  
>  #endif /* QEMU_TARGET_INFO_QOM_H */
> diff --git a/target-info-qom.c b/target-info-qom.c
> index cc470b3b4d6..5b0498ca654 100644
> --- a/target-info-qom.c
> +++ b/target-info-qom.c
> @@ -37,6 +37,12 @@ static const TypeInfo target_info_parent_type = {
>  
>  DEFINE_TARGET_INFO_TYPE(target_info_parent_type)
>  
> +void target_info_qom_class_init(ObjectClass *oc, const void * data)
> +{
> +    TargetInfoQomClass *klass = TARGET_INFO_CLASS(oc);
> +    klass->target_info = data;
> +}
> +
>  static const TargetInfo *target_info_ptr;
>  
>  const TargetInfo *target_info(void)

This patch can be squashed with 3, but I thought it might be better for
review to keep it on top for now.

Regards,
Pierrick

Reply via email to