From: Vladimir Sementsov-Ogievskiy Date: Tue, 24 Aug 2021 08:38:25 +0000 (+0300) Subject: qdev-properties: PropertyInfo: add realized_set_allowed field X-Git-Tag: v6.2.0-rc0~121^2~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=deb2bb163f798a4bc044be5e474792852cb0366b;p=thirdparty%2Fqemu.git qdev-properties: PropertyInfo: add realized_set_allowed field Add field, so property can declare support for setting the property when device is realized. To be used in the following commit. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Max Reitz Message-Id: <20210824083856.17408-4-vsementsov@virtuozzo.com> Signed-off-by: Hanna Reitz --- diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 50f40949f52..c34aac6ebc9 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -26,11 +26,11 @@ void qdev_prop_set_after_realize(DeviceState *dev, const char *name, /* returns: true if property is allowed to be set, false otherwise */ static bool qdev_prop_allow_set(Object *obj, const char *name, - Error **errp) + const PropertyInfo *info, Error **errp) { DeviceState *dev = DEVICE(obj); - if (dev->realized) { + if (dev->realized && !info->realized_set_allowed) { qdev_prop_set_after_realize(dev, name, errp); return false; } @@ -79,7 +79,7 @@ static void field_prop_set(Object *obj, Visitor *v, const char *name, { Property *prop = opaque; - if (!qdev_prop_allow_set(obj, name, errp)) { + if (!qdev_prop_allow_set(obj, name, prop->info, errp)) { return; } diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 0ef97d60ce4..f7925f67d03 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -32,6 +32,7 @@ struct PropertyInfo { const char *name; const char *description; const QEnumLookup *enum_table; + bool realized_set_allowed; /* allow setting property on realized device */ int (*print)(Object *obj, Property *prop, char *dest, size_t len); void (*set_default_value)(ObjectProperty *op, const Property *prop); ObjectProperty *(*create)(ObjectClass *oc, const char *name,