qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Cole Robinson <crobinso@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>, qemu-devel@nongnu.org
Cc: Andreas Faerber <afaerber@suse.de>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output
Date: Wed, 09 Jul 2014 11:20:11 -0400	[thread overview]
Message-ID: <53BD5DAB.7070701@redhat.com> (raw)
In-Reply-To: <1404907292-20442-3-git-send-email-stefanha@redhat.com>

On 07/09/2014 08:01 AM, Stefan Hajnoczi wrote:
> Update -device FOO,help to include QOM properties in addition to qdev
> properties.  Devices are gradually adding more QOM properties that are
> not reflected as qdev properties.
> 
> It is important to report all device properties since management tools
> like libvirt use this information (and device-list-properties QMP) to
> detect the presence of QEMU features.
> 
> This patch reuses the device-list-properties QMP machinery to avoid code
> duplication.
> 
> Reported-by: Cole Robinson <crobinso@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  qdev-monitor.c | 40 +++++++++++++++++-----------------------
>  1 file changed, 17 insertions(+), 23 deletions(-)
> 
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index f87f3d8..5fe5e75 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -182,9 +182,10 @@ static const char *find_typename_by_alias(const char *alias)
>  
>  int qdev_device_help(QemuOpts *opts)
>  {
> +    Error *local_err = NULL;
>      const char *driver;
> -    Property *prop;
> -    ObjectClass *klass;
> +    DevicePropertyInfoList *prop_list;
> +    DevicePropertyInfoList *prop;
>  
>      driver = qemu_opt_get(opts, "driver");
>      if (driver && is_help_option(driver)) {
> @@ -196,35 +197,28 @@ int qdev_device_help(QemuOpts *opts)
>          return 0;
>      }
>  
> -    klass = object_class_by_name(driver);
> -    if (!klass) {
> +    if (!object_class_by_name(driver)) {
>          const char *typename = find_typename_by_alias(driver);
>  
>          if (typename) {
>              driver = typename;
> -            klass = object_class_by_name(driver);
>          }
>      }
>  
> -    if (!object_class_dynamic_cast(klass, TYPE_DEVICE)) {
> -        return 0;
> +    prop_list = qmp_device_list_properties(driver, &local_err);
> +    if (!prop_list) {
> +        error_printf("%s\n", error_get_pretty(local_err));
> +        error_free(local_err);
> +        return 1;
>      }
> -    do {
> -        for (prop = DEVICE_CLASS(klass)->props; prop && prop->name; prop++) {
> -            /*
> -             * TODO Properties without a parser are just for dirty hacks.
> -             * qdev_prop_ptr is the only such PropertyInfo.  It's marked
> -             * for removal.  This conditional should be removed along with
> -             * it.
> -             */
> -            if (!prop->info->set) {
> -                continue;           /* no way to set it, don't show */
> -            }
> -            error_printf("%s.%s=%s\n", driver, prop->name,
> -                         prop->info->legacy_name ?: prop->info->name);
> -        }
> -        klass = object_class_get_parent(klass);
> -    } while (klass != object_class_by_name(TYPE_DEVICE));
> +
> +    for (prop = prop_list; prop; prop = prop->next) {
> +        error_printf("%s.%s=%s\n", driver,
> +                     prop->value->name,
> +                     prop->value->type);
> +    }
> +
> +    qapi_free_DevicePropertyInfoList(prop_list);
>      return 1;
>  }
>  
> 

Ah, I was a bit confused here. The actual issue I was hitting is fixed by the
commit that Paolo pointed to:

commit f4eb32b590bf58c1c67570775eb78beb09964fad
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date:   Tue May 20 14:29:01 2014 +0200

    qmp: show QOM properties in device-list-properties

All libvirt versions since 1.0.0 use device-list-properties over the command
line introspection. I tried testing with libvirt 0.10.2.8 but there are other
issues that trip it up, like changed -help output, so not sure if we even care
about that case.

I did verify that -device virtio-blk,? now lists bootindex again, so:

Tested-by: Cole Robinson <crobinso@redhat.com>

Thanks,
Cole

  parent reply	other threads:[~2014-07-09 15:20 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-09 12:01 [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device properties in -device FOO, help output Stefan Hajnoczi
2014-07-09 12:01 ` [Qemu-devel] [PATCH for-2.1 1/2] qmp: hide "hotplugged" device property from device-list-properties Stefan Hajnoczi
2014-07-09 12:47   ` Eric Blake
2014-07-09 12:01 ` [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output Stefan Hajnoczi
2014-07-09 12:49   ` Eric Blake
2014-07-09 15:20   ` Cole Robinson [this message]
2014-07-29 13:32 ` [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device " Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53BD5DAB.7070701@redhat.com \
    --to=crobinso@redhat.com \
    --cc=afaerber@suse.de \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).