[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 30/44] qdev: Get rid of ArrayElementProperty struct
From: |
Eduardo Habkost |
Subject: |
[PATCH v2 30/44] qdev: Get rid of ArrayElementProperty struct |
Date: |
Wed, 4 Nov 2020 11:00:07 -0500 |
Now that we don't store any additional data about the property in
AraryElementStruct, we don't need it anymore. We can just
allocate a Property struct directly.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in v2 of the series
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 41 ++++++++-------------------------------
1 file changed, 8 insertions(+), 33 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index a0192c3723..0aa482b3ab 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -525,30 +525,6 @@ const PropertyInfo qdev_prop_size32 = {
/* --- support for array properties --- */
-/* Used as an opaque for the object properties we add for each
- * array element. Note that the struct Property must be first
- * in the struct so that a pointer to this works as the opaque
- * for the underlying element's property hooks as well as for
- * our own release callback.
- */
-typedef struct {
- struct Property prop;
- ObjectPropertyRelease *release;
-} ArrayElementProperty;
-
-/* object property release callback for array element properties:
- * we call the underlying element's property release hook, and
- * then free the memory we allocated when we added the property.
- */
-static void array_element_release(Object *obj, const char *name, void *opaque)
-{
- ArrayElementProperty *p = opaque;
- if (p->release) {
- p->release(obj, name, opaque);
- }
- g_free(p);
-}
-
static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
@@ -589,21 +565,20 @@ static void set_prop_arraylen(Object *obj, Visitor *v,
const char *name,
*arrayptr = eltptr = g_malloc0(*alenptr * prop->arrayfieldsize);
for (i = 0; i < *alenptr; i++, eltptr += prop->arrayfieldsize) {
g_autofree char *propname = g_strdup_printf("%s[%d]", arrayname, i);
- ArrayElementProperty *arrayprop = g_new0(ArrayElementProperty, 1);
- arrayprop->release = prop->arrayinfo->release;
- arrayprop->prop.info = prop->arrayinfo;
+ Property *arrayprop = g_new0(Property, 1);
+ arrayprop->info = prop->arrayinfo;
/* This ugly piece of pointer arithmetic sets up the offset so
* that when the underlying get/set hooks call qdev_get_prop_ptr
* they get the right answer despite the array element not actually
* being inside the device struct.
*/
- arrayprop->prop.offset = eltptr - (void *)obj;
- assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
+ arrayprop->offset = eltptr - (void *)obj;
+ assert(qdev_get_prop_ptr(obj, arrayprop) == eltptr);
object_property_add(obj, propname,
- arrayprop->prop.info->name,
- field_prop_getter(arrayprop->prop.info),
- field_prop_setter(arrayprop->prop.info),
- array_element_release,
+ arrayprop->info->name,
+ field_prop_getter(arrayprop->info),
+ field_prop_setter(arrayprop->info),
+ arrayprop->info->release,
arrayprop);
}
}
--
2.28.0
- [PATCH v2 26/44] qdev: Rename Property.name to Property.qdev_prop_name, (continued)
- [PATCH v2 34/44] qdev: Make qdev_propinfo_get_uint16() static, Eduardo Habkost, 2020/11/04
- [PATCH v2 43/44] tests: Use field properties at check-qom-proplist test case, Eduardo Habkost, 2020/11/04
- [PATCH v2 19/44] qdev: Add name parameter to qdev_class_add_property(), Eduardo Habkost, 2020/11/04
- [PATCH v2 24/44] qdev: Make qdev_class_add_property() more flexible, Eduardo Habkost, 2020/11/04
- [PATCH v2 30/44] qdev: Get rid of ArrayElementProperty struct,
Eduardo Habkost <=
- [PATCH v2 44/44] machine: Register most properties as field properties, Eduardo Habkost, 2020/11/04
- [PATCH v2 38/44] qdev: Rename qdev_prop_* to prop_info_*, Eduardo Habkost, 2020/11/04
- [PATCH v2 37/44] qdev: Move qdev_prop_tpm declaration to tpm_prop.h, Eduardo Habkost, 2020/11/04
- [PATCH v2 25/44] qdev: Separate generic and device-specific property registration, Eduardo Habkost, 2020/11/04
- [PATCH v2 35/44] qdev: Rename qdev_propinfo_* to field_prop_*, Eduardo Habkost, 2020/11/04
- [PATCH v2 42/44] qom: Include static property API reference in documentation, Eduardo Habkost, 2020/11/04
- [PATCH v2 36/44] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr(), Eduardo Habkost, 2020/11/04
- Re: [PATCH v2 00/44] Make qdev static property API usable by any QOM type, no-reply, 2020/11/04