Message ID | 1337301799-23418-1-git-send-email-agraf@suse.de |
---|---|
State | New |
Headers | show |
On 18/05/12 02:43, Alexander Graf wrote: > Some of the virtio devices have the same frontend name, but actually > implement different devices behind the scenes through aliases. > > The indicator which device type to use is the architecture. On s390, we > want s390 virtio devices. On everything else, we want PCI devices. > > Reflect this in the alias selection code. This way we fix commands like > -device virtio-blk on s390x which with this patch applied select the > correct virtio-blk-s390 device rather than virtio-blk-pci. > > Reported-by: Christian Borntraeger <borntraeger@de.ibm.com> > Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> > Signed-off-by: Alexander Graf <agraf@suse.de> Ping. Just in case: Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
On 31.05.2012, at 12:42, Christian Borntraeger wrote: > On 18/05/12 02:43, Alexander Graf wrote: >> Some of the virtio devices have the same frontend name, but actually >> implement different devices behind the scenes through aliases. >> >> The indicator which device type to use is the architecture. On s390, we >> want s390 virtio devices. On everything else, we want PCI devices. >> >> Reflect this in the alias selection code. This way we fix commands like >> -device virtio-blk on s390x which with this patch applied select the >> correct virtio-blk-s390 device rather than virtio-blk-pci. >> >> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com> >> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> >> Signed-off-by: Alexander Graf <agraf@suse.de> > > Ping. > Just in case: > Tested-by: Christian Borntraeger <borntraeger@de.ibm.com> > Hrm. Did I forget to push this one out? Ugh. We're probably going to do a 1.1.1 soon anyway, right? :) Alex
diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c index eed781d..405697e 100644 --- a/hw/qdev-monitor.c +++ b/hw/qdev-monitor.c @@ -20,6 +20,7 @@ #include "qdev.h" #include "monitor.h" #include "qmp-commands.h" +#include "arch_init.h" /* * Aliases were a bad idea from the start. Let's keep them @@ -29,16 +30,18 @@ typedef struct QDevAlias { const char *typename; const char *alias; + uint32_t arch_mask; } QDevAlias; static const QDevAlias qdev_alias_table[] = { - { "virtio-blk-pci", "virtio-blk" }, - { "virtio-net-pci", "virtio-net" }, - { "virtio-serial-pci", "virtio-serial" }, - { "virtio-balloon-pci", "virtio-balloon" }, - { "virtio-blk-s390", "virtio-blk" }, - { "virtio-net-s390", "virtio-net" }, - { "virtio-serial-s390", "virtio-serial" }, + { "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 }, + { "virtio-balloon-pci", "virtio-balloon", + QEMU_ARCH_ALL & ~QEMU_ARCH_S390X }, + { "virtio-blk-s390", "virtio-blk", QEMU_ARCH_S390X }, + { "virtio-net-s390", "virtio-net", QEMU_ARCH_S390X }, + { "virtio-serial-s390", "virtio-serial", QEMU_ARCH_S390X }, { "lsi53c895a", "lsi" }, { "ich9-ahci", "ahci" }, { } @@ -50,6 +53,11 @@ static const char *qdev_class_get_alias(DeviceClass *dc) int i; for (i = 0; qdev_alias_table[i].typename; i++) { + if (qdev_alias_table[i].arch_mask && + !(qdev_alias_table[i].arch_mask & arch_type)) { + continue; + } + if (strcmp(qdev_alias_table[i].typename, typename) == 0) { return qdev_alias_table[i].alias; } @@ -110,6 +118,11 @@ static const char *find_typename_by_alias(const char *alias) int i; for (i = 0; qdev_alias_table[i].alias; i++) { + if (qdev_alias_table[i].arch_mask && + !(qdev_alias_table[i].arch_mask & arch_type)) { + continue; + } + if (strcmp(qdev_alias_table[i].alias, alias) == 0) { return qdev_alias_table[i].typename; }