[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 3/6] qdev: Register static properties as clas
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [PATCH v2 3/6] qdev: Register static properties as class properties |
Date: |
Mon, 24 Oct 2016 15:53:30 +0200 |
On Thu, 20 Oct 2016 15:47:56 -0200
Eduardo Habkost <address@hidden> wrote:
> Instead of registering qdev static properties on instance_init,
> register them as class properties, at qdev_class_set_props().
>
> qdev_property_add_legacy() was replaced by an equivalent
> qdev_class_property_add_legacy() function.
> qdev_property_add_static(), on the other hand, can't be
> eliminated yet because it is used by arm_cpu_post_init().
>
> Signed-off-by: Eduardo Habkost <address@hidden>
> ---
> hw/core/qdev.c | 69
> ++++++++++++++++++++++++++++++++++++++++++++++++----------
> 1 file changed, 58 insertions(+), 11 deletions(-)
>
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 85952e8..f7d9030 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -739,12 +739,12 @@ static void qdev_get_legacy_property(Object *obj,
> Visitor *v,
> }
>
> /**
> - * qdev_property_add_legacy:
> - * @dev: Device to add the property to.
> + * qdev_class_property_add_legacy:
> + * @oc: Device to add the property to.
> * @prop: The qdev property definition.
> * @errp: location to store error information.
> *
> - * Add a legacy QOM property to @dev for qdev property @prop.
> + * Add a legacy QOM property to @oc for qdev property @prop.
> * On error, store error in @errp.
> *
> * Legacy properties are string versions of QOM properties. The format of
> @@ -754,7 +754,7 @@ static void qdev_get_legacy_property(Object *obj, Visitor
> *v,
> * Do not use this is new code! QOM Properties added through this interface
> * will be given names in the "legacy" namespace.
> */
> -static void qdev_property_add_legacy(DeviceState *dev, Property *prop,
> +static void qdev_class_property_add_legacy(ObjectClass *oc, Property *prop,
> Error **errp)
^^^^
need to fix alignment??
> {
> gchar *name;
> @@ -765,11 +765,13 @@ static void qdev_property_add_legacy(DeviceState *dev,
> Property *prop,
> }
>
> name = g_strdup_printf("legacy-%s", prop->name);
> - object_property_add(OBJECT(dev), name, "str",
> - prop->info->print ? qdev_get_legacy_property :
> prop->info->get,
> - NULL,
> - NULL,
> - prop, errp);
> + object_class_property_add(oc, name, "str",
> + prop->info->print ?
alignment off by 1 starting from here?
> + qdev_get_legacy_property :
> + prop->info->get,
> + NULL,
> + NULL,
> + prop, errp);
>
> g_free(name);
> }
> @@ -844,6 +846,45 @@ void qdev_property_add_static(DeviceState *dev, Property
> *prop,
> qdev_property_set_to_default(dev, prop, &error_abort);
> }
>
> +/**
> + * qdev_class_property_add_static:
> + * @oc: Class to add the property to.
> + * @prop: The qdev property definition.
> + * @errp: location to store error information.
> + *
> + * Add a static QOM property to @oc for qdev property @prop.
> + * On error, store error in @errp. Static properties access data in a
> struct.
> + * The type of the QOM property is derived from prop->info.
> + */
> +static void qdev_class_property_add_static(ObjectClass *oc, Property *prop,
> + Error **errp)
> +{
> + Error *local_err = NULL;
> +
> + /*
> + * TODO qdev_prop_ptr does not have getters or setters. It must
> + * go now that it can be replaced with links. The test should be
> + * removed along with it: all static properties are read/write.
> + */
> + if (!prop->info->get && !prop->info->set) {
> + return;
> + }
> +
> + object_class_property_add(oc, prop->name, prop->info->name,
> + prop->info->get, prop->info->set,
> + prop->info->release,
> + prop, &local_err);
> +
> + if (local_err) {
> + error_propagate(errp, local_err);
> + return;
> + }
> +
> + object_class_property_set_description(oc, prop->name,
> + prop->info->description,
> + &error_abort);
> +}
> +
> /* @qdev_alias_all_properties - Add alias properties to the source object for
> * all qdev properties on the target DeviceState.
> */
> @@ -867,8 +908,15 @@ void qdev_alias_all_properties(DeviceState *target,
> Object *source)
>
> void device_class_set_props(DeviceClass *dc, Property *props)
> {
> + Property *prop;
> + ObjectClass *oc = OBJECT_CLASS(dc);
> +
> assert(!dc->props);
> dc->props = props;
> + for (prop = dc->props; prop && prop->name; prop++) {
> + qdev_class_property_add_legacy(oc, prop, &error_abort);
> + qdev_class_property_add_static(oc, prop, &error_abort);
> + }
> }
>
> static int qdev_add_hotpluggable_device(Object *obj, void *opaque)
> @@ -1068,8 +1116,7 @@ static void device_initfn(Object *obj)
> class = object_get_class(OBJECT(dev));
> do {
> for (prop = DEVICE_CLASS(class)->props; prop && prop->name; prop++) {
> - qdev_property_add_legacy(dev, prop, &error_abort);
> - qdev_property_add_static(dev, prop, &error_abort);
> + qdev_property_set_to_default(dev, prop, &error_abort);
> }
> class = object_class_get_parent(class);
> } while (class != object_class_by_name(TYPE_DEVICE));
- [Qemu-devel] [PATCH v2 0/6] qdev class properties + abstract class support on device-list-properties, Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 2/6] qdev: Extract property-default code to qdev_property_set_to_default(), Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 3/6] qdev: Register static properties as class properties, Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 4/6] qom: object_class_property_iter_init() function, Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 5/6] qmp: Support abstract classes on device-list-properties, Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 6/6] qdev: Warning about using object_class_property_add() in new code, Eduardo Habkost, 2016/10/20
- [Qemu-devel] [PATCH v2 1/6] qdev: device_class_set_props() function, Eduardo Habkost, 2016/10/20
- Re: [Qemu-devel] [PATCH v2 0/6] qdev class properties + abstract class support on device-list-properties, no-reply, 2016/10/20