]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuBuildSerialCommandLine
authorJohn Ferlan <jferlan@redhat.com>
Thu, 18 Feb 2016 15:46:48 +0000 (10:46 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Sat, 12 Mar 2016 00:23:46 +0000 (19:23 -0500)
Add new function to manage adding the serial device options to the
command line removing that task from the mainline qemuBuildCommandLine.

Using const virDomainDef causes collateral damage in other called APIs
which need to make the similar adjustment

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

index 403d8729cb252e6732ab2bae0782b42a2fbcf252..b223837e249a2ab0a1426c8ac467cd5ddec9aedc 100644 (file)
@@ -3839,7 +3839,7 @@ virQEMUCapsCacheFree(virQEMUCapsCachePtr cache)
 
 
 bool
-virQEMUCapsSupportsChardev(virDomainDefPtr def,
+virQEMUCapsSupportsChardev(const virDomainDef *def,
                            virQEMUCapsPtr qemuCaps,
                            virDomainChrDefPtr chr)
 {
index 01ceb8eabe2fda4ba492109a2614357965d5d491..caf3d1be7be3bcc2530579611d12762e24812627 100644 (file)
@@ -450,7 +450,7 @@ int virQEMUCapsParseDeviceStr(virQEMUCapsPtr qemuCaps, const char *str);
 
 VIR_ENUM_DECL(virQEMUCaps);
 
-bool virQEMUCapsSupportsChardev(virDomainDefPtr def,
+bool virQEMUCapsSupportsChardev(const virDomainDef *def,
                                 virQEMUCapsPtr qemuCaps,
                                 virDomainChrDefPtr chr);
 
index 982541a98505b7e12bbba0a9f2488812cca019fa..1659e7155535afd174dea2adf90d5ff9bab5cb92 100644 (file)
@@ -4586,7 +4586,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
 
 
 static char *
-qemuBuildVirtioSerialPortDevStr(virDomainDefPtr def,
+qemuBuildVirtioSerialPortDevStr(const virDomainDef *def,
                                 virDomainChrDefPtr dev,
                                 virQEMUCapsPtr qemuCaps)
 {
@@ -7743,7 +7743,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
 
 static int
 qemuBuildChrDeviceCommandLine(virCommandPtr cmd,
-                              virDomainDefPtr def,
+                              const virDomainDef *def,
                               virDomainChrDefPtr chr,
                               virQEMUCapsPtr qemuCaps)
 {
@@ -7757,6 +7757,62 @@ qemuBuildChrDeviceCommandLine(virCommandPtr cmd,
     return 0;
 }
 
+
+static int
+qemuBuildSerialCommandLine(virLogManagerPtr logManager,
+                           virCommandPtr cmd,
+                           const virDomainDef *def,
+                           virQEMUCapsPtr qemuCaps)
+{
+    size_t i;
+    int actualSerials = 0;
+    bool havespice = false;
+
+    if (def->nserials) {
+        for (i = 0; i < def->ngraphics && !havespice; i++) {
+            if (def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE)
+                havespice = true;
+        }
+    }
+
+    for (i = 0; i < def->nserials; i++) {
+        virDomainChrDefPtr serial = def->serials[i];
+        char *devstr;
+
+        if (serial->source.type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice)
+            continue;
+
+        /* Use -chardev with -device if they are available */
+        if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
+            virCommandAddArg(cmd, "-chardev");
+            if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
+                                                  &serial->source,
+                                                  serial->info.alias,
+                                                  qemuCaps)))
+                return -1;
+            virCommandAddArg(cmd, devstr);
+            VIR_FREE(devstr);
+
+            if (qemuBuildChrDeviceCommandLine(cmd, def, serial, qemuCaps) < 0)
+                return -1;
+        } else {
+            virCommandAddArg(cmd, "-serial");
+            if (!(devstr = qemuBuildChrArgStr(&serial->source, NULL)))
+                return -1;
+            virCommandAddArg(cmd, devstr);
+            VIR_FREE(devstr);
+        }
+        actualSerials++;
+    }
+
+    /* If we have -device, then we set -nodefaults already */
+    if (!actualSerials && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
+        virCommandAddArgList(cmd, "-serial", "none", NULL);
+
+    return 0;
+}
+
+
 static int
 qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
                                  virDomainDefPtr def,
@@ -8122,10 +8178,8 @@ qemuBuildCommandLine(virConnectPtr conn,
     virErrorPtr originalError = NULL;
     size_t i, j;
     char uuid[VIR_UUID_STRING_BUFLEN];
-    bool havespice = false;
     virCommandPtr cmd = NULL;
     bool emitBootindex = false;
-    int actualSerials = 0;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
     int bootHostdevNet = 0;
 
@@ -8255,48 +8309,8 @@ qemuBuildCommandLine(virConnectPtr conn,
     if (qemuBuildSmartcardCommandLine(logManager, cmd, def, qemuCaps) < 0)
         goto error;
 
-    if (def->nserials) {
-        for (i = 0; i < def->ngraphics; i++) {
-            if (def->graphics[i]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
-                havespice = true;
-                break;
-            }
-        }
-    }
-
-    for (i = 0; i < def->nserials; i++) {
-        virDomainChrDefPtr serial = def->serials[i];
-        char *devstr;
-
-        if (serial->source.type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice)
-            continue;
-
-        /* Use -chardev with -device if they are available */
-        if (virQEMUCapsSupportsChardev(def, qemuCaps, serial)) {
-            if (!(devstr = qemuBuildChrChardevStr(logManager, cmd, def,
-                                                  &serial->source,
-                                                  serial->info.alias,
-                                                  qemuCaps)))
-                goto error;
-            virCommandAddArg(cmd, "-chardev");
-            virCommandAddArg(cmd, devstr);
-            VIR_FREE(devstr);
-
-            if (qemuBuildChrDeviceCommandLine(cmd, def, serial, qemuCaps) < 0)
-                goto error;
-        } else {
-            virCommandAddArg(cmd, "-serial");
-            if (!(devstr = qemuBuildChrArgStr(&serial->source, NULL)))
-                goto error;
-            virCommandAddArg(cmd, devstr);
-            VIR_FREE(devstr);
-        }
-        actualSerials++;
-    }
-
-    /* If we have -device, then we set -nodefault already */
-    if (!actualSerials && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
-            virCommandAddArgList(cmd, "-serial", "none", NULL);
+    if (qemuBuildSerialCommandLine(logManager, cmd, def, qemuCaps) < 0)
+        goto error;
 
     if (!def->nparallels) {
         /* If we have -device, then we set -nodefault already */
@@ -9204,7 +9218,7 @@ qemuBuildCommandLine(virConnectPtr conn,
  */
 static int
 qemuBuildSerialChrDeviceStr(char **deviceStr,
-                            virDomainDefPtr def,
+                            const virDomainDef *def,
                             virDomainChrDefPtr serial,
                             virQEMUCapsPtr qemuCaps,
                             virArch arch,
@@ -9299,7 +9313,7 @@ qemuBuildParallelChrDeviceStr(char **deviceStr,
 
 static int
 qemuBuildChannelChrDeviceStr(char **deviceStr,
-                             virDomainDefPtr def,
+                             const virDomainDef *def,
                              virDomainChrDefPtr chr,
                              virQEMUCapsPtr qemuCaps)
 {
@@ -9339,7 +9353,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr,
 
 static int
 qemuBuildConsoleChrDeviceStr(char **deviceStr,
-                             virDomainDefPtr def,
+                             const virDomainDef *def,
                              virDomainChrDefPtr chr,
                              virQEMUCapsPtr qemuCaps)
 {
@@ -9379,7 +9393,7 @@ qemuBuildConsoleChrDeviceStr(char **deviceStr,
 
 int
 qemuBuildChrDeviceStr(char **deviceStr,
-                      virDomainDefPtr vmdef,
+                      const virDomainDef *vmdef,
                       virDomainChrDefPtr chr,
                       virQEMUCapsPtr qemuCaps)
 {
index 8167af8b9f05ccc617f09795ffc97ad370e5d642..0316f4301a8fe51e02545965de68cc9a2969e954 100644 (file)
@@ -82,7 +82,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
 /* Generate '-device' string for chardev device */
 int
 qemuBuildChrDeviceStr(char **deviceStr,
-                      virDomainDefPtr vmdef,
+                      const virDomainDef *vmdef,
                       virDomainChrDefPtr chr,
                       virQEMUCapsPtr qemuCaps);