]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Add qemuDomainCheckABIStability
authorJiri Denemark <jdenemar@redhat.com>
Wed, 14 Jun 2017 11:43:37 +0000 (13:43 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 14 Jun 2017 15:08:16 +0000 (17:08 +0200)
When making ABI stability checks for an active domain, we need to make
sure we use the same migratable definition which virDomainGetXMLDesc
with the MIGRATABLE flag provides, otherwise the ABI check will fail.
This is implemented in the new qemuDomainCheckABIStability which takes a
domain object and generates the right migratable definition from it.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 01644694ba098a8e8d53c53c076f08c617aa2b0f..6838d2eaa468a147b406bb8603d03db426e10ec5 100644 (file)
@@ -5919,6 +5919,10 @@ qemuDomainMigratableDefCheckABIStability(virQEMUDriverPtr driver,
 }
 
 
+#define COPY_FLAGS (VIR_DOMAIN_XML_SECURE | \
+                    VIR_DOMAIN_XML_UPDATE_CPU | \
+                    VIR_DOMAIN_XML_MIGRATABLE)
+
 bool
 qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
                                virDomainDefPtr src,
@@ -5926,13 +5930,10 @@ qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
 {
     virDomainDefPtr migratableDefSrc = NULL;
     virDomainDefPtr migratableDefDst = NULL;
-    const unsigned int flags = VIR_DOMAIN_XML_SECURE |
-                               VIR_DOMAIN_XML_UPDATE_CPU |
-                               VIR_DOMAIN_XML_MIGRATABLE;
     bool ret = false;
 
-    if (!(migratableDefSrc = qemuDomainDefCopy(driver, src, flags)) ||
-        !(migratableDefDst = qemuDomainDefCopy(driver, dst, flags)))
+    if (!(migratableDefSrc = qemuDomainDefCopy(driver, src, COPY_FLAGS)) ||
+        !(migratableDefDst = qemuDomainDefCopy(driver, dst, COPY_FLAGS)))
         goto cleanup;
 
     ret = qemuDomainMigratableDefCheckABIStability(driver,
@@ -5945,6 +5946,36 @@ qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
     return ret;
 }
 
+
+bool
+qemuDomainCheckABIStability(virQEMUDriverPtr driver,
+                            virDomainObjPtr vm,
+                            virDomainDefPtr dst)
+{
+    virDomainDefPtr migratableSrc = NULL;
+    virDomainDefPtr migratableDst = NULL;
+    char *xml = NULL;
+    bool ret = false;
+
+    if (!(xml = qemuDomainFormatXML(driver, vm, COPY_FLAGS)) ||
+        !(migratableSrc = qemuDomainDefFromXML(driver, xml)) ||
+        !(migratableDst = qemuDomainDefCopy(driver, dst, COPY_FLAGS)))
+        goto cleanup;
+
+    ret = qemuDomainMigratableDefCheckABIStability(driver,
+                                                   vm->def, migratableSrc,
+                                                   dst, migratableDst);
+
+ cleanup:
+    VIR_FREE(xml);
+    virDomainDefFree(migratableSrc);
+    virDomainDefFree(migratableDst);
+    return ret;
+}
+
+#undef COPY_FLAGS
+
+
 bool
 qemuDomainAgentAvailable(virDomainObjPtr vm,
                          bool reportError)
index ef3a33076c70071c0c2d8583934332225b9b997d..a2cd155c33a1cc092c931f1f980f30c35f794d09 100644 (file)
@@ -666,6 +666,10 @@ bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
                                     virDomainDefPtr src,
                                     virDomainDefPtr dst);
 
+bool qemuDomainCheckABIStability(virQEMUDriverPtr driver,
+                                 virDomainObjPtr vm,
+                                 virDomainDefPtr dst);
+
 bool qemuDomainAgentAvailable(virDomainObjPtr vm,
                               bool reportError);