[Qemu-devel] [PATCH v6 01/10] machine: export register_compat_prop()

Peter Xu posted 10 patches 8 years, 7 months ago
Only 8 patches received!
[Qemu-devel] [PATCH v6 01/10] machine: export register_compat_prop()
Posted by Peter Xu 8 years, 7 months ago
We have HW_COMPAT_*, however that's only bound to machines, not other
things (like accelerators).  Behind it, it was register_compat_prop()
that played the trick.  Let's export the function for further use
outside HW_COMPAT_* magic.

Meanwhile, move it to qdev-properties.c where seems more proper (since
it'll be used not only in machine codes).

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 hw/core/machine.c            | 13 -------------
 hw/core/qdev-properties.c    | 14 ++++++++++++++
 include/hw/qdev-properties.h | 23 +++++++++++++++++++++++
 3 files changed, 37 insertions(+), 13 deletions(-)

diff --git a/hw/core/machine.c b/hw/core/machine.c
index 2e7e977..ecb5552 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -770,19 +770,6 @@ static void machine_class_finalize(ObjectClass *klass, void *data)
     g_free(mc->name);
 }
 
-static void register_compat_prop(const char *driver,
-                                 const char *property,
-                                 const char *value)
-{
-    GlobalProperty *p = g_new0(GlobalProperty, 1);
-    /* Machine compat_props must never cause errors: */
-    p->errp = &error_abort;
-    p->driver = driver;
-    p->property = property;
-    p->value = value;
-    qdev_prop_register_global(p);
-}
-
 static void machine_register_compat_for_subclass(ObjectClass *oc, void *opaque)
 {
     GlobalProperty *p = opaque;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 68cd653..adf62ad 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1084,6 +1084,20 @@ void qdev_prop_register_global(GlobalProperty *prop)
     global_props = g_list_append(global_props, prop);
 }
 
+void register_compat_prop(const char *driver,
+                          const char *property,
+                          const char *value)
+{
+    GlobalProperty *p = g_new0(GlobalProperty, 1);
+
+    /* Any compat_props must never cause error */
+    p->errp = &error_abort;
+    p->driver = driver;
+    p->property = property;
+    p->value = value;
+    qdev_prop_register_global(p);
+}
+
 void qdev_prop_register_global_list(GlobalProperty *props)
 {
     int i;
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 1e5c928..4ab4359 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -208,6 +208,29 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
                                     Property *prop, const char *value);
 
 /**
+ * register_compat_prop:
+ *
+ * Register internal (not user-provided) global property, changing the
+ * default value of a given property in a device type.  This can be used
+ * for enabling machine-type compatibility or for enabling
+ * accelerator-specific defaults in devices.
+ *
+ * The property values set using this function must be always valid and
+ * never report setter errors, as they property have
+ * GlobalProperty::errp set to &error_abort.
+ *
+ * User-provided global properties should override internal global
+ * properties, so callers of this function should ensure that it is
+ * called before user-provided global properties are registered.
+ *
+ * @driver: Device type to be affected
+ * @property: Property whose default value is going to be changed
+ * @value: New default value for the property
+ */
+void register_compat_prop(const char *driver, const char *property,
+                          const char *value);
+
+/**
  * qdev_property_add_static:
  * @dev: Device to add the property to.
  * @prop: The qdev property definition.
-- 
2.7.4


Re: [Qemu-devel] [PATCH v6 01/10] machine: export register_compat_prop()
Posted by Eduardo Habkost 8 years, 7 months ago
On Tue, Jun 27, 2017 at 12:10:10PM +0800, Peter Xu wrote:
[...]
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 1e5c928..4ab4359 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -208,6 +208,29 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
>                                      Property *prop, const char *value);
>  
>  /**
> + * register_compat_prop:
> + *
> + * Register internal (not user-provided) global property, changing the
> + * default value of a given property in a device type.  This can be used
> + * for enabling machine-type compatibility or for enabling
> + * accelerator-specific defaults in devices.
> + *
> + * The property values set using this function must be always valid and
> + * never report setter errors, as they property have

Typo (my fault, sorry).  It should be "the property have", or "the
property will have".

With this fixed (which may be done manually by the maintainer when
applying):

Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>

> + * GlobalProperty::errp set to &error_abort.
> + *
> + * User-provided global properties should override internal global
> + * properties, so callers of this function should ensure that it is
> + * called before user-provided global properties are registered.
> + *
> + * @driver: Device type to be affected
> + * @property: Property whose default value is going to be changed
> + * @value: New default value for the property
> + */
> +void register_compat_prop(const char *driver, const char *property,
> +                          const char *value);
> +
> +/**
>   * qdev_property_add_static:
>   * @dev: Device to add the property to.
>   * @prop: The qdev property definition.
> -- 
> 2.7.4
> 

-- 
Eduardo

Re: [Qemu-devel] [PATCH v6 01/10] machine: export register_compat_prop()
Posted by Eric Blake 8 years, 7 months ago
On 06/27/2017 09:55 AM, Eduardo Habkost wrote:

>> + *
>> + * The property values set using this function must be always valid and
>> + * never report setter errors, as they property have
> 
> Typo (my fault, sorry).  It should be "the property have", or "the
> property will have".
> 

"the property will have"

> With this fixed (which may be done manually by the maintainer when
> applying):
> 
> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
> 
>> + * GlobalProperty::errp set to &error_abort.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Re: [Qemu-devel] [PATCH v6 01/10] machine: export register_compat_prop()
Posted by Peter Xu 8 years, 7 months ago
On Tue, Jun 27, 2017 at 10:05:54AM -0500, Eric Blake wrote:
> On 06/27/2017 09:55 AM, Eduardo Habkost wrote:
> 
> >> + *
> >> + * The property values set using this function must be always valid and
> >> + * never report setter errors, as they property have
> > 
> > Typo (my fault, sorry).  It should be "the property have", or "the
> > property will have".
> > 
> 
> "the property will have"

Thanks Eduardo & Eric for reviewing. I suppose this series will go
through Juan's tree if finally proper? Anyway, please anyone let me
know if we need a repost.

> 
> > With this fixed (which may be done manually by the maintainer when
> > applying):
> > 
> > Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>

-- 
Peter Xu