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
