[libvirt] [PATCH v2 20/27] conf: ABI: Split up and improve vcpu info ABI checking

Peter Krempa pkrempa at redhat.com
Fri Nov 27 16:16:45 UTC 2015


Extract the checking code into a separate function and prepare the
infrastructure for checking the new structure type.
---
 src/conf/domain_conf.c | 41 ++++++++++++++++++++++++++++++-----------
 1 file changed, 30 insertions(+), 11 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ed4fe29..d7c1a73 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -17856,6 +17856,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
@@ -17929,18 +17958,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,
-- 
2.6.2




More information about the libvir-list mailing list