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