All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, "Markus Armbruster" <armbru@redhat.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v2 3/6] qdev: Register static properties as class properties
Date: Mon, 24 Oct 2016 15:53:30 +0200	[thread overview]
Message-ID: <20161024155330.6ebf67a1@nial.brq.redhat.com> (raw)
In-Reply-To: <1476985679-4456-4-git-send-email-ehabkost@redhat.com>

On Thu, 20 Oct 2016 15:47:56 -0200
Eduardo Habkost <ehabkost@redhat.com> 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 <ehabkost@redhat.com>
> ---
>  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));

  reply	other threads:[~2016-10-24 13:53 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-20 17:47 [Qemu-devel] [PATCH v2 0/6] qdev class properties + abstract class support on device-list-properties Eduardo Habkost
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 1/6] qdev: device_class_set_props() function Eduardo Habkost
2016-10-26 13:34   ` Igor Mammedov
2016-10-26 14:31     ` Eduardo Habkost
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 2/6] qdev: Extract property-default code to qdev_property_set_to_default() Eduardo Habkost
2016-10-24 13:54   ` Igor Mammedov
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 3/6] qdev: Register static properties as class properties Eduardo Habkost
2016-10-24 13:53   ` Igor Mammedov [this message]
2016-10-25 19:07     ` [Qemu-devel] [PATCH] fixup! " Eduardo Habkost
2016-10-26 15:02   ` [Qemu-devel] [PATCH v2 3/6] " Igor Mammedov
2016-10-26 15:59     ` Eduardo Habkost
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 4/6] qom: object_class_property_iter_init() function Eduardo Habkost
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 5/6] qmp: Support abstract classes on device-list-properties Eduardo Habkost
2016-10-20 17:47 ` [Qemu-devel] [PATCH v2 6/6] qdev: Warning about using object_class_property_add() in new code Eduardo Habkost
2016-10-20 17:47   ` Eduardo Habkost
2016-10-20 18:06 ` [Qemu-devel] [PATCH v2 0/6] qdev class properties + abstract class support on device-list-properties no-reply
2016-10-20 18:08   ` Eduardo Habkost

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=20161024155330.6ebf67a1@nial.brq.redhat.com \
    --to=imammedo@redhat.com \
    --cc=afaerber@suse.de \
    --cc=armbru@redhat.com \
    --cc=ehabkost@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.