Linux CXL
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael Roth" <michael.roth@amd.com>,
	"John Snow" <jsnow@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Mauro Carvalho Chehab" <mchehab+huawei@kernel.org>,
	"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Kostiantyn Kostiuk" <kkostiuk@redhat.com>,
	"Eric Blake" <eblake@redhat.com>,
	"David Hildenbrand" <david@kernel.org>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Jason Wang" <jasowangio@gmail.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	kvm@vger.kernel.org, "Alberto Garcia" <berto@igalia.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Junjie Cao" <junjie.cao@intel.com>,
	"Anisa Su" <anisa.su@samsung.com>,
	"Elena Ufimtseva" <elena.ufimtseva@oracle.com>,
	"Jagannathan Raman" <jag.raman@oracle.com>,
	"John Levon" <john.levon@nutanix.com>,
	"Thanos Makatos" <thanos.makatos@nutanix.com>,
	"Cédric Le Goater" <clg@redhat.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Eric Farman" <farman@linux.ibm.com>,
	"Matthew Rosato" <mjrosato@linux.ibm.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Ilya Leoshkevich" <iii@linux.ibm.com>,
	qemu-block@nongnu.org, linux-cxl@vger.kernel.org,
	qemu-s390x@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	"Sergio Lopez" <slp@redhat.com>,
	qemu-arm@nongnu.org, "Palmer Dabbelt" <palmer@dabbelt.com>,
	"Alistair Francis" <alistair.francis@wdc.com>,
	"Weiwei Li" <liwei1518@gmail.com>,
	"Daniel Henrique Barboza" <daniel.barboza@oss.qualcomm.com>,
	"Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
	"Chao Liu" <chao.liu@processmission.com>,
	qemu-riscv@nongnu.org, "Song Gao" <17746591750@163.com>,
	"Bibo Mao" <maobibo@loongson.cn>,
	"Xianglai Li" <lixianglai@loongson.cn>,
	"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
	"Pedro Barbuda" <pbarbuda@microsoft.com>,
	"Mohamed Mediouni" <mohamed@unpredictable.fr>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
	"Amit Machhiwal" <amachhiw@linux.ibm.com>,
	qemu-ppc@nongnu.org, "Zhang Chen" <zhangckid@gmail.com>,
	"Li Zhijian" <lizhijian@fujitsu.com>,
	"Alistair Francis" <alistair@alistair23.me>,
	"Alexander Graf" <graf@amazon.com>,
	"Gonglei (Arei)" <arei.gonglei@huawei.com>,
	"zhenwei pi" <zhenwei.pi@linux.dev>,
	"Ani Sinha" <anisinha@redhat.com>, "Luc Michel" <luc@lmichel.fr>,
	"Cédric Le Goater" <clg@kaod.org>,
	"Jamin Lin" <jamin_lin@aspeedtech.com>,
	"Kane Chen" <kane_chen@aspeedtech.com>,
	"Samuel Tardieu" <sam@rfc1149.net>,
	"Denis V. Lunev" <den@openvz.org>,
	"FangSheng Huang" <FangSheng.Huang@amd.com>,
	"Tyrone Ting" <kfting@nuvoton.com>,
	"Hao Wu" <wuhaotsh@google.com>, "Keith Busch" <kbusch@kernel.org>,
	"Klaus Jensen" <its@irrelevant.dk>,
	"Jesper Devantier" <foss@defmacro.it>,
	"Aditya Gupta" <adityag@linux.ibm.com>,
	"Glenn Miles" <milesg@linux.ibm.com>,
	"Conor Dooley" <conor@kernel.org>,
	"Sebastian Huber" <sebastian.huber@embedded-brains.de>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Jason Herne" <jjherne@linux.ibm.com>,
	"Titus Rwantare" <titusr@google.com>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Anthony PERARD" <anthony@xenproject.org>,
	"Peter Xu" <peterx@redhat.com>,
	"Chinmay Rath" <rathc@linux.ibm.com>,
	"Hendrik Brueckner" <brueckner@linux.ibm.com>,
	xen-devel@lists.xenproject.org,
	"Roman Bolshakov" <rbolshakov@ddn.com>,
	"Phil Dennis-Jordan" <phil@philjordan.eu>,
	"Fam Zheng" <fam@euphon.net>, "Farhan Ali" <alifm@linux.ibm.com>,
	"Alex Williamson" <alex@shazbot.org>,
	"Tao Tang" <tangtao1634@phytium.com.cn>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Artyom Tarasenko" <atar4qemu@gmail.com>,
	"Yoshinori Sato" <yoshinori.sato@nifty.com>,
	"Jiri Pirko" <jiri@resnulli.us>,
	"Eric Auger" <eric.auger@redhat.com>,
	"Laurent Vivier" <lvivier@redhat.com>
Subject: Re: [PATCH v7 09/65] qapi: add type-infos generator
Date: Fri, 23 Oct 2026 15:47:21 +0200	[thread overview]
Message-ID: <87mrs4a5qu.fsf@pond.sub.org> (raw)
In-Reply-To: <20261020-qom-qapi-v7-9-431a86b02b58@redhat.com> ("Marc-André Lureau"'s message of "Tue, 20 Oct 2026 14:45:26 +0400")

Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> 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: Markus Armbruster <armbru@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  docs/devel/qapi-code-gen.rst |  92 ++++++++++++++++++++++++
>  meson.build                  |   1 +
>  scripts/qapi/backend.py      |   2 +
>  scripts/qapi/type_infos.py   | 163 +++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 258 insertions(+)
>
> diff --git a/docs/devel/qapi-code-gen.rst b/docs/devel/qapi-code-gen.rst
> index 77f08bb68cac..1cc5338a210a 100644
> --- a/docs/devel/qapi-code-gen.rst
> +++ b/docs/devel/qapi-code-gen.rst
> @@ -1250,6 +1250,9 @@ JSON array of strings.
>  To examine a type, start with a command or event using it, then follow
>  references by name.
>  
> +.. TODO document QOM introspection (qom-list, qom-list-properties,
> +   qom-get) and how it relates to QAPI type information.
> +
>  The SchemaInfo for a command has meta-type "command", and variant
>  members "arg-type", "ret-type" and "allow-oob".  On the wire, the
>  "arguments" member of a client's "execute" command must conform to the
> @@ -2099,3 +2102,92 @@ Example::
>      }));
>  
>      [Uninteresting stuff omitted...]
> +
> +
> +Code generated for type information
> +-----------------------------------
> +
> +Type information is generated for user-defined types and their array
> +types.  With option --builtins, it is also generated for the built-in
> +types.
> +
> +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"``).
> +
> +``masked_name``
> +    The masked name used in ``query-qmp-schema`` output.
> +
> +``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.
> +
> +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",

Code generated right now has "32".  Doesn't matter to readers, but using
generated code verbatim eases maintenance a bit.


> +        .list = &UserDefOneList_type_info,
> +    };
> +
> +    const QAPITypeInfo UserDefOneList_type_info = {
> +        .name = "UserDefOneList",
> +        .masked_name = "[1]",

Likewise.

> +    };
> +
> +    [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 bbef9d9c2932..e51fb7a37740 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3510,6 +3510,7 @@ qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py',
>                       meson.current_source_dir() / 'scripts/qapi/parser.py',
>                       meson.current_source_dir() / 'scripts/qapi/schema.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 49ae6ecdd33e..508ab2173539 100644
> --- a/scripts/qapi/backend.py
> +++ b/scripts/qapi/backend.py
> @@ -8,6 +8,7 @@
>  from .features import gen_features
>  from .introspect import gen_introspect
>  from .schema import QAPISchema
> +from .type_infos import gen_type_infos
>  from .types import gen_types
>  from .visit import gen_visit
>  
> @@ -63,3 +64,4 @@ def generate(self,
>          gen_commands(schema, output_dir, prefix, gen_tracing)
>          gen_events(schema, output_dir, prefix)
>          gen_introspect(schema, output_dir, prefix, unmask)
> +        gen_type_infos(schema, output_dir, prefix, builtins, unmask)
> diff --git a/scripts/qapi/type_infos.py b/scripts/qapi/type_infos.py
> new file mode 100644
> index 000000000000..b29e31d92640
> --- /dev/null
> +++ b/scripts/qapi/type_infos.py
> @@ -0,0 +1,163 @@
> +"""
> +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 .source import QAPISourceInfo
> +
> +
> +class QAPISchemaGenTypeInfoVisitor(QAPISchemaModularCVisitor):
> +
> +    def __init__(self, prefix: str, unmask: bool):
> +        super().__init__(
> +            prefix, 'qapi-type-infos',
> +            ' * Schema-defined QAPI type info',
> +            ' * Built-in QAPI type info', __doc__)
> +        self._unmask = unmask
> +        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 _has_list(self, name: str) -> bool:
> +        assert self._schema is not None
> +        return self._schema.lookup_type(name + 'List') is not None

Relies on QAPISchema._make_array_type()'s

           name = element_type + 'List'    # reserved by check_defn_name_str()

Suggest to point to ._make_array_type() with a comment.

There's another name + 'List' below, at [*].  One comment here could do,
though.

> +
> +    def _masked_name(self, name: str) -> str:
> +        assert self._schema is not None
> +        return self._schema.definition_introspection_name(name, self._unmask)
> +
> +    def _gen_type_info(self, name: str,
> +                       ifcond: Optional[QAPISchemaIfCond] = None,
> +                       with_lookup: bool = False,
> +                       with_list: bool = False) -> None:
> +        c_id = c_name(name + '_type_info')
> +        masked_name_str = '"%s"' % self._masked_name(name)
> +        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))

Simpler and clearer, I think:

       .masked_name = "%(masked_name)s",
                                    ...
                                    masked_name= self._masked_name(name))

> +            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('''
> +};
> +'''))

Three variations of c_name(name maybe with suffix) in this function:

    c_name(name + '_type_info')
    c_name(name)
    c_name(name + 'List_type_info')

Let's put just

    cname = c_name(name)

at the beginning, and add the suffix within the template like we do in
events.py, types.py, and visit.py, i.e. like this:

               self._genh.add(mcgen('''

   extern const QAPITypeInfo %(cname)s_type_info;
   ''',
                                    cname=cname))

> +
> +    def visit_builtin_type(self,
> +                           name: str,
> +                           info: Optional[QAPISourceInfo],
> +                           json_type: str) -> None:
> +        self._gen_type_info(name, with_list=self._has_list(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))
> +
> +    def visit_array_type(self,
> +                         name: str,
> +                         info: Optional[QAPISourceInfo],
> +                         ifcond: QAPISchemaIfCond,
> +                         element_type: QAPISchemaType) -> None:
> +        self._gen_type_info(name, ifcond)
> +
> +    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:
> +        assert self._schema is not None
> +        typ = self._schema.lookup_type(name)
> +        assert typ
> +        if typ.is_implicit():
> +            return
> +        self._gen_type_info(name, ifcond,
> +                            with_list=self._has_list(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))

All but one caller of ._gen_type_info() pass
with_list=self._has_list(name).  The exception is visit_array_type(),
where we let with_list default to False.  Since .has_list(name) would
surely be False there, we could do away with with_list and check
._has_list() in ._gen_type_info().

The array business complicates review of this patch and PATCH 07 a bit.
It isn't actually needed until PATCH 59.  I'd like you to delay it until
then to get it out of the way here:

* Create QAPITypeInfo without member @list in PATCH 07.

* Don't generate member @list in PATCH 09.

* Do both right before PATCH 59.

Might also enable quicker merging of the bulk of this series.

> +
> +
> +def gen_type_infos(schema: QAPISchema,
> +                   output_dir: str,
> +                   prefix: str,
> +                   opt_builtins: bool,
> +                   opt_unmask: bool) -> None:
> +    vis = QAPISchemaGenTypeInfoVisitor(prefix, opt_unmask)
> +    schema.visit(vis)
> +    vis.write(output_dir, opt_builtins)

  reply	other threads:[~2026-10-23 13:47 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-20 10:45 [PATCH v7 00/65] Hi marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 01/65] qapi/schema: Rename .lookup_entity() and tighten return type marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 02/65] qapi: Ease access to introspection names marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 03/65] qapi/introspect: Simplify masked name comment emission slighly marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 04/65] qapi/introspect: Don't elide types marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 05/65] qapi: QAPISchemaVisitor.visit_needed() is now unused, drop marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 06/65] qapi/introspect: Tweak integer type masking marcandre.lureau
2026-10-20 10:45 ` [PATCH v7 07/65] qapi: add QAPITypeInfo struct definition Marc-André Lureau
2026-10-23  8:39   ` Markus Armbruster
2026-10-20 10:45 ` [PATCH v7 08/65] qapi/gen: fix _module_basename for multi-dash 'what' parameters Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 09/65] qapi: add type-infos generator Marc-André Lureau
2026-10-23 13:47   ` Markus Armbruster [this message]
2026-10-20 10:45 ` [PATCH v7 10/65] meson: add qapi-type-infos-*.c/h to build Marc-André Lureau
2026-10-23 10:54   ` Markus Armbruster
2026-10-20 10:45 ` [PATCH v7 11/65] qom: add qapi_type field to ObjectProperty Marc-André Lureau
2026-10-23 13:54   ` Markus Armbruster
2026-10-20 10:45 ` [PATCH v7 12/65] qapi/qom: add qapi-type field to ObjectPropertyInfo Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 13/65] qom/qmp: populate qapi-type in QMP handlers Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 14/65] qom/qmp: populate description & default-value in qom_property_info() Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 15/65] qom: add object_property_set_default_enum() Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 16/65] qom: add object_{class_}property_add_qapi Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 17/65] qom: add object_{class_}property_add_qapi_enum Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 18/65] tests: update check-qom-proplist for QAPI-aware property registration Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 19/65] qom: convert QAPI enum properties to QAPI-aware registration Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 20/65] qom: convert struct " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 21/65] x86: convert OnOffAuto " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 22/65] microvm: " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 23/65] pc: convert OnOffAuto vmport property " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 24/65] arm/virt: convert OnOffAuto acpi " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 25/65] riscv/virt: convert OnOffAuto properties " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 26/65] loongarch/virt: " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 27/65] hostmem-file: convert OnOffAuto rom property " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 28/65] sev: convert OnOffAuto legacy-vm-type " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 29/65] whpx: convert OnOffAuto hyperv " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 30/65] whpx: convert OnOffAuto arch properties " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 31/65] accel/kvm: convert OnOffSplit property " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 32/65] whpx: " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 33/65] hw/ppc/spapr_caps: fix property type name Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 34/65] ppc/spapr-caps: convert to QAPI-aware property registration Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 35/65] net/colo-compare: fix compare_timeout setter visitor type Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 36/65] net/colo-compare: fix max_queue_size " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 37/65] hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 38/65] qom: convert scalar properties to QAPI-aware registration Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 39/65] i386/cpu: convert strList property " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 40/65] accel/hvf: convert OnOffSplit " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 41/65] i386/x86: convert SgxEPCList " Marc-André Lureau
2026-10-20 10:45 ` [PATCH v7 42/65] virtio-balloon: convert guest-stats property to QAPI type Marc-André Lureau
2026-10-20 12:59   ` Markus Armbruster
2026-10-20 10:46 ` [PATCH v7 43/65] qom: replace object_property_add_tm with StructTm " Marc-André Lureau
2026-10-20 13:25   ` Markus Armbruster
2026-10-20 10:46 ` [PATCH v7 44/65] hw/nvdimm: convert UUID property to QAPI-aware registration Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 45/65] hw/s390-virtio-ccw: convert loadparm " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 46/65] hw/ppc/spapr_drc: convert fdt " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 47/65] hw/s390x: convert BootCertificatesList " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 48/65] hw/gpio/pca955x: use QAPI enums for led and pin properties Marc-André Lureau
2026-10-20 20:28   ` Miles Glenn
2026-10-20 10:46 ` [PATCH v7 49/65] include: add QEMU_REPEAT helper macro Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 50/65] hw/gpio/pca955x: convert pin/led property to QAPI-aware enum Marc-André Lureau
2026-10-20 20:41   ` Miles Glenn
2026-10-20 10:46 ` [PATCH v7 51/65] hw/pci: change the busnr type to uint8 Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 52/65] qdev: add qapi_type field to PropertyInfo with fallback registration Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 53/65] qdev: convert core PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 54/65] qdev: adjust PciDevfn declared type Marc-André Lureau
2026-10-23 10:04   ` Daniel P. Berrangé
2026-10-23 11:39     ` Marc-André Lureau
2026-10-23 12:04       ` Michael S. Tsirkin
2026-10-20 10:46 ` [PATCH v7 55/65] qdev: convert system PropertyInfo definitions to use qapi_type Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 56/65] hw: convert device-local " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 57/65] target/riscv: convert " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 58/65] qdev: " Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 59/65] qdev: introduce typed array PropertyInfos Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 60/65] qdev: simplify DEFINE_PROP_ARRAY and remove generic array PropertyInfo Marc-André Lureau
2026-10-21 14:45   ` Markus Armbruster
2026-10-20 10:46 ` [PATCH v7 61/65] qdev: remove deprecated PropertyInfo.type and .enum_table fields Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 62/65] hw/i386: convert PCSouthBridgeOption to QAPI enum Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 63/65] qom: remove old enum property registration API Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 64/65] qom: use QAPITypeInfo in object_property_get_enum Marc-André Lureau
2026-10-20 10:46 ` [PATCH v7 65/65] tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema Marc-André Lureau
2026-10-21 16:29 ` Property types changed in this series (was: [PATCH v7 00/65] Hi) Markus Armbruster
2026-10-22  6:49   ` Property types changed in this series Markus Armbruster
2026-10-22  8:29     ` Ján Tomko

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=87mrs4a5qu.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=17746591750@163.com \
    --cc=FangSheng.Huang@amd.com \
    --cc=adityag@linux.ibm.com \
    --cc=alex@shazbot.org \
    --cc=alifm@linux.ibm.com \
    --cc=alistair.francis@wdc.com \
    --cc=alistair@alistair23.me \
    --cc=amachhiw@linux.ibm.com \
    --cc=anisa.su@samsung.com \
    --cc=anisinha@redhat.com \
    --cc=anthony@xenproject.org \
    --cc=arei.gonglei@huawei.com \
    --cc=atar4qemu@gmail.com \
    --cc=berrange@redhat.com \
    --cc=berto@igalia.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=brueckner@linux.ibm.com \
    --cc=chao.liu@processmission.com \
    --cc=clg@kaod.org \
    --cc=clg@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=conor@kernel.org \
    --cc=daniel.barboza@oss.qualcomm.com \
    --cc=david@kernel.org \
    --cc=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=elena.ufimtseva@oracle.com \
    --cc=eric.auger@redhat.com \
    --cc=fam@euphon.net \
    --cc=farman@linux.ibm.com \
    --cc=farosas@suse.de \
    --cc=foss@defmacro.it \
    --cc=graf@amazon.com \
    --cc=harshpb@linux.ibm.com \
    --cc=hreitz@redhat.com \
    --cc=iii@linux.ibm.com \
    --cc=imammedo@redhat.com \
    --cc=its@irrelevant.dk \
    --cc=jag.raman@oracle.com \
    --cc=jamin_lin@aspeedtech.com \
    --cc=jasowangio@gmail.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=jic23@kernel.org \
    --cc=jiri@resnulli.us \
    --cc=jjherne@linux.ibm.com \
    --cc=john.levon@nutanix.com \
    --cc=jsnow@redhat.com \
    --cc=junjie.cao@intel.com \
    --cc=kane_chen@aspeedtech.com \
    --cc=kbusch@kernel.org \
    --cc=kfting@nuvoton.com \
    --cc=kkostiuk@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwolf@redhat.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=liwei1518@gmail.com \
    --cc=lixianglai@loongson.cn \
    --cc=lizhijian@fujitsu.com \
    --cc=luc@lmichel.fr \
    --cc=lvivier@redhat.com \
    --cc=maobibo@loongson.cn \
    --cc=marcandre.lureau@redhat.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=mchehab+huawei@kernel.org \
    --cc=michael.roth@amd.com \
    --cc=milesg@linux.ibm.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=mohamed@unpredictable.fr \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=palmer@dabbelt.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbarbuda@microsoft.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=phil@philjordan.eu \
    --cc=philmd@oss.qualcomm.com \
    --cc=pierrick.bouvier@oss.qualcomm.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=rathc@linux.ibm.com \
    --cc=rbolshakov@ddn.com \
    --cc=richard.henderson@linaro.org \
    --cc=sam@rfc1149.net \
    --cc=sebastian.huber@embedded-brains.de \
    --cc=slp@redhat.com \
    --cc=sstabellini@kernel.org \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=tangtao1634@phytium.com.cn \
    --cc=thanos.makatos@nutanix.com \
    --cc=titusr@google.com \
    --cc=wuhaotsh@google.com \
    --cc=xen-devel@lists.xenproject.org \
    --cc=yoshinori.sato@nifty.com \
    --cc=zhangckid@gmail.com \
    --cc=zhao1.liu@intel.com \
    --cc=zhenwei.pi@linux.dev \
    --cc=zhiwei_liu@linux.alibaba.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox