Reorganize the module to put all the -smp argument processing code together
after the memory arguments to form a logical order of processing for
qemuBuildCommandLine working top down in the module.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_command.c | 102 ++++++++++++++++++++++++++++--------------------
1 file changed, 60 insertions(+), 42 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index a8d1f4f..c90650f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -976,6 +976,65 @@ qemuBuildMemCommandLine(virCommandPtr cmd,
}
+/** Start SMP (-smp) arguments */
+static char *
+qemuBuildSmpArgStr(const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
+{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+
+ virBufferAsprintf(&buf, "%u", virDomainDefGetVcpus(def));
+
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY)) {
+ if (virDomainDefHasVcpusOffline(def))
+ virBufferAsprintf(&buf, ",maxcpus=%u",
virDomainDefGetVcpusMax(def));
+ /* sockets, cores, and threads are either all zero
+ * or all non-zero, thus checking one of them is enough */
+ if (def->cpu && def->cpu->sockets) {
+ virBufferAsprintf(&buf, ",sockets=%u",
def->cpu->sockets);
+ virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores);
+ virBufferAsprintf(&buf, ",threads=%u",
def->cpu->threads);
+ } else {
+ virBufferAsprintf(&buf, ",sockets=%u",
virDomainDefGetVcpusMax(def));
+ virBufferAsprintf(&buf, ",cores=%u", 1);
+ virBufferAsprintf(&buf, ",threads=%u", 1);
+ }
+ } else if (virDomainDefHasVcpusOffline(def)) {
+ virBufferFreeAndReset(&buf);
+ /* FIXME - consider hot-unplugging cpus after boot for older qemu */
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("setting current vcpu count less than maximum is "
+ "not supported with this QEMU binary"));
+ return NULL;
+ }
+
+ if (virBufferCheckError(&buf) < 0)
+ return NULL;
+
+ return virBufferContentAndReset(&buf);
+}
+
+
+static int
+qemuBuildSmpCommandLine(virCommandPtr cmd,
+ const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
+{
+ char *smp;
+
+ virCommandAddArg(cmd, "-smp");
+ if (!(smp = qemuBuildSmpArgStr(def, qemuCaps)))
+ goto error;
+ virCommandAddArg(cmd, smp);
+ VIR_FREE(smp);
+
+ return 0;
+
+ error:
+ return -1;
+}
+
+
static int
qemuBuildObjectCommandLinePropsInternal(const char *key,
const virJSONValue *value,
@@ -5387,43 +5446,6 @@ qemuBuildClockArgStr(virDomainClockDefPtr def)
return NULL;
}
-static char *
-qemuBuildSmpArgStr(const virDomainDef *def,
- virQEMUCapsPtr qemuCaps)
-{
- virBuffer buf = VIR_BUFFER_INITIALIZER;
-
- virBufferAsprintf(&buf, "%u", virDomainDefGetVcpus(def));
-
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY)) {
- if (virDomainDefHasVcpusOffline(def))
- virBufferAsprintf(&buf, ",maxcpus=%u",
virDomainDefGetVcpusMax(def));
- /* sockets, cores, and threads are either all zero
- * or all non-zero, thus checking one of them is enough */
- if (def->cpu && def->cpu->sockets) {
- virBufferAsprintf(&buf, ",sockets=%u",
def->cpu->sockets);
- virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores);
- virBufferAsprintf(&buf, ",threads=%u",
def->cpu->threads);
- } else {
- virBufferAsprintf(&buf, ",sockets=%u",
virDomainDefGetVcpusMax(def));
- virBufferAsprintf(&buf, ",cores=%u", 1);
- virBufferAsprintf(&buf, ",threads=%u", 1);
- }
- } else if (virDomainDefHasVcpusOffline(def)) {
- virBufferFreeAndReset(&buf);
- /* FIXME - consider hot-unplugging cpus after boot for older qemu */
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("setting current vcpu count less than maximum is "
- "not supported with this QEMU binary"));
- return NULL;
- }
-
- if (virBufferCheckError(&buf) < 0)
- return NULL;
-
- return virBufferContentAndReset(&buf);
-}
-
static int
qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
virDomainDefPtr def,
@@ -6807,7 +6829,6 @@ qemuBuildCommandLine(virConnectPtr conn,
virErrorPtr originalError = NULL;
size_t i, j;
char uuid[VIR_UUID_STRING_BUFLEN];
- char *smp;
int spicecnt = 0;
int last_good_net = -1;
virCommandPtr cmd = NULL;
@@ -6900,11 +6921,8 @@ qemuBuildCommandLine(virConnectPtr conn,
if (qemuBuildMemCommandLine(cmd, cfg, def, qemuCaps) < 0)
goto error;
- virCommandAddArg(cmd, "-smp");
- if (!(smp = qemuBuildSmpArgStr(def, qemuCaps)))
+ if (qemuBuildSmpCommandLine(cmd, def, qemuCaps) < 0)
goto error;
- virCommandAddArg(cmd, smp);
- VIR_FREE(smp);
if (def->niothreadids) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
--
2.5.0