]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
conf: ABI: Split up and improve vcpu info ABI checking
authorPeter Krempa <pkrempa@redhat.com>
Wed, 5 Aug 2015 13:06:04 +0000 (15:06 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 9 Dec 2015 13:57:12 +0000 (14:57 +0100)
Extract the checking code into a separate function and prepare the
infrastructure for checking the new structure type.

src/conf/domain_conf.c

index 6d08e88e7266991341a278ec7bfbae77ea771626..19525b309ae5e2164f1c3f5184b7f1a07d464890 100644 (file)
@@ -17549,6 +17549,35 @@ virDomainMemoryDefCheckABIStability(virDomainMemoryDefPtr src,
 }
 
 
+static bool
+virDomainDefVcpuCheckAbiStability(virDomainDefPtr src,
+                                  virDomainDefPtr dst)
+{
+    size_t i;
+
+    if (src->maxvcpus != dst->maxvcpus) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Target domain vCPU max %zu does not match source %zu"),
+                       dst->maxvcpus, src->maxvcpus);
+        return false;
+    }
+
+    for (i = 0; i < src->maxvcpus; i++) {
+        virDomainVcpuInfoPtr svcpu = &src->vcpus[i];
+        virDomainVcpuInfoPtr dvcpu = &dst->vcpus[i];
+
+        if (svcpu->online != dvcpu->online) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("State of vCPU '%zu' differs between source and "
+                             "destination definitions"), i);
+            return false;
+        }
+    }
+
+    return true;
+}
+
+
 /* This compares two configurations and looks for any differences
  * which will affect the guest ABI. This is primarily to allow
  * validation of custom XML config passed in during migration
@@ -17622,18 +17651,8 @@ virDomainDefCheckABIStability(virDomainDefPtr src,
         goto error;
     }
 
-    if (virDomainDefGetVcpus(src) != virDomainDefGetVcpus(dst)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Target domain vCPU count %d does not match source %d"),
-                       virDomainDefGetVcpus(dst), virDomainDefGetVcpus(src));
+    if (!virDomainDefVcpuCheckAbiStability(src, dst))
         goto error;
-    }
-    if (virDomainDefGetVcpusMax(src) != virDomainDefGetVcpusMax(dst)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Target domain vCPU max %d does not match source %d"),
-                       virDomainDefGetVcpusMax(dst), virDomainDefGetVcpusMax(src));
-        goto error;
-    }
 
     if (src->iothreads != dst->iothreads) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,