[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.9 2/2] qdev: Change signature of PropertyInfo:
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PATCH for-2.9 2/2] qdev: Change signature of PropertyInfo::release |
Date: |
Wed, 16 Nov 2016 16:57:44 -0200 |
Change the function signature to make implementations simpler and
safer. No void pointers and Object->DeviceState casts inside each
release function.
Signed-off-by: Eduardo Habkost <address@hidden>
---
hw/core/qdev-properties-system.c | 8 ++------
hw/core/qdev-properties.c | 10 +++++-----
hw/core/qdev.c | 10 +++++++++-
include/hw/qdev-core.h | 2 +-
4 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 1b7ea50..4f49109 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -112,10 +112,8 @@ fail:
}
}
-static void release_drive(Object *obj, const char *name, void *opaque)
+static void release_drive(DeviceState *dev, Property *prop)
{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
BlockBackend **ptr = qdev_get_prop_ptr(dev, prop);
if (*ptr) {
@@ -210,10 +208,8 @@ static void set_chr(Object *obj, Visitor *v, const char
*name, void *opaque,
g_free(str);
}
-static void release_chr(Object *obj, const char *name, void *opaque)
+static void release_chr(DeviceState *dev, Property *prop)
{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
CharBackend *be = qdev_get_prop_ptr(dev, prop);
qemu_chr_fe_deinit(be);
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 2a82768..3709050 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -383,10 +383,9 @@ PropertyInfo qdev_prop_uint64 = {
/* --- string --- */
-static void release_string(Object *obj, const char *name, void *opaque)
+static void release_string(DeviceState *dev, Property *prop)
{
- Property *prop = opaque;
- g_free(*(char **)qdev_get_prop_ptr(DEVICE(obj), prop));
+ g_free(*(char **)qdev_get_prop_ptr(dev, prop));
}
static void get_string(Object *obj, Visitor *v, const char *name,
@@ -823,7 +822,7 @@ PropertyInfo qdev_prop_pci_host_devaddr = {
typedef struct {
struct Property prop;
char *propname;
- ObjectPropertyRelease *release;
+ void (*release)(DeviceState *dev, Property *prop);
} ArrayElementProperty;
/* object property release callback for array element properties:
@@ -832,9 +831,10 @@ typedef struct {
*/
static void array_element_release(Object *obj, const char *name, void *opaque)
{
+ DeviceState *dev = DEVICE(obj);
ArrayElementProperty *p = opaque;
if (p->release) {
- p->release(obj, name, opaque);
+ p->release(dev, &p->prop);
}
g_free(p->propname);
g_free(p);
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 5783442..b859e15 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -774,6 +774,14 @@ static void qdev_property_add_legacy(DeviceState *dev,
Property *prop,
g_free(name);
}
+static void qdev_release_prop(Object *obj, const char *name, void *opaque)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+
+ prop->info->release(dev, prop);
+}
+
/**
* qdev_property_add_static:
* @dev: Device to add the property to.
@@ -801,7 +809,7 @@ void qdev_property_add_static(DeviceState *dev, Property
*prop,
object_property_add(obj, prop->name, prop->info->name,
prop->info->get, prop->info->set,
- prop->info->release,
+ prop->info->release ? qdev_release_prop : NULL,
prop, &local_err);
if (local_err) {
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 2c97347..5ea2095 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -251,7 +251,7 @@ struct PropertyInfo {
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
ObjectPropertyAccessor *get;
ObjectPropertyAccessor *set;
- ObjectPropertyRelease *release;
+ void (*release)(DeviceState *dev, Property *prop);
};
/**
--
2.7.4