On 18/08/2026 12:10, Marc-André Lureau wrote:

Wire up the new qapi-type field in all four QMP handlers that return
ObjectPropertyInfo or ObjectPropertyValue: qom-list, qom-list-get,
device-list-properties, and qom-list-properties.

When an ObjectProperty has a qapi_type set, the masked QAPI type name
is copied into the response, allowing clients to cross-reference with
query-qmp-schema.

No property has it yet, the following changes will populate it.

Reviewed-by: Markus Armbruster <[email protected]>
Signed-off-by: Marc-André Lureau <[email protected]>
---
  qom/qom-qmp-cmds.c | 32 +++++++++++++++++++-------------
  1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
index 330895361d47..f9e6d4371cc5 100644
--- a/qom/qom-qmp-cmds.c
+++ b/qom/qom-qmp-cmds.c
@@ -25,9 +25,22 @@
  #include "qapi/qobject-input-visitor.h"
  #include "qapi/qobject-output-visitor.h"
  #include "qemu/cutils.h"
+#include "qapi/qapi-type-info.h"
  #include "qom/object_interfaces.h"
  #include "qom/qom-qobject.h"
+static ObjectPropertyInfo *qom_property_info(ObjectProperty *prop)
+{
+    ObjectPropertyInfo *info = g_new0(ObjectPropertyInfo, 1);
+
+    info->name = g_strdup(prop->name);
+    info->type = g_strdup(prop->type);
+    if (prop->qapi_type) {
+        info->qapi_type = g_strdup(prop->qapi_type->masked_name);
+    }
+    return info;
+}

Any reason not to add info->description here? It seems to be set the same way in both cases below.

+
  static Object *qom_resolve_path(const char *path, Error **errp)
  {
      bool ambiguous = false;
@@ -58,12 +71,7 @@ ObjectPropertyInfoList *qmp_qom_list(const char *path, Error 
**errp)
object_property_iter_init(&iter, obj);
      while ((prop = object_property_iter_next(&iter))) {
-        ObjectPropertyInfo *value = g_new0(ObjectPropertyInfo, 1);
-
-        QAPI_LIST_PREPEND(props, value);
-
-        value->name = g_strdup(prop->name);
-        value->type = g_strdup(prop->type);
+        QAPI_LIST_PREPEND(props, qom_property_info(prop));
      }
return props;
@@ -78,6 +86,9 @@ static void qom_list_add_property_value(Object *obj, 
ObjectProperty *prop,
item->name = g_strdup(prop->name);
      item->type = g_strdup(prop->type);
+    if (prop->qapi_type) {
+        item->qapi_type = g_strdup(prop->qapi_type->masked_name);
+    }
      item->value = object_property_get_qobject(obj, prop->name, NULL);
  }
@@ -218,9 +229,7 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
              continue;
          }
- info = g_new0(ObjectPropertyInfo, 1);
-        info->name = g_strdup(prop->name);
-        info->type = g_strdup(prop->type);
+        info = qom_property_info(prop);
          info->description = g_strdup(prop->description);
          info->default_value = qobject_ref(prop->defval);
@@ -261,11 +270,8 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const char *typename,
          object_property_iter_init(&iter, obj);
      }
      while ((prop = object_property_iter_next(&iter))) {
-        ObjectPropertyInfo *info;
+        ObjectPropertyInfo *info = qom_property_info(prop);
- info = g_malloc0(sizeof(*info));
-        info->name = g_strdup(prop->name);
-        info->type = g_strdup(prop->type);
          info->description = g_strdup(prop->description);
          info->default_value = qobject_ref(prop->defval);

ATB,

Mark.


Reply via email to