[libvirt] [PATCH 08/10] qemu: Reorganize -smp argument

John Ferlan jferlan at redhat.com
Wed Feb 17 00:44:18 UTC 2016


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 at 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




More information about the libvir-list mailing list