On Wed, 3 Dec 2025 01:04:59 +0800 Zhao Liu <[email protected]> wrote:
> With deprecation flag, make qdev property interfaces to accept > ObjectPropertyFlags, and provide the boolean and uint8_t macro variants > to help on deprecation as examples. > > Signed-off-by: Zhao Liu <[email protected]> > --- > hw/core/qdev-properties.c | 24 +++++++++++++----------- > include/hw/qdev-properties.h | 18 ++++++++++++++++++ > 2 files changed, 31 insertions(+), 11 deletions(-) > > diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c > index 422a486969c8..2cd7de5cec2d 100644 > --- a/hw/core/qdev-properties.c > +++ b/hw/core/qdev-properties.c > @@ -1069,11 +1069,12 @@ void qdev_property_add_static(DeviceState *dev, const > Property *prop) > > assert(!prop->info->create); > > - op = object_property_add(obj, prop->name, prop->info->type, > - field_prop_getter(prop->info), > - field_prop_setter(prop->info), > - prop->info->release, > - (Property *)prop); > + op = object_property_try_add_full(obj, prop->name, prop->info->type, > + field_prop_getter(prop->info), > + field_prop_setter(prop->info), > + prop->info->release, > + prop->flags, (Property *)prop, > + &error_abort); > > object_property_set_description(obj, prop->name, > prop->info->description); > @@ -1095,12 +1096,13 @@ static void qdev_class_add_property(DeviceClass > *klass, const char *name, > if (prop->info->create) { > op = prop->info->create(oc, name, prop); > } else { > - op = object_class_property_add(oc, > - name, prop->info->type, > - field_prop_getter(prop->info), > - field_prop_setter(prop->info), > - prop->info->release, > - (Property *)prop); > + op = object_class_property_add_full(oc, > + name, prop->info->type, > + field_prop_getter(prop->info), > + field_prop_setter(prop->info), > + prop->info->release, > + prop->flags, > + (Property *)prop); > } > if (prop->set_default) { > prop->info->set_default_value(op, prop); > diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h > index 60b81330097d..383f3f54f0ab 100644 > --- a/include/hw/qdev-properties.h > +++ b/include/hw/qdev-properties.h > @@ -11,6 +11,7 @@ > * and the field retains whatever value it was given by instance_init). > * @defval: default value for the property. This is used only if @set_default > * is true. > + * @flags: property flags to control uses. > */ > struct Property { > const char *name; > @@ -27,6 +28,7 @@ struct Property { > int arrayfieldsize; > uint8_t bitnr; > bool set_default; > + uint8_t flags; > }; > > struct PropertyInfo { > @@ -102,6 +104,13 @@ extern const PropertyInfo qdev_prop_link; > .set_default = true, \ > .defval.u = (_type)_defval) > > +#define DEFINE_PROP_UNSIGNED_DEPRECATED(_name, _state, _field, \ > + _defval, _prop, _type) \ > + DEFINE_PROP(_name, _state, _field, _prop, _type, \ > + .set_default = true, \ > + .defval.u = (_type)_defval, \ > + .flags = OBJECT_PROPERTY_DEPRECATED) > + > #define DEFINE_PROP_UNSIGNED_NODEFAULT(_name, _state, _field, _prop, _type) \ adding flags to the end of the names, basicaly spawns a lot of vartions of the same macro, perhaps it's time to just add flags field and consoladate existing 'flag named' variants, the one won't need to introduce DEFINE_PROP_UNSIGNED_DEPRECATED at all, just use appropriate flag(s) when decaring property. > DEFINE_PROP(_name, _state, _field, _prop, _type) > > @@ -123,6 +132,12 @@ extern const PropertyInfo qdev_prop_link; > .set_default = true, \ > .defval.u = (bool)_defval) > > +#define DEFINE_PROP_BOOL_DEPRECATED(_name, _state, _field, _defval) \ > + DEFINE_PROP(_name, _state, _field, qdev_prop_bool, bool, \ > + .set_default = true, \ > + .defval.u = (bool)_defval, \ > + .flags = OBJECT_PROPERTY_DEPRECATED) > + > /** > * The DEFINE_PROP_UINT64_CHECKMASK macro checks a user-supplied value > * against corresponding bitmask, rejects the value if it violates. > @@ -189,6 +204,9 @@ extern const PropertyInfo qdev_prop_link; > #define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \ > DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size32, uint32_t) > > +#define DEFINE_PROP_UINT8_DEPRECATED(_n, _s, _f, _d) \ > + DEFINE_PROP_UNSIGNED_DEPRECATED(_n, _s, _f, _d, qdev_prop_uint8, uint8_t) > + > /* > * Set properties between creation and realization. > *
