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