
On Tue, Feb 16, 2016 at 19:44:18 -0500, John Ferlan wrote:
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.
Misleading commit message.
Signed-off-by: John Ferlan <jferlan@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 */
Wrong comment style.
+static char * +qemuBuildSmpArgStr(const virDomainDef *def, + virQEMUCapsPtr qemuCaps)
I don't think you need to move this at all.
+{ + 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)))
You could fold this code into qemuBuildSmpArgStr and just rename it rather than adding a new function.
+ goto error;
return -1; ...
+ virCommandAddArg(cmd, smp); + VIR_FREE(smp);
Peter