All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device properties in -device FOO, help output
@ 2014-07-09 12:01 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
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2014-07-09 12:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: crobinso, Andreas Faerber, Stefan Hajnoczi, Markus Armbruster

These two patches fix the -device FOO,help output regression that Cole spotted
in QEMU 2.0-rc0.  The problem is that virtio-blk-pci qdev properties have been
converted to QOM alias properties but -device FOO,help shows only qdev
properties.

We simply need to update -device FOO,help code to use both qdev and QOM
properties.  Note that types change because a 'drive' qdev type is actually a
'str' QOM type.  We're moving more and more to QOM properties where the final
type for this property would be 'link<Drive>' or similar.

Cole: please confirm that this fixes the issue

Stefan Hajnoczi (2):
  qmp: hide "hotplugged" device property from device-list-properties
  qdev-monitor: include QOM properties in -device FOO,help output

 qdev-monitor.c | 40 +++++++++++++++++-----------------------
 qmp.c          |  1 +
 2 files changed, 18 insertions(+), 23 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH for-2.1 1/2] qmp: hide "hotplugged" device property from device-list-properties
  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 ` 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-29 13:32 ` [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device " Stefan Hajnoczi
  2 siblings, 1 reply; 7+ messages in thread
From: Stefan Hajnoczi @ 2014-07-09 12:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: crobinso, Andreas Faerber, Stefan Hajnoczi, Markus Armbruster

The "hotplugged" device property was not reported before commit
f4eb32b590bf58c1c67570775eb78beb09964fad ("qmp: show QOM properties in
device-list-properties").  Fix this difference.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 qmp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/qmp.c b/qmp.c
index 0d2553a..c6767c4 100644
--- a/qmp.c
+++ b/qmp.c
@@ -509,6 +509,7 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
         if (strcmp(prop->name, "type") == 0 ||
             strcmp(prop->name, "realized") == 0 ||
             strcmp(prop->name, "hotpluggable") == 0 ||
+            strcmp(prop->name, "hotplugged") == 0 ||
             strcmp(prop->name, "parent_bus") == 0) {
             continue;
         }
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output
  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:01 ` Stefan Hajnoczi
  2014-07-09 12:49   ` Eric Blake
  2014-07-09 15:20   ` Cole Robinson
  2014-07-29 13:32 ` [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device " Stefan Hajnoczi
  2 siblings, 2 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2014-07-09 12:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: crobinso, Andreas Faerber, Stefan Hajnoczi, Markus Armbruster

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;
 }
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.1 1/2] qmp: hide "hotplugged" device property from device-list-properties
  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
  0 siblings, 0 replies; 7+ messages in thread
From: Eric Blake @ 2014-07-09 12:47 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: Markus Armbruster, Andreas Faerber, crobinso

[-- Attachment #1: Type: text/plain, Size: 1034 bytes --]

On 07/09/2014 06:01 AM, Stefan Hajnoczi wrote:
> The "hotplugged" device property was not reported before commit
> f4eb32b590bf58c1c67570775eb78beb09964fad ("qmp: show QOM properties in
> device-list-properties").  Fix this difference.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  qmp.c | 1 +
>  1 file changed, 1 insertion(+)

Reviewed-by: Eric Blake <eblake@redhat.com>

> 
> diff --git a/qmp.c b/qmp.c
> index 0d2553a..c6767c4 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -509,6 +509,7 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
>          if (strcmp(prop->name, "type") == 0 ||
>              strcmp(prop->name, "realized") == 0 ||
>              strcmp(prop->name, "hotpluggable") == 0 ||
> +            strcmp(prop->name, "hotplugged") == 0 ||
>              strcmp(prop->name, "parent_bus") == 0) {
>              continue;
>          }
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output
  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
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Blake @ 2014-07-09 12:49 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: Markus Armbruster, Andreas Faerber, crobinso

[-- Attachment #1: Type: text/plain, Size: 920 bytes --]

On 07/09/2014 06: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(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output
  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
  1 sibling, 0 replies; 7+ messages in thread
From: Cole Robinson @ 2014-07-09 15:20 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: Andreas Faerber, Markus Armbruster

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device properties in -device FOO, help output
  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:01 ` [Qemu-devel] [PATCH for-2.1 2/2] qdev-monitor: include QOM properties in -device FOO, help output Stefan Hajnoczi
@ 2014-07-29 13:32 ` Stefan Hajnoczi
  2 siblings, 0 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2014-07-29 13:32 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: Markus Armbruster, qemu-stable, qemu-devel, Andreas Faerber, crobinso

[-- Attachment #1: Type: text/plain, Size: 1225 bytes --]

On Wed, Jul 09, 2014 at 02:01:30PM +0200, Stefan Hajnoczi wrote:
> These two patches fix the -device FOO,help output regression that Cole spotted
> in QEMU 2.0-rc0.  The problem is that virtio-blk-pci qdev properties have been
> converted to QOM alias properties but -device FOO,help shows only qdev
> properties.
> 
> We simply need to update -device FOO,help code to use both qdev and QOM
> properties.  Note that types change because a 'drive' qdev type is actually a
> 'str' QOM type.  We're moving more and more to QOM properties where the final
> type for this property would be 'link<Drive>' or similar.
> 
> Cole: please confirm that this fixes the issue
> 
> Stefan Hajnoczi (2):
>   qmp: hide "hotplugged" device property from device-list-properties
>   qdev-monitor: include QOM properties in -device FOO,help output
> 
>  qdev-monitor.c | 40 +++++++++++++++++-----------------------
>  qmp.c          |  1 +
>  2 files changed, 18 insertions(+), 23 deletions(-)

CCed qemu-stable since we ought to fix -device FOO,?.  This patch was
missed for QEMU 2.1 but not critical (see Cole's response).

Applied to my block-next tree:
https://github.com/stefanha/qemu/commits/block-next

Stefan

[-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-07-29 13:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2014-07-29 13:32 ` [Qemu-devel] [PATCH for-2.1 0/2] qdev-monitor: include QOM device " Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.