qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04
@ 2014-11-04 17:30 Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 1/3] qdev: Create qdev_get_device_class() function Andreas Färber
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Andreas Färber @ 2014-11-04 17:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Andreas Färber, Eduardo Habkost

Hello Peter,

This is my QOM (devices) patch queue. Please pull.

Regards,
Andreas

Cc: Peter Maydell <peter.maydell@linaro.org>

Cc: Eduardo Habkost <ehabkost@redhat.com>

The following changes since commit 1bc8dae31baa8b02a1b8e70c3244232e03bbb3b2:

  Merge remote-tracking branch 'remotes/kraxel/tags/pull-gtk-20141104-2' into staging (2014-11-04 15:00:17 +0000)

are available in the git repository at:


  git://github.com/afaerber/qemu-cpu.git tags/qom-devices-for-peter

for you to fetch changes up to 31bed5509dfcbdfc293154ce81086a4dbd7a80b6:

  qdev: Use qdev_get_device_class() for -device <type>,help (2014-11-04 17:50:00 +0100)

----------------------------------------------------------------
QOM infrastructure fixes and device conversions

* Fixes for -device foo,help

----------------------------------------------------------------
Eduardo Habkost (3):
      qdev: Create qdev_get_device_class() function
      qdev: Move error printing to the end of qdev_device_help()
      qdev: Use qdev_get_device_class() for -device <type>,help

 qdev-monitor.c | 88 ++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 51 insertions(+), 37 deletions(-)

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

* [Qemu-devel] [PULL 1/3] qdev: Create qdev_get_device_class() function
  2014-11-04 17:30 [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Andreas Färber
@ 2014-11-04 17:30 ` Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 2/3] qdev: Move error printing to the end of qdev_device_help() Andreas Färber
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Färber @ 2014-11-04 17:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Extract the DeviceClass lookup from qdev_device_add() to a separate
function.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 qdev-monitor.c | 70 +++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 42 insertions(+), 28 deletions(-)

diff --git a/qdev-monitor.c b/qdev-monitor.c
index fac7d17..982f3f4 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -180,6 +180,44 @@ static const char *find_typename_by_alias(const char *alias)
     return NULL;
 }
 
+static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
+{
+    ObjectClass *oc;
+    DeviceClass *dc;
+
+    oc = object_class_by_name(*driver);
+    if (!oc) {
+        const char *typename = find_typename_by_alias(*driver);
+
+        if (typename) {
+            *driver = typename;
+            oc = object_class_by_name(*driver);
+        }
+    }
+
+    if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) {
+        error_setg(errp, "'%s' is not a valid device model name", *driver);
+        return NULL;
+    }
+
+    if (object_class_is_abstract(oc)) {
+        error_set(errp, QERR_INVALID_PARAMETER_VALUE, "driver",
+                  "non-abstract device type");
+        return NULL;
+    }
+
+    dc = DEVICE_CLASS(oc);
+    if (dc->cannot_instantiate_with_device_add_yet ||
+        (qdev_hotplug && !dc->hotpluggable)) {
+        error_set(errp, QERR_INVALID_PARAMETER_VALUE, "driver",
+                  "pluggable device type");
+        return NULL;
+    }
+
+    return dc;
+}
+
+
 int qdev_device_help(QemuOpts *opts)
 {
     Error *local_err = NULL;
@@ -455,7 +493,6 @@ static BusState *qbus_find(const char *path)
 
 DeviceState *qdev_device_add(QemuOpts *opts)
 {
-    ObjectClass *oc;
     DeviceClass *dc;
     const char *driver, *path, *id;
     DeviceState *dev;
@@ -469,33 +506,10 @@ DeviceState *qdev_device_add(QemuOpts *opts)
     }
 
     /* find driver */
-    oc = object_class_by_name(driver);
-    if (!oc) {
-        const char *typename = find_typename_by_alias(driver);
-
-        if (typename) {
-            driver = typename;
-            oc = object_class_by_name(driver);
-        }
-    }
-
-    if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) {
-        qerror_report(ERROR_CLASS_GENERIC_ERROR,
-                      "'%s' is not a valid device model name", driver);
-        return NULL;
-    }
-
-    if (object_class_is_abstract(oc)) {
-        qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver",
-                      "non-abstract device type");
-        return NULL;
-    }
-
-    dc = DEVICE_CLASS(oc);
-    if (dc->cannot_instantiate_with_device_add_yet ||
-        (qdev_hotplug && !dc->hotpluggable)) {
-        qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver",
-                      "pluggable device type");
+    dc = qdev_get_device_class(&driver, &err);
+    if (err) {
+        qerror_report_err(err);
+        error_free(err);
         return NULL;
     }
 
-- 
1.8.4.5

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

* [Qemu-devel] [PULL 2/3] qdev: Move error printing to the end of qdev_device_help()
  2014-11-04 17:30 [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 1/3] qdev: Create qdev_get_device_class() function Andreas Färber
@ 2014-11-04 17:30 ` Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 3/3] qdev: Use qdev_get_device_class() for -device <type>, help Andreas Färber
  2014-11-04 18:42 ` [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Färber @ 2014-11-04 17:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 qdev-monitor.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/qdev-monitor.c b/qdev-monitor.c
index 982f3f4..a9702d8 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -245,9 +245,7 @@ int qdev_device_help(QemuOpts *opts)
 
     prop_list = qmp_device_list_properties(driver, &local_err);
     if (local_err) {
-        error_printf("%s\n", error_get_pretty(local_err));
-        error_free(local_err);
-        return 1;
+        goto error;
     }
 
     for (prop = prop_list; prop; prop = prop->next) {
@@ -263,6 +261,11 @@ int qdev_device_help(QemuOpts *opts)
 
     qapi_free_DevicePropertyInfoList(prop_list);
     return 1;
+
+error:
+    error_printf("%s\n", error_get_pretty(local_err));
+    error_free(local_err);
+    return 1;
 }
 
 static Object *qdev_get_peripheral(void)
-- 
1.8.4.5

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

* [Qemu-devel] [PULL 3/3] qdev: Use qdev_get_device_class() for -device <type>, help
  2014-11-04 17:30 [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 1/3] qdev: Create qdev_get_device_class() function Andreas Färber
  2014-11-04 17:30 ` [Qemu-devel] [PULL 2/3] qdev: Move error printing to the end of qdev_device_help() Andreas Färber
@ 2014-11-04 17:30 ` Andreas Färber
  2014-11-04 18:42 ` [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Färber @ 2014-11-04 17:30 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Make sure we try to list properties from classes that can be safely used
with "-device".

Fixes the following crashes:

  $ qemu-system-x86_64 -device x86_64-cpu,help
  **
  ERROR:qom/object.c:336:object_initialize_with_type: assertion failed: (type->abstract == false)
  Aborted (core dumped)
  $ qemu-system-x86_64 -device host-x86_64-cpu,help
  qemu-system-x86_64: [...]/target-i386/cpu.c:1329: host_x86_cpu_initfn: Assertion `(kvm_allowed)' failed.
  Aborted (core dumped)

After applying this patch:

  $ qemu-system-x86_64 -device x86_64-cpu,help
  Parameter 'driver' expects non-abstract device type
  $ qemu-system-x86_64 -device host-x86_64-cpu,help
  Parameter 'driver' expects pluggable device type

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 qdev-monitor.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/qdev-monitor.c b/qdev-monitor.c
index a9702d8..ebfa701 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -235,12 +235,9 @@ int qdev_device_help(QemuOpts *opts)
         return 0;
     }
 
-    if (!object_class_by_name(driver)) {
-        const char *typename = find_typename_by_alias(driver);
-
-        if (typename) {
-            driver = typename;
-        }
+    qdev_get_device_class(&driver, &local_err);
+    if (local_err) {
+        goto error;
     }
 
     prop_list = qmp_device_list_properties(driver, &local_err);
-- 
1.8.4.5

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

* Re: [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04
  2014-11-04 17:30 [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Andreas Färber
                   ` (2 preceding siblings ...)
  2014-11-04 17:30 ` [Qemu-devel] [PULL 3/3] qdev: Use qdev_get_device_class() for -device <type>, help Andreas Färber
@ 2014-11-04 18:42 ` Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2014-11-04 18:42 UTC (permalink / raw)
  To: Andreas Färber; +Cc: QEMU Developers, Eduardo Habkost

On 4 November 2014 17:30, Andreas Färber <afaerber@suse.de> wrote:
> Hello Peter,
>
> This is my QOM (devices) patch queue. Please pull.
>
> Regards,
> Andreas
>
> Cc: Peter Maydell <peter.maydell@linaro.org>
>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
>
> The following changes since commit 1bc8dae31baa8b02a1b8e70c3244232e03bbb3b2:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/pull-gtk-20141104-2' into staging (2014-11-04 15:00:17 +0000)
>
> are available in the git repository at:
>
>
>   git://github.com/afaerber/qemu-cpu.git tags/qom-devices-for-peter
>
> for you to fetch changes up to 31bed5509dfcbdfc293154ce81086a4dbd7a80b6:
>
>   qdev: Use qdev_get_device_class() for -device <type>,help (2014-11-04 17:50:00 +0100)
>
> ----------------------------------------------------------------
> QOM infrastructure fixes and device conversions
>
> * Fixes for -device foo,help
>
> ----------------------------------------------------------------

Applied, thanks.

-- PMM

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

end of thread, other threads:[~2014-11-04 18:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-04 17:30 [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Andreas Färber
2014-11-04 17:30 ` [Qemu-devel] [PULL 1/3] qdev: Create qdev_get_device_class() function Andreas Färber
2014-11-04 17:30 ` [Qemu-devel] [PULL 2/3] qdev: Move error printing to the end of qdev_device_help() Andreas Färber
2014-11-04 17:30 ` [Qemu-devel] [PULL 3/3] qdev: Use qdev_get_device_class() for -device <type>, help Andreas Färber
2014-11-04 18:42 ` [Qemu-devel] [PULL 0/3] QOM devices patch queue 2014-11-04 Peter Maydell

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).