From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Markus Armbruster" <armbru@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
"Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>
Subject: [PATCH v4 05/75] qapi: add type-infos generator
Date: Fri, 04 Sep 2026 23:57:48 +0400 [thread overview]
Message-ID: <20260904-qom-qapi-v4-5-a985f168e938@redhat.com> (raw)
In-Reply-To: <20260904-qom-qapi-v4-0-a985f168e938@redhat.com>
New QAPISchemaGenTypeInfoVisitor produces per-module
qapi-type-infos-*.h/c files. Each file declares QAPITypeInfo constants
pairing the QAPI type name with its masked introspection name.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
docs/devel/qapi-code-gen.rst | 107 +++++++++++++++++++++++++-
meson.build | 1 +
scripts/qapi/backend.py | 2 +
scripts/qapi/introspect.py | 2 +-
scripts/qapi/type_infos.py | 178 +++++++++++++++++++++++++++++++++++++++++++
5 files changed, 285 insertions(+), 5 deletions(-)
diff --git a/docs/devel/qapi-code-gen.rst b/docs/devel/qapi-code-gen.rst
index b1cc5b5f0db1..d176238fc2ef 100644
--- a/docs/devel/qapi-code-gen.rst
+++ b/docs/devel/qapi-code-gen.rst
@@ -1247,10 +1247,10 @@ meaningful type names instead.
Optional member "features" exposes the entity's feature strings as a
JSON array of strings.
-To examine a type, start with a command or event using it, then follow
-references by name.
-
-QAPI schema definitions not reachable that way are omitted.
+To examine a type used by QMP, start with a command or event using it,
+then follow references by name. User-defined and array types are also
+included when they are not reachable from a command or event, as they
+may also be used by QOM.
The SchemaInfo for a command has meta-type "command", and variant
members "arg-type", "ret-type" and "allow-oob". On the wire, the
@@ -2101,3 +2101,102 @@ Example::
}));
[Uninteresting stuff omitted...]
+
+
+Code generated for type information
+-----------------------------------
+
+Type info is generated for user-defined and array types. With option
+``--builtins``, it is also generated for built-in types and the internal
+``QType`` enum. Other implicit types are skipped.
+
+The following files are created:
+
+ ``$(prefix)qapi-type-infos.c``
+ A ``QAPITypeInfo`` instance for each type listed above, providing
+ a mapping between the QAPI type name and the masked name used by
+ introspection, along with optional enum lookup table and array
+ type pointers.
+
+ ``$(prefix)qapi-type-infos.h``
+ Declarations for the above type info instances
+
+Each ``QAPITypeInfo`` struct has the following fields:
+
+``name``
+ The QAPI type name (e.g. ``"UserDefOne"``). QOM uses this as the
+ property type string.
+
+``masked_name``
+ For user-defined types, the masked name used in
+ ``query-qmp-schema`` output. For array types, the corresponding
+ bracketed introspection name. Built-in types use their QAPI name;
+ note that introspection canonicalizes the integer built-in types
+ to ``int``. Internal types not present in introspection use
+ ``NULL``.
+
+``lookup``
+ For enum types, a pointer to the corresponding ``QEnumLookup``
+ table. ``NULL`` for non-enum types.
+
+``list``
+ For types that have an array variant, a pointer to the array type's
+ ``QAPITypeInfo``. ``NULL`` when no array type exists.
+
+These type info instances are used by QOM property registration
+functions (``object_property_add_qapi()``,
+``object_class_property_add_qapi_enum()``, etc.) to associate each
+property with its QAPI type. The ``qom-list`` and
+``device-list-properties`` QMP commands then expose the ``qapi-type``
+field, giving management tools a formal type reference they can look
+up in the introspection schema.
+
+All user-defined and array types are included in introspection, even when
+they are not reachable from a command or event. Their type info therefore
+always provides the introspection cross-reference.
+
+Example::
+
+ $ cat qapi-generated/example-qapi-type-infos.h
+ [Uninteresting stuff omitted...]
+
+ #ifndef EXAMPLE_QAPI_TYPE_INFOS_H
+ #define EXAMPLE_QAPI_TYPE_INFOS_H
+
+ #include "qapi/qapi-builtin-type-infos.h"
+
+ extern const QAPITypeInfo UserDefOne_type_info;
+
+ extern const QAPITypeInfo UserDefOneList_type_info;
+
+ #endif /* EXAMPLE_QAPI_TYPE_INFOS_H */
+ $ cat qapi-generated/example-qapi-type-infos.c
+ [Uninteresting stuff omitted...]
+
+ const QAPITypeInfo UserDefOne_type_info = {
+ .name = "UserDefOne",
+ .masked_name = "1",
+ .list = &UserDefOneList_type_info,
+ };
+
+ const QAPITypeInfo UserDefOneList_type_info = {
+ .name = "UserDefOneList",
+ .masked_name = "[1]",
+ };
+
+ [Uninteresting stuff omitted...]
+
+For a modular QAPI schema (see section `Include directives`_), code for
+each sub-module SUBDIR/SUBMODULE.json is actually generated into ::
+
+ SUBDIR/$(prefix)qapi-type-infos-SUBMODULE.h
+ SUBDIR/$(prefix)qapi-type-infos-SUBMODULE.c
+
+If qapi-gen.py is run with option --builtins, additional files are
+created:
+
+ ``qapi-builtin-type-infos.h``
+ Type info instances for built-in types
+
+ ``qapi-builtin-type-infos.c``
+ Definitions for the above type info instances
diff --git a/meson.build b/meson.build
index e797f84a4084..201924cc784d 100644
--- a/meson.build
+++ b/meson.build
@@ -3506,6 +3506,7 @@ qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py',
meson.current_source_dir() / 'scripts/qapi/schema.py',
meson.current_source_dir() / 'scripts/qapi/schema_analysis.py',
meson.current_source_dir() / 'scripts/qapi/source.py',
+ meson.current_source_dir() / 'scripts/qapi/type_infos.py',
meson.current_source_dir() / 'scripts/qapi/types.py',
meson.current_source_dir() / 'scripts/qapi/visit.py',
meson.current_source_dir() / 'scripts/qapi-gen.py'
diff --git a/scripts/qapi/backend.py b/scripts/qapi/backend.py
index 24717be48c3c..7c2b47a41ae6 100644
--- a/scripts/qapi/backend.py
+++ b/scripts/qapi/backend.py
@@ -9,6 +9,7 @@
from .introspect import gen_introspect
from .schema import QAPISchema
from .schema_analysis import QAPISchemaTypeAnalysis
+from .type_infos import gen_type_infos
from .types import gen_types
from .visit import gen_visit
@@ -66,3 +67,4 @@ def generate(self,
gen_commands(schema, output_dir, prefix, gen_tracing)
gen_events(schema, output_dir, prefix)
gen_introspect(schema, output_dir, prefix, schema_types)
+ gen_type_infos(schema, output_dir, prefix, builtins, schema_types)
diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py
index 77c29425c42d..ce37ce787567 100644
--- a/scripts/qapi/introspect.py
+++ b/scripts/qapi/introspect.py
@@ -351,7 +351,7 @@ def visit_event(self, name: str, info: Optional[QAPISourceInfo],
def gen_introspect(schema: QAPISchema, output_dir: str, prefix: str,
- schema_types: QAPISchemaUsedTypes) -> None:
+ schema_types: QAPISchemaTypeAnalysis) -> None:
vis = QAPISchemaGenIntrospectVisitor(prefix, schema_types)
schema.visit(vis)
vis.write(output_dir)
diff --git a/scripts/qapi/type_infos.py b/scripts/qapi/type_infos.py
new file mode 100644
index 000000000000..b9e249584e72
--- /dev/null
+++ b/scripts/qapi/type_infos.py
@@ -0,0 +1,178 @@
+"""
+QAPI type info generator
+
+SPDX-License-Identifier: GPL-2.0-or-later
+"""
+
+from typing import List, Optional
+
+from .common import c_name, mcgen
+from .gen import QAPISchemaModularCVisitor, ifcontext
+from .schema import (
+ QAPISchema,
+ QAPISchemaAlternatives,
+ QAPISchemaBranches,
+ QAPISchemaEnumMember,
+ QAPISchemaFeature,
+ QAPISchemaIfCond,
+ QAPISchemaObjectType,
+ QAPISchemaObjectTypeMember,
+ QAPISchemaType,
+)
+from .schema_analysis import QAPISchemaTypeAnalysis
+from .source import QAPISourceInfo
+
+
+class QAPISchemaGenTypeInfoVisitor(QAPISchemaModularCVisitor):
+
+ def __init__(self, prefix: str, schema_types: QAPISchemaTypeAnalysis):
+ super().__init__(
+ prefix, 'qapi-type-infos',
+ ' * Schema-defined QAPI type info',
+ ' * Built-in QAPI type info', __doc__)
+ self._schema_types = schema_types
+ self._schema: Optional[QAPISchema] = None
+
+ def visit_begin(self, schema: QAPISchema) -> None:
+ super().visit_begin(schema)
+ self._schema = schema
+
+ def _begin_builtin_module(self) -> None:
+ self._genc.preamble_add(mcgen('''
+#include "qemu/osdep.h"
+#include "qapi/qapi-builtin-types.h"
+#include "qapi/qapi-builtin-type-infos.h"
+'''))
+ self._genh.preamble_add(mcgen('''
+#include "qapi/qapi-type-info.h"
+'''))
+
+ def _begin_user_module(self, name: str) -> None:
+ type_infos = self._module_basename('qapi-type-infos', name)
+ types = self._module_basename('qapi-types', name)
+ self._genc.preamble_add(mcgen('''
+#include "qemu/osdep.h"
+#include "%(types)s.h"
+#include "%(type_infos)s.h"
+''',
+ types=types,
+ type_infos=type_infos))
+ self._genh.preamble_add(mcgen('''
+#include "qapi/qapi-builtin-type-infos.h"
+'''))
+
+ def _gen_type_info(self, name: str,
+ ifcond: Optional[QAPISchemaIfCond] = None,
+ with_lookup: bool = False,
+ with_list: bool = False,
+ masked_name: Optional[str] = None) -> None:
+ c_id = c_name(name + '_type_info')
+ if masked_name is not None:
+ masked_name_str = '"%s"' % masked_name
+ else:
+ masked_name_str = 'NULL'
+ with ifcontext(ifcond or QAPISchemaIfCond(),
+ self._genh, self._genc):
+ self._genh.add(mcgen('''
+
+extern const QAPITypeInfo %(c_id)s;
+''',
+ c_id=c_id))
+ self._genc.add(mcgen('''
+
+const QAPITypeInfo %(c_id)s = {
+ .name = "%(name)s",
+ .masked_name = %(masked_name)s,
+''',
+ c_id=c_id, name=name,
+ masked_name=masked_name_str))
+ if with_lookup:
+ self._genc.add(mcgen('''
+ .lookup = &%(c_name)s_lookup,
+''',
+ c_name=c_name(name)))
+ if with_list:
+ self._genc.add(mcgen('''
+ .list = &%(list_id)s,
+''',
+ list_id=c_name(name + 'List_type_info')))
+ self._genc.add(mcgen('''
+};
+'''))
+
+ def _has_list(self, name: str) -> bool:
+ assert self._schema is not None
+ return self._schema.lookup_type(name + 'List') is not None
+
+ def _masked_name(self, name: str) -> Optional[str]:
+ assert self._schema is not None
+ typ = self._schema.lookup_type(name)
+ assert typ is not None
+ if typ.is_implicit():
+ return None
+ return self._schema_types.masked_name(name)
+
+ def visit_builtin_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ json_type: str) -> None:
+ assert self._schema is not None
+ typ = self._schema.lookup_type(name)
+ assert typ is not None
+ masked_name = self._schema_types.introspection_name(typ)
+ self._gen_type_info(name, with_list=self._has_list(name),
+ masked_name=masked_name)
+
+ def visit_enum_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: QAPISchemaIfCond,
+ features: List[QAPISchemaFeature],
+ members: List[QAPISchemaEnumMember],
+ prefix: Optional[str]) -> None:
+ self._gen_type_info(name, ifcond, with_lookup=True,
+ with_list=self._has_list(name),
+ masked_name=self._masked_name(name))
+
+ def visit_object_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: QAPISchemaIfCond,
+ features: List[QAPISchemaFeature],
+ base: Optional[QAPISchemaObjectType],
+ members: List[QAPISchemaObjectTypeMember],
+ branches: Optional[QAPISchemaBranches]) -> None:
+ if name.startswith('q_'):
+ return
+ self._gen_type_info(name, ifcond,
+ with_list=self._has_list(name),
+ masked_name=self._masked_name(name))
+
+ def visit_array_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: QAPISchemaIfCond,
+ element_type: QAPISchemaType) -> None:
+ elem_schema = self._schema_types.introspection_name(element_type)
+ masked_name = '[' + elem_schema + ']'
+ self._gen_type_info(name, ifcond, masked_name=masked_name)
+
+ def visit_alternate_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: QAPISchemaIfCond,
+ features: List[QAPISchemaFeature],
+ alternatives: QAPISchemaAlternatives) -> None:
+ self._gen_type_info(name, ifcond,
+ with_list=self._has_list(name),
+ masked_name=self._masked_name(name))
+
+
+def gen_type_infos(schema: QAPISchema,
+ output_dir: str,
+ prefix: str,
+ opt_builtins: bool,
+ schema_types: QAPISchemaTypeAnalysis) -> None:
+ vis = QAPISchemaGenTypeInfoVisitor(prefix, schema_types)
+ schema.visit(vis)
+ vis.write(output_dir, opt_builtins)
--
2.55.0.543.g5ebe2ebe4ea8
next prev parent reply other threads:[~2026-09-04 19:59 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 19:57 [PATCH v4 00/75] qom/qdev: associate properties with QAPI schema types Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 01/75] qapi: add QAPITypeInfo struct definition Marc-André Lureau
2026-09-09 9:59 ` Markus Armbruster
2026-09-09 11:36 ` Marc-André Lureau
2026-09-09 14:31 ` Markus Armbruster
2026-09-04 19:57 ` [PATCH v4 02/75] qapi/gen: fix _module_basename for multi-dash 'what' parameters Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 03/75] qapi: factor out QAPISchemaUsedTypes from introspect visitor Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 04/75] qapi: register all introspectable types, not just QMP-reachable ones Marc-André Lureau
2026-09-09 14:24 ` Markus Armbruster
2026-09-10 10:06 ` Marc-André Lureau
2026-09-04 19:57 ` Marc-André Lureau [this message]
2026-09-11 13:16 ` [PATCH v4 05/75] qapi: add type-infos generator Markus Armbruster
2026-09-11 14:50 ` Marc-André Lureau
2026-09-12 5:44 ` Markus Armbruster
2026-09-04 19:57 ` [PATCH v4 06/75] meson: add qapi-type-infos-*.c/h to build Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 07/75] qom: add qapi_type field to ObjectProperty Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 08/75] qapi/qom: add qapi-type field to ObjectPropertyInfo Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 09/75] qom/qmp: populate qapi-type in QMP handlers Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 10/75] qom/qmp: populate description & default-value in qom_property_info() Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 11/75] qom: add object_property_set_default_enum() Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 12/75] qom: add object_{class_}property_add_qapi Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 13/75] qom: add object_{class_}property_add_qapi_enum Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 14/75] tests: update check-qom-proplist for QAPI-aware property registration Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 15/75] qom: convert enum properties to QAPI-aware registration Marc-André Lureau
2026-09-04 19:57 ` [PATCH v4 16/75] qom: remove old enum property registration API Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 17/75] qom: convert struct properties to QAPI-aware registration Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 18/75] x86: convert OnOffAuto " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 19/75] microvm: " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 20/75] pc: convert OnOffAuto vmport property " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 21/75] arm/virt: convert OnOffAuto acpi " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 22/75] riscv/virt: convert OnOffAuto properties " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 23/75] loongarch/virt: " Marc-André Lureau
2026-09-07 3:13 ` Bibo Mao
2026-09-04 19:58 ` [PATCH v4 24/75] hostmem-file: convert OnOffAuto rom property " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 25/75] sev: convert OnOffAuto legacy-vm-type " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 26/75] whpx: convert OnOffAuto hyperv " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 27/75] whpx: convert OnOffAuto arch properties " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 28/75] accel/kvm: convert OnOffSplit property " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 29/75] whpx: " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 30/75] ppc/spapr-caps: convert to QAPI-aware property registration Marc-André Lureau
2026-09-10 18:53 ` Amit Machhiwal
2026-09-11 15:17 ` Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 31/75] system/memory: fix "priority" property typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 32/75] backends/hostmem: fix property typenames Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 33/75] backends/hostmem-file: fix "align" property typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 34/75] accel/tcg: fix "tb-size" " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 35/75] block/throttle-groups: fix throttle properties typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 36/75] event-loop-base: fix property typenames Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 37/75] iothread: fix poll properties typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 38/75] util/thread-context: fix property typenames Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 39/75] target/i386: fix CPUID version properties typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 40/75] ppc/pnv: fix phb-id and chip-id " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 41/75] backends/hostmem-memfd: fix "hugetlbsize" property typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 42/75] hw/acpi: fix "node" properties typename Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 43/75] net/colo-compare: fix compare_timeout setter visitor type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 44/75] net/colo-compare: fix max_queue_size " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 45/75] hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 46/75] qom: convert scalar properties to QAPI-aware registration Marc-André Lureau
2026-09-10 19:09 ` Amit Machhiwal
2026-09-11 15:20 ` Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 47/75] i386/cpu: convert strList property " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 48/75] accel/hvf: convert OnOffSplit " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 49/75] i386/x86: convert SgxEPCList " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 50/75] virtio-balloon: convert guest-stats property to QAPI type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 51/75] qom: replace object_property_add_tm with StructTm " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 52/75] hw/nvdimm: convert UUID property to QAPI-aware registration Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 53/75] hw/s390-virtio-ccw: convert loadparm " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 54/75] hw/ppc/spapr_drc: convert fdt " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 55/75] spdm-socket: convert SpdmTransportType to QAPI enum Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 56/75] hw/gpio/pca955x: use QAPI enums for led and pin properties Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 57/75] include: add QEMU_REPEAT helper macro Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 58/75] hw/gpio/pca955x: convert pin/led property to QAPI-aware enum Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 59/75] hw/pci: change the busnr type to uint8 Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 60/75] qdev: add qapi_type field to PropertyInfo with fallback registration Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 61/75] qdev: convert core PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 62/75] qdev: adjust PciDevfn declared type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 63/75] qdev: convert system PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 64/75] hw: convert device-local " Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 65/75] target/riscv: fix incorrect QAPI types and u8 casting Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 66/75] target/riscv: convert PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 67/75] qdev: " Marc-André Lureau
2026-09-08 16:17 ` Stefan Berger
2026-09-04 19:58 ` [PATCH v4 68/75] qdev: introduce typed array PropertyInfos Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 69/75] qdev: simplify DEFINE_PROP_ARRAY and remove generic array PropertyInfo Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 70/75] qdev: remove deprecated PropertyInfo.type and .enum_table fields Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 71/75] memory: use object_property_add_link for container property Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 72/75] hw/i386: convert PCSouthBridgeOption to QAPI enum Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 73/75] qom: use QAPITypeInfo in object_property_get_enum Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 74/75] qapi: expose integer signedness and width in introspection Marc-André Lureau
2026-09-04 19:58 ` [PATCH v4 75/75] tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema Marc-André Lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260904-qom-qapi-v4-5-a985f168e938@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=philmd@oss.qualcomm.com \
--cc=pierrick.bouvier@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.