From f6b5319d412cda360695e2005737f91ca8201af0 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Thu, 18 Feb 2016 22:44:12 +0100 Subject: [PATCH 1/3] qdev-monitor: improve error message when alias device is unavailable When trying to instantiate an alias that points to a device class that doesn't exist, the error message looks like qemu misunderstood the request: $ s390x-softmmu/qemu-system-s390x -device virtio-gpu qemu-system-s390x: -device virtio-gpu: 'virtio-gpu-ccw' is not a valid device model name Special-case the error message to make it explicit that alias expansion is going on: $ s390x-softmmu/qemu-system-s390x -device virtio-gpu qemu-system-s390x: -device virtio-gpu: 'virtio-gpu' (alias 'virtio-gpu-ccw') is not a valid device model name Suggested-By: Cornelia Huck Signed-off-by: Sascha Silbe Message-Id: <1455831854-49013-2-git-send-email-silbe@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck Reviewed-by: Michael S. Tsirkin Signed-off-by: Markus Armbruster --- qdev-monitor.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/qdev-monitor.c b/qdev-monitor.c index 81e3ff34a9..e5136d78e0 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -188,6 +188,7 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp) { ObjectClass *oc; DeviceClass *dc; + const char *original_name = *driver; oc = object_class_by_name(*driver); if (!oc) { @@ -200,7 +201,12 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp) } if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) { - error_setg(errp, "'%s' is not a valid device model name", *driver); + if (*driver != original_name) { + error_setg(errp, "'%s' (alias '%s') is not a valid device model" + " name", original_name, *driver); + } else { + error_setg(errp, "'%s' is not a valid device model name", *driver); + } return NULL; } From 36e9916811002dc535f0a5cc718d60d6eb902998 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Thu, 18 Feb 2016 22:44:13 +0100 Subject: [PATCH 2/3] qdev-monitor: sort alias table by typename Sort the alias table by typename so it's easier to see which aliases exist. Signed-off-by: Sascha Silbe Message-Id: <1455831854-49013-3-git-send-email-silbe@linux.vnet.ibm.com> Reviewed-by: Halil Pasic Reviewed-by: Cornelia Huck Reviewed-by: Michael S. Tsirkin Signed-off-by: Markus Armbruster --- qdev-monitor.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/qdev-monitor.c b/qdev-monitor.c index e5136d78e0..4e3681c911 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -39,19 +39,20 @@ typedef struct QDevAlias uint32_t arch_mask; } QDevAlias; +/* Please keep this table sorted by typename. */ static const QDevAlias qdev_alias_table[] = { - { "virtio-blk-pci", "virtio-blk", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, - { "virtio-net-pci", "virtio-net", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, - { "virtio-serial-pci", "virtio-serial", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "e1000", "e1000-82540em" }, + { "ich9-ahci", "ahci" }, + { "kvm-pci-assign", "pci-assign" }, + { "lsi53c895a", "lsi" }, { "virtio-balloon-pci", "virtio-balloon", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-blk-ccw", "virtio-blk", QEMU_ARCH_S390X }, + { "virtio-blk-pci", "virtio-blk", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-net-ccw", "virtio-net", QEMU_ARCH_S390X }, + { "virtio-net-pci", "virtio-net", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-serial-ccw", "virtio-serial", QEMU_ARCH_S390X }, - { "lsi53c895a", "lsi" }, - { "ich9-ahci", "ahci" }, - { "kvm-pci-assign", "pci-assign" }, - { "e1000", "e1000-82540em" }, + { "virtio-serial-pci", "virtio-serial", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { } }; From 588c36cac7a658758b3e0b60bfd62ebc2e4045c6 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Thu, 18 Feb 2016 22:44:14 +0100 Subject: [PATCH 3/3] qdev-monitor: add missing aliases for virtio device classes virtio-{blk,balloon,net,serial} are aliases for their actual, architecture-dependent implementations (*-ccw on s390x, *-pci on other architectures supporting virtio). This makes it a lot easier to craft qemu invocations that work on all supported architectures. Complete the set to cover all existing non-abstract virtio device classes. For virtio-balloon, only the CCW implementation was missing. Signed-off-by: Sascha Silbe Message-Id: <1455831854-49013-4-git-send-email-silbe@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck Reviewed-by: Michael S. Tsirkin Signed-off-by: Markus Armbruster --- qdev-monitor.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/qdev-monitor.c b/qdev-monitor.c index 4e3681c911..be6a07ee49 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -45,14 +45,33 @@ static const QDevAlias qdev_alias_table[] = { { "ich9-ahci", "ahci" }, { "kvm-pci-assign", "pci-assign" }, { "lsi53c895a", "lsi" }, + { "virtio-9p-ccw", "virtio-9p", QEMU_ARCH_S390X }, + { "virtio-9p-pci", "virtio-9p", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-balloon-ccw", "virtio-balloon", QEMU_ARCH_S390X }, { "virtio-balloon-pci", "virtio-balloon", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-blk-ccw", "virtio-blk", QEMU_ARCH_S390X }, { "virtio-blk-pci", "virtio-blk", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-gpu-ccw", "virtio-gpu", QEMU_ARCH_S390X }, + { "virtio-gpu-pci", "virtio-gpu", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-input-host-ccw", "virtio-input-host", QEMU_ARCH_S390X }, + { "virtio-input-host-pci", "virtio-input-host", + QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-keyboard-ccw", "virtio-keyboard", QEMU_ARCH_S390X }, + { "virtio-keyboard-pci", "virtio-keyboard", + QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-mouse-ccw", "virtio-mouse", QEMU_ARCH_S390X }, + { "virtio-mouse-pci", "virtio-mouse", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-net-ccw", "virtio-net", QEMU_ARCH_S390X }, { "virtio-net-pci", "virtio-net", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-rng-ccw", "virtio-rng", QEMU_ARCH_S390X }, + { "virtio-rng-pci", "virtio-rng", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-scsi-ccw", "virtio-scsi", QEMU_ARCH_S390X }, + { "virtio-scsi-pci", "virtio-scsi", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { "virtio-serial-ccw", "virtio-serial", QEMU_ARCH_S390X }, { "virtio-serial-pci", "virtio-serial", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-tablet-ccw", "virtio-tablet", QEMU_ARCH_S390X }, + { "virtio-tablet-pci", "virtio-tablet", QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, { } };