Re: [libvirt] [PATCH v3] Ignore virtio-mmio disks in qemuAssignDevicePCISlots()
On Wed, Sep 09, 2015 at 03:02:53PM +0300, Pavel Fedin wrote: Fixes the following error when attempting to add a disk with bus='virtio' to a machine which actually supports virtio-mmio (caught with ARM virt): virtio disk cannot have an address of type 'virtio-mmio' The problem has been likely introduced by e8d55172544c1fafe31a9e09346bdebca4f0d6f9. Before that qemuAssignDevicePCISlots() was never called for ARM "virt" machine. ACK && Pushed Signed-off-by: Pavel Fedin--- v2 => v3 - Bring back qemuCaps to qemuAssignDevicePCISlots(), was lost in a3ecd63e928ff39d73c1c14b0fb3be8addbc977b - Swap conditions so as not to call virQEMUCapsGet() every time v1 => v2 - Added check for QEMU_CAPS_DEVICE_VIRTIO_MMIO, this leaves the error message for machines which actually do not support virtio-mmio. In this case the user may still attempt to add such a disk manually. --- src/qemu/qemu_command.c | 11 +-- src/qemu/qemu_command.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ec5e3d4..ea1bb28 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2241,7 +2241,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, virDomainPCIAddressReserveNextSlot(addrs, , flags) < 0) goto cleanup; -if (qemuAssignDevicePCISlots(def, addrs) < 0) +if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 1; i < addrs->nbuses; i++) { @@ -2274,7 +2274,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0) goto cleanup; -if (qemuAssignDevicePCISlots(def, addrs) < 0) +if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 0; i < def->ncontrollers; i++) { @@ -2406,6 +2406,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, */ int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs) { size_t i, j; @@ -2598,6 +2599,12 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) continue; +/* Also ignore virtio-mmio disks if our machine allows them */ +if (def->disks[i]->info.type == +VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO && +virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) +continue; + if (def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("virtio disk cannot have an address of type '%s'"), diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 767d31f..4aa7f2d 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -284,6 +284,7 @@ virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def, bool dryRun); int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs); int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps); -- 1.9.5.msysgit.0 signature.asc Description: PGP signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH v3] Ignore virtio-mmio disks in qemuAssignDevicePCISlots()
Fixes the following error when attempting to add a disk with bus='virtio' to a machine which actually supports virtio-mmio (caught with ARM virt): virtio disk cannot have an address of type 'virtio-mmio' The problem has been likely introduced by e8d55172544c1fafe31a9e09346bdebca4f0d6f9. Before that qemuAssignDevicePCISlots() was never called for ARM "virt" machine. Signed-off-by: Pavel Fedin--- v2 => v3 - Bring back qemuCaps to qemuAssignDevicePCISlots(), was lost in a3ecd63e928ff39d73c1c14b0fb3be8addbc977b - Swap conditions so as not to call virQEMUCapsGet() every time v1 => v2 - Added check for QEMU_CAPS_DEVICE_VIRTIO_MMIO, this leaves the error message for machines which actually do not support virtio-mmio. In this case the user may still attempt to add such a disk manually. --- src/qemu/qemu_command.c | 11 +-- src/qemu/qemu_command.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ec5e3d4..ea1bb28 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2241,7 +2241,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, virDomainPCIAddressReserveNextSlot(addrs, , flags) < 0) goto cleanup; -if (qemuAssignDevicePCISlots(def, addrs) < 0) +if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 1; i < addrs->nbuses; i++) { @@ -2274,7 +2274,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0) goto cleanup; -if (qemuAssignDevicePCISlots(def, addrs) < 0) +if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 0; i < def->ncontrollers; i++) { @@ -2406,6 +2406,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, */ int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs) { size_t i, j; @@ -2598,6 +2599,12 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) continue; +/* Also ignore virtio-mmio disks if our machine allows them */ +if (def->disks[i]->info.type == +VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO && +virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) +continue; + if (def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("virtio disk cannot have an address of type '%s'"), diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 767d31f..4aa7f2d 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -284,6 +284,7 @@ virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def, bool dryRun); int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs); int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps); -- 1.9.5.msysgit.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list