From: Markus Armbruster <armbru@redhat.com>
To: marcandre.lureau@redhat.com
Cc: Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org, pbonzini@redhat.com,
berrange@redhat.com
Subject: Re: [PATCH v8 14/56] qom: New object_property_add() etc. parameter @qapi_type
Date: Mon, 02 Nov 2026 08:33:04 +0100 [thread overview]
Message-ID: <8733tjvgb3.fsf@pond.sub.org> (raw)
In-Reply-To: <179359759593.3177668.4375922821610706196.b4-review@b4> (marcandre lureau's message of "Mon, 02 Nov 2026 09:33:15 +0400")
marcandre.lureau@redhat.com writes:
>> This permits setting ObjectProperty's optional @qapi_type. For now,
>> all callers pass null. Callers updated with this Coccinelle script:
>>
>> @@
>> identifier fun = {
>> object_property_try_add, object_property_add, object_class_property_add
>> };
>> expression obj, name, type;
>> @@
>> - fun(obj, name, type,
>> + fun(obj, name, type, NULL,
>> ...)
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> Message-ID: <20261101201717.3911097-15-armbru@redhat.com>
[...]
>> diff --git a/include/qom/object.h b/include/qom/object.h
>> index e9b380462ded..84b273e53545 100644
>> --- a/include/qom/object.h
>> +++ b/include/qom/object.h
>> @@ -1163,6 +1163,7 @@ void object_unref(void *obj);
>> * defined. Sub namespaces are constructed by using a prefix and then
>> * to angle brackets. For instance, the type 'virtio-net-pci' in the
>> * 'link' namespace would be 'link<virtio-net-pci>'.
>> + * @qapi_type: QAPI type info descriptor
>> * @get: The getter to be called to read a property. If this is NULL, then
>> * the property cannot be read.
>> * @set: the setter to be called to write a property. If this is NULL,
>> @@ -1188,6 +1189,7 @@ void object_unref(void *obj);
>> */
>> ObjectProperty *object_property_try_add(Object *obj, const char *name,
>> const char *type,
>> + QAPITypeInfo *qapi_type,
>
> should be const QAPITypeInfo *
Yes. Not caught by the compiler, because there are just three calls,
and I messed up the two of them that should pass something, as you noted
below. Not caught by my testing probably because pretty much nothing
uses them.
>> ObjectPropertyAccessor *get,
>> ObjectPropertyAccessor *set,
>> ObjectPropertyRelease *release,
>> @@ -1203,6 +1205,7 @@ ObjectProperty *object_property_try_add(Object *obj, const char *name,
>> * defined. Sub namespaces are constructed by using a prefix and then
>> * to angle brackets. For instance, the type 'virtio-net-pci' in the
>> * 'link' namespace would be 'link<virtio-net-pci>'.
>> + * @qapi_type: QAPI type info descriptor
>> * @get: The getter to be called to read a property. If this is NULL, then
>> * the property cannot be read.
>> * @set: the setter to be called to write a property. If this is NULL,
>> @@ -1220,6 +1223,7 @@ ObjectProperty *object_property_try_add(Object *obj, const char *name,
>> */
>> ObjectProperty *object_property_add(Object *obj, const char *name,
>> const char *type,
>> + const QAPITypeInfo *qapi_type,
>> ObjectPropertyAccessor *get,
>> ObjectPropertyAccessor *set,
>> ObjectPropertyRelease *release,
>> @@ -1237,6 +1241,7 @@ void object_property_del(Object *obj, const char *name);
>>
>> ObjectProperty *object_class_property_add(ObjectClass *klass, const char *name,
>> const char *type,
>> + const QAPITypeInfo *qapi_type,
>> ObjectPropertyAccessor *get,
>> ObjectPropertyAccessor *set,
>> ObjectPropertyRelease *release,
>> diff --git a/iothread.c b/iothread.c
>> index 76eea6df3861..7084d336a400 100644
>> --- a/iothread.c
>> +++ b/iothread.c
>> @@ -315,19 +315,19 @@ static void iothread_class_init(ObjectClass *klass, const void *class_data)
>> bc->init = iothread_init;
>> bc->update_params = iothread_set_aio_context_params;
>>
>> - object_class_property_add(klass, "poll-max-ns", "int64",
>> + object_class_property_add(klass, "poll-max-ns", "int64", NULL,
>> iothread_get_poll_param,
>> iothread_set_poll_param,
>> NULL, &poll_max_ns_info);
>> - object_class_property_add(klass, "poll-grow", "int64",
>> + object_class_property_add(klass, "poll-grow", "int64", NULL,
>> iothread_get_poll_param,
>> iothread_set_poll_param,
>> NULL, &poll_grow_info);
>> - object_class_property_add(klass, "poll-shrink", "int64",
>> + object_class_property_add(klass, "poll-shrink", "int64", NULL,
>> iothread_get_poll_param,
>> iothread_set_poll_param,
>> NULL, &poll_shrink_info);
>> - object_class_property_add(klass, "poll-weight", "int64",
>> + object_class_property_add(klass, "poll-weight", "int64", NULL,
>> iothread_get_poll_param,
>> iothread_set_poll_param,
>> NULL, &poll_weight_info);
>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>> index 5986fb1e8800..7d4a2db522ad 100644
>> --- a/net/colo-compare.c
>> +++ b/net/colo-compare.c
>> @@ -1373,15 +1373,15 @@ static void colo_compare_init(Object *obj)
>> object_property_add_str(obj, "notify_dev",
>> compare_get_notify_dev, compare_set_notify_dev);
>>
>> - object_property_add(obj, "compare_timeout", "uint64",
>> + object_property_add(obj, "compare_timeout", "uint64", NULL,
>> compare_get_timeout,
>> compare_set_timeout, NULL, NULL);
>>
>> - object_property_add(obj, "expired_scan_cycle", "uint32",
>> + object_property_add(obj, "expired_scan_cycle", "uint32", NULL,
>> compare_get_expired_scan_cycle,
>> compare_set_expired_scan_cycle, NULL, NULL);
>>
>> - object_property_add(obj, "max_queue_size", "uint32",
>> + object_property_add(obj, "max_queue_size", "uint32", NULL,
>> get_max_queue_size,
>> set_max_queue_size, NULL, NULL);
>>
>> diff --git a/net/dump.c b/net/dump.c
>> index 0c39f09892c2..558115b9c9e3 100644
>> --- a/net/dump.c
>> +++ b/net/dump.c
>> @@ -238,7 +238,8 @@ static void filter_dump_class_init(ObjectClass *oc, const void *data)
>> {
>> NetFilterClass *nfc = NETFILTER_CLASS(oc);
>>
>> - object_class_property_add(oc, "maxlen", "uint32", filter_dump_get_maxlen,
>> + object_class_property_add(oc, "maxlen", "uint32", NULL,
>> + filter_dump_get_maxlen,
>> filter_dump_set_maxlen, NULL, NULL);
>> object_class_property_add_str(oc, "file", file_dump_get_filename,
>> file_dump_set_filename);
>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>> index 427da24097f2..f56b2cfaf0b1 100644
>> --- a/net/filter-buffer.c
>> +++ b/net/filter-buffer.c
>> @@ -182,7 +182,7 @@ static void filter_buffer_class_init(ObjectClass *oc, const void *data)
>> {
>> NetFilterClass *nfc = NETFILTER_CLASS(oc);
>>
>> - object_class_property_add(oc, "interval", "uint32",
>> + object_class_property_add(oc, "interval", "uint32", NULL,
>> filter_buffer_get_interval,
>> filter_buffer_set_interval, NULL, NULL);
>>
>> diff --git a/qom/object.c b/qom/object.c
>> index c34b47312f29..0fbd4a7edfbe 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -1340,6 +1340,7 @@ void object_unref(void *objptr)
>>
>> ObjectProperty *
>> object_property_try_add(Object *obj, const char *name, const char *type,
>> + QAPITypeInfo *qapi_type,
>> ObjectPropertyAccessor *get,
>> ObjectPropertyAccessor *set,
>> ObjectPropertyRelease *release,
>> @@ -1357,8 +1358,8 @@ object_property_try_add(Object *obj, const char *name, const char *type,
>> for (i = 0; i < INT16_MAX; ++i) {
>> char *full_name = g_strdup_printf("%s[%d]", name_no_array, i);
>>
>> - ret = object_property_try_add(obj, full_name, type, get, set,
>> - release, opaque, NULL);
>> + ret = object_property_try_add(obj, full_name, type, NULL,
>
> Propagate @qapi_type to the generated name[i] properties.
Yes, this is #1, and ...
>> + get, set, release, opaque, NULL);
>> g_free(full_name);
>> if (ret) {
>> break;
>> @@ -1379,6 +1380,7 @@ object_property_try_add(Object *obj, const char *name, const char *type,
>>
>> prop->name = g_strdup(name);
>> prop->type = g_strdup(type);
>> + prop->qapi_type = qapi_type;
>>
>> prop->get = get;
>> prop->set = set;
>> @@ -1393,12 +1395,13 @@ object_property_try_add(Object *obj, const char *name, const char *type,
>>
>> ObjectProperty *
>> object_property_add(Object *obj, const char *name, const char *type,
>> + const QAPITypeInfo *qapi_type,
>> ObjectPropertyAccessor *get,
>> ObjectPropertyAccessor *set,
>> ObjectPropertyRelease *release,
>> void *opaque)
>> {
>> - return object_property_try_add(obj, name, type, get, set, release,
>> + return object_property_try_add(obj, name, type, NULL, get, set, release,
>
> This should pass @qapi_type also
... this is #2.
Thanks!
next prev parent reply other threads:[~2026-11-02 7:34 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-01 20:16 [PATCH v8 RESEND 00/56] qom/qdev: associate properties with QAPI schema types Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 01/56] qapi/schema: Rename .lookup_entity() and tighten return type Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 02/56] qapi: Ease access to introspection names Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 03/56] qapi/introspect: Simplify masked name comment emission slighly Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 04/56] qapi/introspect: Don't elide types Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 05/56] qapi: QAPISchemaVisitor.visit_needed() is now unused, drop Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 06/56] qapi/introspect: Tweak integer type masking Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 07/56] qapi: add QAPITypeInfo struct definition Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 08/56] qapi/gen: fix _module_basename for multi-dash 'what' parameters Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 09/56] qapi: add type-infos generator Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 10/56] qom: add qapi_type field to ObjectProperty Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 11/56] qapi/qom: add qapi-type to qom-list, qom-list-properties, qom-list-get Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 12/56] qom/qmp: populate qapi-type in QMP handlers Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 13/56] qom/qmp: populate description & default-value in qom_property_info() Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 14/56] qom: New object_property_add() etc. parameter @qapi_type Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-02 7:33 ` Markus Armbruster [this message]
2026-11-02 8:38 ` Markus Armbruster
2026-11-02 8:49 ` Marc-André Lureau
2026-11-01 20:16 ` [PATCH v8 15/56] qom/object: Move enum property code so it is together Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-01 20:16 ` [PATCH v8 16/56] qom: New object_property_add_enum() etc. parameter @qapi_type Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-01 20:16 ` [PATCH v8 17/56] tests: update check-qom-proplist for QAPI-aware property registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 18/56] qom: convert QAPI enum properties to QAPI-aware registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 19/56] qom: convert struct " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 20/56] x86: convert OnOffAuto " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 21/56] microvm: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 22/56] pc: convert OnOffAuto vmport property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 23/56] arm/virt: convert OnOffAuto acpi " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 24/56] riscv/virt: convert OnOffAuto properties " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 25/56] loongarch/virt: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 26/56] hostmem: convert OnOffAuto rom property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 27/56] sev: convert OnOffAuto legacy-vm-type " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 28/56] whpx: convert OnOffAuto hyperv " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 29/56] whpx: convert OnOffAuto arch properties " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 30/56] accel/kvm: convert OnOffSplit property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 31/56] whpx: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 32/56] ppc/spapr-caps: convert to QAPI-aware property registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 33/56] net/colo-compare: fix compare_timeout setter visitor type Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 34/56] net/colo-compare: fix max_queue_size " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 35/56] hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 36/56] qom: convert scalar properties to QAPI-aware registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 37/56] i386/cpu: convert strList property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 38/56] accel/hvf: convert OnOffSplit " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 39/56] i386/x86: convert SgxEPCList " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 40/56] virtio-balloon: convert guest-stats property to QAPI type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 41/56] qom: replace object_property_add_tm with StructTm " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 42/56] hw/nvdimm: convert UUID property to QAPI-aware registration Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 43/56] hw/s390-virtio-ccw: convert loadparm " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 44/56] hw/ppc/spapr_drc: convert fdt " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 45/56] hw/s390x: convert BootCertificatesList " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 46/56] qdev: add qapi_type field to PropertyInfo with fallback registration Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 47/56] qdev: convert core PropertyInfo definitions to use qapi_type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 48/56] qdev: convert system " Markus Armbruster
2026-11-02 9:49 ` [PATCH v8 48.5/56] hw/ufs: Convert PropertyInfo to QAPITypeInfo Markus Armbruster
2026-11-02 11:20 ` Marc-André Lureau
2026-11-01 20:17 ` [PATCH v8 49/56] hw: convert device-local PropertyInfo definitions to use qapi_type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 50/56] target/riscv: convert " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 51/56] qdev: " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 52/56] qdev: PropertyInfo.enum_table is no longer used, drop Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 53/56] hw/i386: convert PCSouthBridgeOption to QAPI enum Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 54/56] qom: Drop object_property_add_enum() parameter @lookup Markus Armbruster
2026-11-02 5:39 ` marcandre.lureau
2026-11-01 20:17 ` [PATCH v8 55/56] qom: use QAPITypeInfo in object_property_get_enum Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 56/56] tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema Markus Armbruster
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=8733tjvgb3.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.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.