mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 02:24:38 +00:00
qdev: Legacy properties are now unused internally, drop
Legacy properties are an accidental and undocumented external
interface. qom-set doesn't work for them (no .set() method). qom-get
and qom-list-get work only when the underlying qdev property has a
.print() method, i.e. the PCI address properties, as explained in the
previous commit. Here's one that works:
(qemu) qom-get /machine/unattached/device[3]/pm addr
11
(qemu) qom-get /machine/unattached/device[3]/pm legacy-addr
"01.3"
And here's one that doesn't:
(qemu) qom-get /machine/unattached/device[3]/pm bus
"/machine/i440fx/pci.0"
(qemu) qom-get /machine/unattached/device[3]/pm legacy-bus
Error: Property 'PIIX4_PM.legacy-bus' is not readable
Actual use of this undocumented interface seems quite unlikely. A
deprecation period seems unnecessary. Drop it.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20251022101420.36059-4-armbru@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
[Commit message improved]
This commit is contained in:
@@ -1110,51 +1110,6 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
|
||||
object_class_property_set_description(oc, name, prop->info->description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Legacy property handling
|
||||
*/
|
||||
|
||||
static void qdev_get_legacy_property(Object *obj, Visitor *v,
|
||||
const char *name, void *opaque,
|
||||
Error **errp)
|
||||
{
|
||||
const Property *prop = opaque;
|
||||
char *s;
|
||||
|
||||
s = prop->info->print(obj, prop);
|
||||
visit_type_str(v, name, &s, errp);
|
||||
g_free(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdev_class_add_legacy_property:
|
||||
* @dev: Device to add the property to.
|
||||
* @prop: The qdev property definition.
|
||||
*
|
||||
* Add a legacy QOM property to @dev for qdev property @prop.
|
||||
*
|
||||
* Legacy properties are string versions of QOM properties. The format of
|
||||
* the string depends on the property type. Legacy properties are only
|
||||
* needed for "info qtree".
|
||||
*
|
||||
* Do not use this in new code! QOM Properties added through this interface
|
||||
* will be given names in the "legacy" namespace.
|
||||
*/
|
||||
static void qdev_class_add_legacy_property(DeviceClass *dc, const Property *prop)
|
||||
{
|
||||
g_autofree char *name = NULL;
|
||||
|
||||
/* Register pointer properties as legacy properties */
|
||||
if (!prop->info->print && prop->info->get) {
|
||||
return;
|
||||
}
|
||||
|
||||
name = g_strdup_printf("legacy-%s", prop->name);
|
||||
object_class_property_add(OBJECT_CLASS(dc), name, "str",
|
||||
prop->info->print ? qdev_get_legacy_property : prop->info->get,
|
||||
NULL, NULL, (Property *)prop);
|
||||
}
|
||||
|
||||
void device_class_set_props_n(DeviceClass *dc, const Property *props, size_t n)
|
||||
{
|
||||
/* We used a hole in DeviceClass because that's still a lot. */
|
||||
@@ -1167,7 +1122,6 @@ void device_class_set_props_n(DeviceClass *dc, const Property *props, size_t n)
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
const Property *prop = &props[i];
|
||||
assert(prop->name);
|
||||
qdev_class_add_legacy_property(dc, prop);
|
||||
qdev_class_add_property(dc, prop->name, prop);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user