qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH qom-cpu for-1.5 2/4] qdev: Introduce qdev_prop_s


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH qom-cpu for-1.5 2/4] qdev: Introduce qdev_prop_set_custom_globals()
Date: Thu, 2 May 2013 16:08:30 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, May 01, 2013 at 06:07:18PM +0200, Andreas Färber wrote:
> Reuse it in qdev_prop_set_globals().
> 
> Signed-off-by: Andreas Färber <address@hidden>

Very useful to allow us to implement sane bugfixes while the QOM
conversion is still work in progress, and much more flexible than having
to write special-purpose compat functions for code that isn't completely
QOMified yet.

Reviewed-by: Eduardo Habkost <address@hidden>

I assume that although this works with "-global" on the command-line, we
will try to use the (currently) fake class names from patch 3/4 only for
the internal machine-type compat_props tables, and discourage users from
using them in the command-line.


> ---
>  hw/core/qdev-properties.c    | 35 ++++++++++++++++++++++++-----------
>  include/hw/qdev-properties.h |  2 ++
>  2 files changed, 26 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 716ba19..68d1bff 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -1099,23 +1099,36 @@ void qdev_prop_register_global_list(GlobalProperty 
> *props)
>      }
>  }
>  
> +void qdev_prop_set_custom_globals(DeviceState *dev, const char *driver,
> +                                  Error **errp)
> +{
> +    GlobalProperty *prop;
> +
> +    QTAILQ_FOREACH(prop, &global_props, next) {
> +        Error *err = NULL;
> +
> +        if (strcmp(driver, prop->driver) != 0) {
> +            continue;
> +        }
> +        qdev_prop_parse(dev, prop->property, prop->value, &err);
> +        if (err != NULL) {
> +            error_propagate(errp, err);
> +            return;
> +        }
> +    }
> +}
> +
>  void qdev_prop_set_globals(DeviceState *dev, Error **errp)
>  {
>      ObjectClass *class = object_get_class(OBJECT(dev));
>  
>      do {
> -        GlobalProperty *prop;
> -        QTAILQ_FOREACH(prop, &global_props, next) {
> -            Error *err = NULL;
> +        Error *err = NULL;
>  
> -            if (strcmp(object_class_get_name(class), prop->driver) != 0) {
> -                continue;
> -            }
> -            qdev_prop_parse(dev, prop->property, prop->value, &err);
> -            if (err != NULL) {
> -                error_propagate(errp, err);
> -                return;
> -            }
> +        qdev_prop_set_custom_globals(dev, object_class_get_name(class), 
> &err);
> +        if (err != NULL) {
> +            error_propagate(errp, err);
> +            return;
>          }
>          class = object_class_get_parent(class);
>      } while (class);
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 38469d4..833300c 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -169,6 +169,8 @@ void qdev_prop_set_ptr(DeviceState *dev, const char 
> *name, void *value);
>  void qdev_prop_register_global(GlobalProperty *prop);
>  void qdev_prop_register_global_list(GlobalProperty *props);
>  void qdev_prop_set_globals(DeviceState *dev, Error **errp);
> +void qdev_prop_set_custom_globals(DeviceState *dev, const char *driver,
> +                                  Error **errp);
>  void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
>                                      Property *prop, const char *value);
>  
> -- 
> 1.8.1.4
> 

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]