[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 42/53] qdev: Reuse object_property_add_field() when adding arr
From: |
Eduardo Habkost |
Subject: |
[PATCH v3 42/53] qdev: Reuse object_property_add_field() when adding array elements |
Date: |
Thu, 12 Nov 2020 16:43:39 -0500 |
Now that we call object_property_add() with exactly the same
arguments as object_property_add_field() does, we can just reuse
the function. We can now use a stack variable for the new
Property struct, because object_property_add_field() will copy
the struct.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v2 -> v3:
* Fix memory leak from v2, after making
object_property_add_field() copy the Property struct
Changes v1 -> v2:
* Now we don't need to hack ObjectProperty.release anymore,
patch became trivial
---
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 | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 451bb54cf6..83fd45add0 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -576,23 +576,17 @@ 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);
- Property *arrayprop = g_new0(Property, 1);
- ObjectProperty *elmop;
- arrayprop->info = prop->arrayinfo;
+ Property arrayprop = { };
+ 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->offset = eltptr - (void *)obj;
- assert(object_field_prop_ptr(obj, arrayprop) == eltptr);
- elmop = object_property_add(obj, propname,
- arrayprop->info->name,
- field_prop_getter(arrayprop->info),
- field_prop_setter(arrayprop->info),
- static_prop_release_dynamic_prop,
- arrayprop);
- elmop->allow_set = op->allow_set;
+ arrayprop.offset = eltptr - (void *)obj;
+ assert(object_field_prop_ptr(obj, &arrayprop) == eltptr);
+ object_property_add_field(obj, propname, &arrayprop,
+ op->allow_set);
}
}
--
2.28.0
- [PATCH v3 34/53] qdev: Make qdev_prop_allow_set() a ObjectProperty.allow_set callback, (continued)
- [PATCH v3 34/53] qdev: Make qdev_prop_allow_set() a ObjectProperty.allow_set callback, Eduardo Habkost, 2020/11/12
- [PATCH v3 36/53] qdev: Don't set .name_template for array elements, Eduardo Habkost, 2020/11/12
- [PATCH v3 35/53] qdev: Rename Property.name to Property.name_template, Eduardo Habkost, 2020/11/12
- [PATCH v3 37/53] qdev: Remove ArrayElementProperty.propname field, Eduardo Habkost, 2020/11/12
- [PATCH v3 38/53] qdev: Remove ArrayElementProperty.release field, Eduardo Habkost, 2020/11/12
- [PATCH v3 39/53] qdev: Get rid of ArrayElementProperty struct, Eduardo Habkost, 2020/11/12
- [PATCH v3 40/53] qdev: Rename array_element_release() to static_prop_release_dynamic_prop(), Eduardo Habkost, 2020/11/12
- [PATCH v3 41/53] qdev: Make object_property_add_field() copy the Property struct, Eduardo Habkost, 2020/11/12
- [PATCH v3 44/53] qom: Add new qom.h header, Eduardo Habkost, 2020/11/12
- [PATCH v3 43/53] qdev: Move static_prop_release_dynamic_prop() closer to its usage, Eduardo Habkost, 2020/11/12
- [PATCH v3 42/53] qdev: Reuse object_property_add_field() when adding array elements,
Eduardo Habkost <=
- [PATCH v3 45/53] qdev: Move core field property code to QOM, Eduardo Habkost, 2020/11/12
- [PATCH v3 46/53] qdev: Move base property types to qom/property-types.c, Eduardo Habkost, 2020/11/12
- [PATCH v3 47/53] qom: Include static property API reference in documentation, Eduardo Habkost, 2020/11/12
- [PATCH v3 48/53] qom: object_class_property_add_field() function, Eduardo Habkost, 2020/11/12
- [PATCH v3 49/53] qom: FIELD_PROP macro, Eduardo Habkost, 2020/11/12
- [PATCH v3 50/53] qom: Delete DEFINE_PROP_*SIGNED_NODEFAULT macro, Eduardo Habkost, 2020/11/12
- [PATCH v3 52/53] tests: Use field property at check-qom-proplist test case, Eduardo Habkost, 2020/11/12
- [PATCH v3 51/53] qom: PROP_* macros, Eduardo Habkost, 2020/11/12
- [PATCH v3 53/53] sev: Use class properties, Eduardo Habkost, 2020/11/12