The new helper will simplify checking whether the domain config contains inactive vCPUs. --- src/conf/domain_conf.c | 9 ++++++++- src/conf/domain_conf.h | 1 + src/libvirt_private.syms | 1 + src/openvz/openvz_driver.c | 2 +- src/qemu/qemu_command.c | 4 ++-- src/vbox/vbox_common.c | 2 +- src/vmx/vmx.c | 2 +- src/vz/vz_sdk.c | 2 +- src/xenconfig/xen_common.c | 2 +- src/xenconfig/xen_sxpr.c | 4 ++-- 10 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 6bed826..3a1dcc7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1437,6 +1437,13 @@ virDomainDefSetVCpusMax(virDomainDefPtr def, } +bool +virDomainDefHasVCpusOffline(const virDomainDef *def) +{ + return def->vcpus < def->maxvcpus; +} + + virDomainDiskDefPtr virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt) { @@ -21785,7 +21792,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, virBufferAsprintf(buf, " cpuset='%s'", cpumask); VIR_FREE(cpumask); } - if (def->vcpus != def->maxvcpus) + if (virDomainDefHasVCpusOffline(def)) virBufferAsprintf(buf, " current='%u'", def->vcpus); virBufferAsprintf(buf, ">%u</vcpu>\n", def->maxvcpus); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 498ca99..de7412c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2326,6 +2326,7 @@ struct _virDomainDef { }; int virDomainDefSetVCpusMax(virDomainDefPtr def, unsigned int vcpus); +bool virDomainDefHasVCpusOffline(const virDomainDef *def); unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def); void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 321f926..7e6ea4b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -219,6 +219,7 @@ virDomainDefGetMemoryInitial; virDomainDefGetSecurityLabelDef; virDomainDefHasDeviceAddress; virDomainDefHasMemoryHotplug; +virDomainDefHasVCpusOffline; virDomainDefMaybeAddController; virDomainDefMaybeAddInput; virDomainDefNeedsPlacementAdvice; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 60b40d5..1361432 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -1030,7 +1030,7 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla if (openvzDomainSetNetworkConfig(conn, vm->def) < 0) goto cleanup; - if (vm->def->vcpus != vm->def->maxvcpus) { + if (virDomainDefHasVCpusOffline(vm->def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("current vcpu count must equal maximum")); goto cleanup; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index af283af..ef44b8e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7852,7 +7852,7 @@ qemuBuildSmpArgStr(const virDomainDef *def, virBufferAsprintf(&buf, "%u", def->vcpus); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY)) { - if (def->vcpus != def->maxvcpus) + if (virDomainDefHasVCpusOffline(def)) virBufferAsprintf(&buf, ",maxcpus=%u", def->maxvcpus); /* sockets, cores, and threads are either all zero * or all non-zero, thus checking one of them is enough */ @@ -7865,7 +7865,7 @@ qemuBuildSmpArgStr(const virDomainDef *def, virBufferAsprintf(&buf, ",cores=%u", 1); virBufferAsprintf(&buf, ",threads=%u", 1); } - } else if (def->vcpus != def->maxvcpus) { + } else if (virDomainDefHasVCpusOffline(def)) { virBufferFreeAndReset(&buf); /* FIXME - consider hot-unplugging cpus after boot for older qemu */ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 20f44e9..4c88fa9 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -1891,7 +1891,7 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags def->mem.cur_balloon, (unsigned)rc); } - if (def->vcpus != def->maxvcpus) { + if (virDomainDefHasVCpusOffline(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("current vcpu count must equal maximum")); } diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 41a872a..5456e3d 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -3175,7 +3175,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe } /* def:maxvcpus -> vmx:numvcpus */ - if (def->vcpus != def->maxvcpus) { + if (virDomainDefHasVCpusOffline(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("No support for domain XML entry 'vcpu' attribute " "'current'")); diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index bef5146..d3aa3e2 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -1933,7 +1933,7 @@ prlsdkCheckUnsupportedParams(PRL_HANDLE sdkdom, virDomainDefPtr def) return -1; } - if (def->vcpus != def->maxvcpus) { + if (virDomainDefHasVCpusOffline(def)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("current vcpus must be equal to maxvcpus")); return -1; diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index 05fc76c..e21576d 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -1531,7 +1531,7 @@ xenFormatCPUAllocation(virConfPtr conf, virDomainDefPtr def) /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is either 32, or 64 on a platform where long is big enough. */ - if (def->vcpus < def->maxvcpus && + if (virDomainDefHasVCpusOffline(def) && xenConfigSetInt(conf, "vcpu_avail", (1UL << def->vcpus) - 1) < 0) goto cleanup; diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c index 64a317d..505ef76 100644 --- a/src/xenconfig/xen_sxpr.c +++ b/src/xenconfig/xen_sxpr.c @@ -2226,7 +2226,7 @@ xenFormatSxpr(virConnectPtr conn, virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus); /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is either 32, or 64 on a platform where long is big enough. */ - if (def->vcpus < def->maxvcpus) + if (virDomainDefHasVCpusOffline(def)) virBufferAsprintf(&buf, "(vcpu_avail %lu)", (1UL << def->vcpus) - 1); if (def->cpumask) { @@ -2308,7 +2308,7 @@ xenFormatSxpr(virConnectPtr conn, virBufferEscapeSexpr(&buf, "(kernel '%s')", def->os.loader->path); virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus); - if (def->vcpus < def->maxvcpus) + if (virDomainDefHasVCpusOffline(def)) virBufferAsprintf(&buf, "(vcpu_avail %lu)", (1UL << def->vcpus) - 1); -- 2.6.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list