]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuBuildMemballoonCommandLine
authorJohn Ferlan <jferlan@redhat.com>
Sat, 12 Mar 2016 00:36:26 +0000 (19:36 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 15 Mar 2016 11:10:22 +0000 (07:10 -0400)
Add new function to manage adding the memballoon device options to the
command line removing that task from the mainline qemuBuildCommandLine.

Also modify the qemuBuildMemballoonDevStr to use const virDomainDef
instead of virDomainDefPtr.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_command.h

index 5417dfe9a8f08df83c0e63dd0f86fc2013efec25..92e96d2a968aa4e66adea8c229a1f07cab00583b 100644 (file)
@@ -3408,7 +3408,7 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd,
 
 
 char *
-qemuBuildMemballoonDevStr(virDomainDefPtr def,
+qemuBuildMemballoonDevStr(const virDomainDef *def,
                           virDomainMemballoonDefPtr dev,
                           virQEMUCapsPtr qemuCaps)
 {
@@ -3456,6 +3456,47 @@ qemuBuildMemballoonDevStr(virDomainDefPtr def,
     return NULL;
 }
 
+
+static int
+qemuBuildMemballoonCommandLine(virCommandPtr cmd,
+                               const virDomainDef *def,
+                               virQEMUCapsPtr qemuCaps)
+{
+    /* QEMU changed its default behavior to not include the virtio balloon
+     * device.  Explicitly request it to ensure it will be present.
+     *
+     * NB: Earlier we declared that VirtIO balloon will always be in
+     * slot 0x3 on bus 0x0
+     */
+    if (STREQLEN(def->os.machine, "s390-virtio", 10) &&
+        virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390) && def->memballoon)
+        def->memballoon->model = VIR_DOMAIN_MEMBALLOON_MODEL_NONE;
+
+    if (def->memballoon &&
+        def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_NONE) {
+        if (def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Memory balloon device type '%s' is not supported by this version of qemu"),
+                           virDomainMemballoonModelTypeToString(def->memballoon->model));
+            return -1;
+        }
+        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
+            char *optstr;
+            virCommandAddArg(cmd, "-device");
+
+            optstr = qemuBuildMemballoonDevStr(def, def->memballoon, qemuCaps);
+            if (!optstr)
+                return -1;
+            virCommandAddArg(cmd, optstr);
+            VIR_FREE(optstr);
+        } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BALLOON)) {
+            virCommandAddArgList(cmd, "-balloon", "virtio", NULL);
+        }
+    }
+    return 0;
+}
+
+
 static char *
 qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev)
 {
@@ -9141,37 +9182,8 @@ qemuBuildCommandLine(virConnectPtr conn,
     if (migrateURI)
         virCommandAddArgList(cmd, "-incoming", migrateURI, NULL);
 
-    /* QEMU changed its default behavior to not include the virtio balloon
-     * device.  Explicitly request it to ensure it will be present.
-     *
-     * NB: Earlier we declared that VirtIO balloon will always be in
-     * slot 0x3 on bus 0x0
-     */
-    if (STREQLEN(def->os.machine, "s390-virtio", 10) &&
-        virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390) && def->memballoon)
-        def->memballoon->model = VIR_DOMAIN_MEMBALLOON_MODEL_NONE;
-
-    if (def->memballoon &&
-        def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_NONE) {
-        if (def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("Memory balloon device type '%s' is not supported by this version of qemu"),
-                           virDomainMemballoonModelTypeToString(def->memballoon->model));
-            goto error;
-        }
-        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
-            char *optstr;
-            virCommandAddArg(cmd, "-device");
-
-            optstr = qemuBuildMemballoonDevStr(def, def->memballoon, qemuCaps);
-            if (!optstr)
-                goto error;
-            virCommandAddArg(cmd, optstr);
-            VIR_FREE(optstr);
-        } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BALLOON)) {
-            virCommandAddArgList(cmd, "-balloon", "virtio", NULL);
-        }
-    }
+    if (qemuBuildMemballoonCommandLine(cmd, def, qemuCaps) < 0)
+        goto error;
 
     for (i = 0; i < def->nrngs; i++) {
         virDomainRNGDefPtr rng = def->rngs[i];
index 4e224212a577a8aa360fa7bbb4f5d52686082b17..25de1abde8e7c55d92517f341adea57ba937b5d3 100644 (file)
@@ -130,7 +130,7 @@ char *qemuBuildControllerDevStr(const virDomainDef *domainDef,
                                 virQEMUCapsPtr qemuCaps,
                                 int *nusbcontroller);
 
-char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef,
+char *qemuBuildMemballoonDevStr(const virDomainDef *domainDef,
                                 virDomainMemballoonDefPtr dev,
                                 virQEMUCapsPtr qemuCaps);