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(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 */
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