On Wed, Oct 22, 2025 at 2:15 PM Markus Armbruster <[email protected]> wrote:
>
> qdev_print_props() retrieves a property's value from its legacy
> property if it exists.  A legacy property is created by
> qdev_class_add_legacy_property() when the property has a print()
> method or does not have a get() method.
>
> If it has a print() method, the legacy property's value is obtained
> from the property's print() method.  This is used to format PCI
> addresses nicely, i.e. like 01.3 instead of 11.
>
> Else, if doesn't have a get() method, the legacy property is
> unreadable.  "info qtree" silently skips unreadable properties.
>
> Link properties don't have a get() method, and are therefore skipped.
> This is wrong, because the underlying QOM property *is* readable.
>
> Change qdev_print_props() to simply use a print() method directly if
> it exists, else get the value via QOM.
>
> "info qtree" now shows links fine.  For instance, machine "pc" onboard
> device "PIIX4_PM" property "bus" is now visible.
>
> Signed-off-by: Markus Armbruster <[email protected]>

Reviewed-by: Marc-André Lureau <[email protected]>

> ---
>  system/qdev-monitor.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c
> index 2ac92d0a07..850f0c6606 100644
> --- a/system/qdev-monitor.c
> +++ b/system/qdev-monitor.c
> @@ -745,19 +745,18 @@ static void qdev_print_props(Monitor *mon, DeviceState 
> *dev, DeviceClass *dc,
>      for (int i = 0, n = dc->props_count_; i < n; ++i) {
>          const Property *prop = &dc->props_[i];
>          char *value;
> -        char *legacy_name = g_strdup_printf("legacy-%s", prop->name);
>
> -        if (object_property_get_type(OBJECT(dev), legacy_name, NULL)) {
> -            value = object_property_get_str(OBJECT(dev), legacy_name, NULL);
> +        if (prop->info->print) {
> +            value = prop->info->print(OBJECT(dev), prop);
>          } else {
>              value = object_property_print(OBJECT(dev), prop->name, true,
>                                            NULL);
>          }
> -        g_free(legacy_name);
>
>          if (!value) {
>              continue;
>          }
> +
>          qdev_printf("%s = %s\n", prop->name,
>                      *value ? value : "<null>");
>          g_free(value);
> --
> 2.49.0
>
>


-- 
Marc-André Lureau

Reply via email to