machine: export register_compat_prop()

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>
Message-Id: <1498536619-14548-2-git-send-email-peterx@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Peter Xu 2017-06-27 12:10:10 +08:00 committed by Juan Quintela
parent 577caa2672
commit 60d7cacac8
3 changed files with 37 additions and 13 deletions

View File

@ -770,19 +770,6 @@ static void machine_class_finalize(ObjectClass *klass, void *data)
g_free(mc->name); 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) static void machine_register_compat_for_subclass(ObjectClass *oc, void *opaque)
{ {
GlobalProperty *p = opaque; GlobalProperty *p = opaque;

View File

@ -1084,6 +1084,20 @@ void qdev_prop_register_global(GlobalProperty *prop)
global_props = g_list_append(global_props, 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) void qdev_prop_register_global_list(GlobalProperty *props)
{ {
int i; int i;

View File

@ -209,6 +209,29 @@ void qdev_prop_set_globals(DeviceState *dev);
void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
Property *prop, const char *value); 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 the property will 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: * qdev_property_add_static:
* @dev: Device to add the property to. * @dev: Device to add the property to.