On 5/8/26 19:59, Pierrick Bouvier wrote:
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.

Mmm. You've missed the part about using class_base_init instead of class_init, so that you don't need the extern function declaration. See review of patch 3.


r~

Reply via email to