forked from rpms/libvirt
124 lines
4.9 KiB
Diff
124 lines
4.9 KiB
Diff
|
From a2712d6a8ef06050b4e31d9e6e9800a4babc2cd8 Mon Sep 17 00:00:00 2001
|
||
|
Message-Id: <a2712d6a8ef06050b4e31d9e6e9800a4babc2cd8@dist-git>
|
||
|
From: Laine Stump <laine@redhat.com>
|
||
|
Date: Thu, 30 Jan 2020 14:12:39 -0500
|
||
|
Subject: [PATCH] qemu: add capabilities flag for failover feature
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Presence of the virtio-net-pci option called "failover" indicates
|
||
|
support in a qemu binary of a simplistic bonding of a virtio-net
|
||
|
device with another PCI device. This feature allows migration of
|
||
|
guests that have a network device assigned to a guest with VFIO, by
|
||
|
creating a network bond device in the guest consisting of the
|
||
|
VFIO-assigned device and a virtio-net-pci device, then temporarily
|
||
|
(and automatically) unplugging the VFIO net device prior to migration
|
||
|
(and hotplugging an equivalent device on the migration
|
||
|
destination). (The feature is called "failover" because the bond
|
||
|
device uses the vfio-pci netdev for normal guest networking, but
|
||
|
"fails over" to the virtio-net-pci netdev once the vfio-pci device is
|
||
|
unplugged for migration.)
|
||
|
|
||
|
Full functioning of the feature also requires support in the
|
||
|
virtio-net driver in the guest OS (since that is where the bond device
|
||
|
resides), but if the "failover" commandline option is present for the
|
||
|
virtio-net-pci device in qemu, at least the qemu part of the feature
|
||
|
is available, and libvirt can add the proper options to both the
|
||
|
virtio-net-pci and vfio-pci device commandlines to indicate qemu
|
||
|
should attempt doing the failover during migration.
|
||
|
|
||
|
This patch just adds the qemu capabilities flag "virtio-net.failover".
|
||
|
|
||
|
Signed-off-by: Laine Stump <laine@redhat.com>
|
||
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||
|
(cherry picked from commit cad65f222f29dffd4e91d43b230665aca813c7a6)
|
||
|
|
||
|
Conflicts:
|
||
|
src/qemu/qemu_capabilities.c
|
||
|
src/qemu/qemu_capabilities.h
|
||
|
tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
|
||
|
tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
|
||
|
|
||
|
context changed due to other capabilities flags
|
||
|
added upstream
|
||
|
|
||
|
tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
|
||
|
|
||
|
only exists upstream
|
||
|
|
||
|
https://bugzilla.redhat.com/1693587
|
||
|
Signed-off-by: Laine Stump <laine@redhat.com>
|
||
|
Message-Id: <20200130191244.24174-2-laine@redhat.com>
|
||
|
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||
|
---
|
||
|
src/qemu/qemu_capabilities.c | 4 ++++
|
||
|
src/qemu/qemu_capabilities.h | 3 +++
|
||
|
tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 +
|
||
|
tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 +
|
||
|
4 files changed, 9 insertions(+)
|
||
|
|
||
|
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||
|
index 893fc5a1bb..10c17323be 100644
|
||
|
--- a/src/qemu/qemu_capabilities.c
|
||
|
+++ b/src/qemu/qemu_capabilities.c
|
||
|
@@ -554,6 +554,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||
|
"savevm-monitor-nodes",
|
||
|
"drive-nvme",
|
||
|
"smp-dies",
|
||
|
+
|
||
|
+ /* 350 */
|
||
|
+ "virtio-net.failover",
|
||
|
);
|
||
|
|
||
|
|
||
|
@@ -1299,6 +1302,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioNet[] = {
|
||
|
{ "disable-legacy", QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY },
|
||
|
{ "iommu_platform", QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM },
|
||
|
{ "ats", QEMU_CAPS_VIRTIO_PCI_ATS },
|
||
|
+ { "failover", QEMU_CAPS_VIRTIO_NET_FAILOVER },
|
||
|
};
|
||
|
|
||
|
static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsSpaprPCIHostBridge[] = {
|
||
|
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||
|
index 5ec8901bb3..6ab0eabd3f 100644
|
||
|
--- a/src/qemu/qemu_capabilities.h
|
||
|
+++ b/src/qemu/qemu_capabilities.h
|
||
|
@@ -536,6 +536,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||
|
QEMU_CAPS_DRIVE_NVME, /* -drive file.driver=nvme */
|
||
|
QEMU_CAPS_SMP_DIES, /* -smp dies= */
|
||
|
|
||
|
+ /* 350 */
|
||
|
+ QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
|
||
|
+
|
||
|
QEMU_CAPS_LAST /* this must always be the last item */
|
||
|
} virQEMUCapsFlags;
|
||
|
|
||
|
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
|
||
|
index 184bb7ff77..6af09e1a83 100644
|
||
|
--- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
|
||
|
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
|
||
|
@@ -176,6 +176,7 @@
|
||
|
<flag name='savevm-monitor-nodes'/>
|
||
|
<flag name='drive-nvme'/>
|
||
|
<flag name='smp-dies'/>
|
||
|
+ <flag name='virtio-net.failover'/>
|
||
|
<version>4001050</version>
|
||
|
<kvmVersion>0</kvmVersion>
|
||
|
<microcodeVersion>61700242</microcodeVersion>
|
||
|
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
|
||
|
index afd59a269d..c71791e205 100644
|
||
|
--- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
|
||
|
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
|
||
|
@@ -219,6 +219,7 @@
|
||
|
<flag name='savevm-monitor-nodes'/>
|
||
|
<flag name='drive-nvme'/>
|
||
|
<flag name='smp-dies'/>
|
||
|
+ <flag name='virtio-net.failover'/>
|
||
|
<version>4002000</version>
|
||
|
<kvmVersion>0</kvmVersion>
|
||
|
<microcodeVersion>43100242</microcodeVersion>
|
||
|
--
|
||
|
2.25.0
|
||
|
|