Hi On Tue, Aug 25, 2026 at 7:33 PM Mark Cave-Ayland <[email protected]> wrote: > > On 18/08/2026 12:10, Marc-André Lureau wrote: > > > Hi, > > > > This series connects QOM and qdev properties to the QAPI type system, so > > that management tools can discover the QAPI schema type of each object > > property. > > > > Today, QOM properties carry a free-form "type" string ("bool", "uint32", > > "OnOffAuto", ..) that has no formal link to the QAPI schema exposed by > > query-qmp-schema. Management tools must maintain ad-hoc mappings or rely > > on naming conventions to figure out how to interpret property values. > > > > This series adds: > > - A new QAPITypeInfo struct that pairs a property with its QAPI schema > > type name, enum lookup table, and list-element type. > > > > - A QAPI code generator (qapi-type-infos) that emits a QAPITypeInfo > > instance for every schema-defined type, including the mapping > > between internal C names and the schema name visible to clients. > > > > - A "qapi-type" field in the ObjectPropertyInfo and > > ObjectPropertyValue QMP structs, populated from the QAPITypeInfo > > when present giving clients a cross-reference into query-qmp-schema > > output. > > > > - Conversion of all PropertyInfo definitions from the old > > .type/.enum_table strings to the new .qapi_type pointer. > > > > - Replacement of the generic qdev_prop_array with typed per-element > > array PropertyInfos, removing the arrayinfo/arrayfieldsize > > indirection from struct Property. > > > > - Removal of the deprecated PropertyInfo.type and .enum_table fields, > > and of the old object_property_add_enum/add_tm APIs. > > > > Along the way, a few pre-existing type mismatches in property > > definitions are fixed, the "struct tm" RTC property is replaced with a > > proper QAPI StructTm type etc. Introducing more specific types or a > > "typedef" to QAPI could help provide better associated type informations > > than plain "str" in many cases, for example. > > > > Comments welcome! > > Thanks for quite a substantial piece work: there is quite a lot to pick > through in this series which makes review tricky. If you post a new > version, it might be worth showing an example of the before/after JSON > to help give some context around the changes: however it feels this is
Well, the most significant change is that the query-qmp-schema grew of about 10% to include types that are not referenced by QMP directly. And qom-list, qom-list-get, device-list-properties, and qom-list-properties now return an additional optional "qapi-type" field to reference the schema types. > going in the right direction, since it works towards the goal of > allowing a QMP client to introspect everything it needs to know about > the QAPI type underlying a property. > > I've started working through this with a few comments and reviews for > the patches fixing up types: I wonder if the type fixups could be merged > separately to help reduce the size of the series? Sure, we can cherry-pick the fixes and reduce the new version. > > Question: is the eventual aim to deprecate the use of all the non-qapi > object functions? Are there many instances left after this series at all? QOM itself uses non-qapi functions, but outside of that, none should be left. thanks > > > Signed-off-by: Marc-André Lureau <[email protected]> > > --- > > Changes in v3: > > - QAPI analysis redesign (replacing the old "expose name map" from > > introspect) > > - all non-implicit QAPI types are now introspectable, including QOM-only > > types > > - QAPITypeInfo.schema_name -> masked_name > > - exposes integer signedness and width through query-qmp-schema > > - various extra property fixes > > - rebase, some patch split or merge > > > > - Link to v2: > > https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_qemu-2Ddevel_20260616-2Dqom-2Dqapi-2Dv2-2D0-2Dcc9396b9c18c-40redhat.com&d=DwIDaQ&c=s883GpUCOChKOHiocYtGcg&r=c23RpsaH4D2MKyD3EPJTDa0BAxz6tV8aUJqVSoytEiY&m=LGtC1Otz03Nx6wZrdIv7LRRcAEAYfhyfKJ4dtNt7PCxy3ILcsWudQol0qR9l2c5a&s=Idir-fKu3uFkuRRHZW8ipF3e84xwMMhnVWVuat0zVXs&e= > > > > Changes in v2: > > > > - Added kernel-doc documentation for the QAPITypeInfo struct fields. > > - Dropped "qom: drop free-form property typename registration", it's > > still needed for array of links to provide useful type names. > > - Added qdev_prop_link_list for array-of-links properties, with a > > create function that generates "link<TYPE>List" type names matching the > > existing "link<TYPE>" convention. > > - qdev_prop_link now uses &str_type_info instead of "link" (the full > > "link<TYPE>" type name is set at property-add time) > > - Simplified DEFINE_PROP_LINK_ARRAY to use qdev_prop_link_list, dropping > > the now-unnecessary _arraytype parameter. > > - rebased > > - Link to v1: > > https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_qemu-2Ddevel_20260510-2Dqom-2Dqapi-2Dv1-2D0-2D48ba6a1a1fa5-40redhat.com&d=DwIDaQ&c=s883GpUCOChKOHiocYtGcg&r=c23RpsaH4D2MKyD3EPJTDa0BAxz6tV8aUJqVSoytEiY&m=LGtC1Otz03Nx6wZrdIv7LRRcAEAYfhyfKJ4dtNt7PCxy3ILcsWudQol0qR9l2c5a&s=_KgQcnGFWRM8edu2HLa7HFwHHCkp2t6UyriBmPDNk8A&e= > > > > To: [email protected] > > Cc: Markus Armbruster <[email protected]> > > Cc: Michael Roth <[email protected]> > > Cc: Pierrick Bouvier <[email protected]> > > Cc: Paolo Bonzini <[email protected]> > > Cc: Marc-André Lureau <[email protected]> > > Cc: "Daniel P. Berrangé" <[email protected]> > > Cc: Philippe Mathieu-Daudé <[email protected]> > > > > --- > > Marc-André Lureau (74): > > qapi: add QAPITypeInfo struct definition > > qapi/gen: fix _module_basename for multi-dash 'what' parameters > > qapi: factor out QAPISchemaUsedTypes from introspect visitor > > qapi: register all introspectable types, not just QMP-reachable ones > > qapi: add type-infos generator > > meson: add qapi-type-infos-*.c/h to build > > qom: add qapi_type field to ObjectProperty > > qapi/qom: add qapi-type field to ObjectPropertyInfo > > qom/qmp: populate qapi-type in QMP handlers > > qom: add object_property_set_default_enum() > > qom: add object_{class_}property_add_qapi > > qom: add object_{class_}property_add_qapi_enum > > tests: update check-qom-proplist for QAPI-aware property registration > > qom: convert enum properties to QAPI-aware registration > > qom: remove old enum property registration API > > qom: convert struct properties to QAPI-aware registration > > x86: convert OnOffAuto properties to QAPI-aware registration > > microvm: convert OnOffAuto properties to QAPI-aware registration > > pc: convert OnOffAuto vmport property to QAPI-aware registration > > arm/virt: convert OnOffAuto acpi property to QAPI-aware registration > > riscv/virt: convert OnOffAuto properties to QAPI-aware registration > > loongarch/virt: convert OnOffAuto properties to QAPI-aware > > registration > > hostmem-file: convert OnOffAuto rom property to QAPI-aware > > registration > > sev: convert OnOffAuto legacy-vm-type property to QAPI-aware > > registration > > whpx: convert OnOffAuto hyperv property to QAPI-aware registration > > whpx: convert OnOffAuto arch properties to QAPI-aware registration > > accel/kvm: convert OnOffSplit property to QAPI-aware registration > > whpx: convert OnOffSplit property to QAPI-aware registration > > ppc/spapr-caps: convert to QAPI-aware property registration > > system/memory: fix "priority" property typename > > backends/hostmem: fix property typenames > > backends/hostmem-file: fix "align" property typename > > accel/tcg: fix "tb-size" property typename > > block/throttle-groups: fix throttle properties typename > > event-loop-base: fix property typenames > > iothread: fix poll properties typename > > util/thread-context: fix property typenames > > target/i386: fix CPUID version properties typename > > ppc/pnv: fix phb-id and chip-id properties typename > > backends/hostmem-memfd: fix "hugetlbsize" property typename > > hw/acpi: fix "node" properties typename > > net/colo-compare: fix compare_timeout setter visitor type > > net/colo-compare: fix max_queue_size setter visitor type > > hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events > > qom: convert scalar properties to QAPI-aware registration > > i386/cpu: convert strList property to QAPI-aware registration > > accel/hvf: convert OnOffSplit property to QAPI-aware registration > > i386/x86: convert SgxEPCList property to QAPI-aware registration > > virtio-balloon: convert guest-stats property to QAPI type > > qom: replace object_property_add_tm with StructTm QAPI type > > hw/nvdimm: convert UUID property to QAPI-aware registration > > hw/s390-virtio-ccw: convert loadparm property to QAPI-aware > > registration > > hw/ppc/spapr_drc: convert fdt property to QAPI-aware registration > > spdm-socket: convert SpdmTransportType to QAPI enum > > hw/gpio/pca955x: use QAPI enums for led and pin properties > > include: add QEMU_REPEAT helper macro > > hw/gpio/pca955x: convert pin/led property to QAPI-aware enum > > hw/pci: change the busnr type to uint8 > > qdev: add qapi_type field to PropertyInfo with fallback registration > > qdev: convert core PropertyInfo definitions to use qapi_type > > qdev: adjust PciDevfn declared type > > qdev: convert system PropertyInfo definitions to use qapi_type > > hw: convert device-local PropertyInfo definitions to use qapi_type > > target/riscv: fix incorrect QAPI types and u8 casting > > target/riscv: convert PropertyInfo definitions to use qapi_type > > qdev: convert PropertyInfo definitions to use qapi_type > > qdev: introduce typed array PropertyInfos > > qdev: simplify DEFINE_PROP_ARRAY and remove generic array > > PropertyInfo > > qdev: remove deprecated PropertyInfo.type and .enum_table fields > > memory: use object_property_add_link for container property > > hw/i386: convert PCSouthBridgeOption to QAPI enum > > qom: use QAPITypeInfo in object_property_get_enum > > qapi: expose integer signedness and width in introspection > > tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema > > > > accel/hvf/hvf-all.c | 29 ++-- > > accel/kvm/kvm-all.c | 31 ++-- > > accel/nitro/nitro-accel.c | 3 +- > > accel/tcg/tcg-all.c | 3 +- > > accel/whpx/whpx-common.c | 58 +++---- > > authz/list.c | 14 +- > > backends/cryptodev.c | 7 +- > > backends/hostmem-file.c | 33 ++-- > > backends/hostmem-memfd.c | 3 +- > > backends/hostmem.c | 20 +-- > > backends/spdm-socket.c | 25 +-- > > backends/tpm/tpm_util.c | 3 +- > > block/throttle-groups.c | 10 +- > > chardev/char-socket.c | 3 +- > > crypto/secret_common.c | 12 +- > > crypto/secret_keyring.c | 9 +- > > crypto/tlscreds.c | 12 +- > > docs/devel/qapi-code-gen.rst | 123 +++++++++++++-- > > docs/interop/virtio-balloon-stats.rst | 22 +-- > > event-loop-base.c | 7 +- > > hw/acpi/ich9.c | 3 +- > > hw/acpi/pci.c | 7 +- > > hw/arm/virt.c | 31 ++-- > > hw/block/xen-block.c | 3 +- > > hw/core/clock.c | 3 +- > > hw/core/machine-qmp-cmds.c | 3 +- > > hw/core/machine.c | 13 +- > > hw/core/qdev-prop-internal.h | 20 +++ > > hw/core/qdev-properties-system.c | 97 ++++++------ > > hw/core/qdev-properties.c | 180 ++++++++++++++------- > > hw/cpu/core.c | 10 +- > > hw/cxl/cxl-host.c | 6 +- > > hw/display/apple-gfx-mmio.m | 2 +- > > hw/display/apple-gfx-pci.m | 2 +- > > hw/display/apple-gfx.h | 1 + > > hw/display/apple-gfx.m | 7 +- > > hw/gpio/aspeed_gpio.c | 5 +- > > hw/gpio/aspeed_sgpio.c | 3 +- > > hw/gpio/pca9552.c | 261 > > ++++++++++++------------------- > > hw/gpio/pca9554.c | 157 +++++++------------ > > hw/gpio/stm32l4x5_gpio.c | 5 +- > > hw/i386/microvm.c | 80 ++++------ > > hw/i386/pc.c | 32 ++-- > > hw/i386/pc_piix.c | 61 +++----- > > hw/i386/sgx-epc.c | 3 +- > > hw/i386/x86.c | 113 ++++++------- > > hw/ide/ide-dev.c | 3 +- > > hw/input/stellaris_gamepad.c | 2 +- > > hw/intc/apic_common.c | 3 +- > > hw/intc/arm_gicv3_common.c | 2 +- > > hw/intc/arm_gicv5_common.c | 4 +- > > hw/intc/rx_icu.c | 4 +- > > hw/loongarch/virt.c | 87 +++++------ > > hw/mem/nvdimm.c | 11 +- > > hw/mem/pc-dimm.c | 3 +- > > hw/microblaze/petalogix_s3adsp1800_mmu.c | 19 ++- > > hw/misc/arm_sysctl.c | 4 +- > > hw/misc/aspeed_lpc.c | 73 ++++++--- > > hw/misc/aspeed_sdmc.c | 3 +- > > hw/misc/mps2-scc.c | 2 +- > > hw/misc/npcm7xx_mft.c | 3 +- > > hw/misc/tz-ppc.c | 19 +-- > > hw/misc/xlnx-versal-trng.c | 15 +- > > hw/net/ne2000-isa.c | 3 +- > > hw/net/rocker/rocker.c | 2 +- > > hw/net/virtio-net.c | 2 +- > > hw/nvme/ctrl.c | 29 ++-- > > hw/nvme/nguid.c | 3 +- > > hw/nvram/xlnx-bbram.c | 3 +- > > hw/nvram/xlnx-efuse.c | 5 +- > > hw/nvram/xlnx-versal-efuse-ctrl.c | 2 +- > > hw/pci-bridge/pci_expander_bridge.c | 3 +- > > hw/pci-host/i440fx.c | 29 ++-- > > hw/pci-host/pnv_phb3.c | 5 +- > > hw/pci-host/pnv_phb4.c | 5 +- > > hw/pci-host/q35.c | 9 +- > > hw/pci/pci.c | 3 +- > > hw/ppc/spapr_caps.c | 39 ++--- > > hw/ppc/spapr_drc.c | 5 +- > > hw/ppc/spapr_rtc.c | 18 ++- > > hw/remote/vfio-user-obj.c | 22 +-- > > hw/riscv/microchip_pfsoc.c | 3 +- > > hw/riscv/riscv_hart.c | 6 +- > > hw/riscv/virt.c | 52 +++--- > > hw/rtc/mc146818rtc.c | 16 +- > > hw/s390x/ccw-device.c | 3 +- > > hw/s390x/css.c | 5 +- > > hw/s390x/s390-pci-bus.c | 3 +- > > hw/s390x/s390-virtio-ccw.c | 4 +- > > hw/s390x/sclpcpi.c | 8 +- > > hw/s390x/virtio-ccw-mem.c | 3 +- > > hw/sensor/adc128d818.c | 16 +- > > hw/sensor/adm1266.c | 3 +- > > hw/sensor/adm1272.c | 9 +- > > hw/sensor/emc141x.c | 9 +- > > hw/sensor/isl_pmbus_vr.c | 19 +-- > > hw/sensor/lsm303dlhc_mag.c | 9 +- > > hw/sensor/max34451.c | 5 +- > > hw/sensor/tmp105.c | 3 +- > > hw/sensor/tmp421.c | 9 +- > > hw/usb/dev-storage-classic.c | 3 +- > > hw/vfio-user/pci.c | 5 +- > > hw/vfio/pci-quirks.c | 3 +- > > hw/virtio/virtio-balloon.c | 87 ++++------- > > hw/virtio/virtio-iommu-pci.c | 2 +- > > hw/virtio/virtio-mem-pci.c | 3 +- > > hw/virtio/virtio-mem.c | 18 ++- > > hw/xen/xen-pvh-common.c | 9 +- > > include/chardev/char.h | 8 - > > include/hw/block/block.h | 2 +- > > include/hw/core/qdev-properties-system.h | 2 + > > include/hw/core/qdev-properties.h | 40 +++-- > > include/hw/cxl/cxl_component.h | 5 +- > > include/hw/i386/pc.h | 4 +- > > include/qapi/qapi-type-info.h | 32 ++++ > > include/qemu/osdep.h | 33 ++++ > > include/qemu/uuid.h | 4 + > > include/qom/object.h | 171 ++++++++++++-------- > > include/system/spdm-socket.h | 28 ++-- > > iothread.c | 9 +- > > meson.build | 2 + > > migration/options.c | 4 +- > > monitor/qmp.c | 12 +- > > net/colo-compare.c | 15 +- > > net/dump.c | 6 +- > > net/filter-buffer.c | 3 +- > > net/filter.c | 10 +- > > qapi/common.json | 28 ++++ > > qapi/introspect.json | 20 ++- > > qapi/machine.json | 152 ++++++++++++++++++ > > qapi/meson.build | 4 + > > qapi/pragma.json | 1 + > > qapi/qom.json | 10 ++ > > qapi/sockets.json | 20 +++ > > qga/meson.build | 2 + > > qom/object.c | 236 > > +++++++++++++--------------- > > qom/qom-qmp-cmds.c | 32 ++-- > > scripts/qapi/backend.py | 9 +- > > scripts/qapi/gen.py | 2 +- > > scripts/qapi/introspect.py | 107 ++++++------- > > scripts/qapi/schema_analysis.py | 149 ++++++++++++++++++ > > scripts/qapi/type_infos.py | 178 +++++++++++++++++++++ > > system/bootdevice.c | 3 +- > > system/memory.c | 40 +---- > > target/arm/cpu64.c | 11 +- > > target/arm/kvm.c | 3 +- > > target/arm/tcg/cpu64.c | 5 +- > > target/i386/cpu.c | 26 +-- > > target/i386/kvm/kvm.c | 38 +++-- > > target/i386/kvm/tdx.c | 4 +- > > target/i386/sev.c | 31 ++-- > > target/i386/whpx/whpx-all.c | 101 ++++-------- > > target/ppc/compat.c | 3 +- > > target/riscv/cpu.c | 50 +++--- > > target/riscv/kvm/kvm-cpu.c | 7 +- > > target/riscv/tcg/tcg-cpu.c | 13 +- > > target/s390x/cpu-system.c | 4 +- > > target/s390x/cpu_models.c | 5 +- > > target/sparc/cpu.c | 3 +- > > tests/include/meson.build | 2 + > > tests/meson.build | 6 + > > tests/qapi-schema/meson.build | 1 + > > tests/qtest/qmp-cmd-test.c | 55 ++++++- > > tests/unit/check-qom-proplist.c | 99 +++++++++--- > > tests/unit/test-qdev-global-props.c | 11 +- > > tests/unit/test-qdev.c | 2 +- > > ui/console-vc.c | 8 +- > > ui/console.c | 3 +- > > ui/dbus.c | 18 ++- > > ui/input-linux.c | 11 +- > > util/thread-context.c | 7 +- > > util/uuid.c | 5 + > > 172 files changed, 2510 insertions(+), 1699 deletions(-) > > --- > > base-commit: fa19879df1658f96ac07365fca8835b7decd6995 > > change-id: 20260510-qom-qapi-fbe0f5060c3f > > > > Best regards, > > -- > > Marc-André Lureau <[email protected]> > > ATB, > > Mark. >
