[libvirt] [PATCH v3] Ignore virtio-mmio disks in qemuAssignDevicePCISlots()

Martin Kletzander mkletzan at redhat.com
Tue Sep 15 09:36:20 UTC 2015


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 <p.fedin at samsung.com>
>---
>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, &info, 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
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150915/a4caf5da/attachment-0001.sig>


More information about the libvir-list mailing list