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

2015-09-15 Thread Martin Kletzander

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

2015-09-09 Thread Pavel Fedin
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