[libvirt] [PATCH 06/13] qemu: Refactor qemuDomainGetChardevTLSObjects to converge code

John Ferlan jferlan at redhat.com
Fri Feb 17 19:39:23 UTC 2017


Create a qemuDomainAddChardevTLSObjects which will encapsulate the
qemuDomainGetChardevTLSObjects and qemuDomainAddTLSObjects so that
the callers don't need to worry about the props.

Move the dev->type and haveTLS checks in to the Add function to avoid
an unnecessary call to qemuDomainAddTLSObjects

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/qemu/qemu_hotplug.c | 80 ++++++++++++++++++++++++++-----------------------
 1 file changed, 43 insertions(+), 37 deletions(-)

diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index fb8a052..6dd1d9e 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1622,10 +1622,6 @@ qemuDomainGetChardevTLSObjects(virQEMUDriverConfigPtr cfg,
     qemuDomainChrSourcePrivatePtr chrSourcePriv =
         QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev);
 
-    if (dev->type != VIR_DOMAIN_CHR_TYPE_TCP ||
-        dev->data.tcp.haveTLS != VIR_TRISTATE_BOOL_YES)
-        return 0;
-
     /* Add a secret object in order to access the TLS environment.
      * The secinfo will only be created for serial TCP device. */
     if (chrSourcePriv && chrSourcePriv->secinfo) {
@@ -1652,6 +1648,43 @@ qemuDomainGetChardevTLSObjects(virQEMUDriverConfigPtr cfg,
 }
 
 
+static int
+qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver,
+                               virQEMUDriverConfigPtr cfg,
+                               virDomainObjPtr vm,
+                               virDomainChrSourceDefPtr dev,
+                               char *charAlias,
+                               char **tlsAlias,
+                               char **secAlias)
+{
+    int ret = -1;
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    virJSONValuePtr tlsProps = NULL;
+    virJSONValuePtr secProps = NULL;
+
+    if (dev->type != VIR_DOMAIN_CHR_TYPE_TCP ||
+        dev->data.tcp.haveTLS != VIR_TRISTATE_BOOL_YES)
+        return 0;
+
+    if (qemuDomainGetChardevTLSObjects(cfg, priv, dev, charAlias,
+                                       &tlsProps, tlsAlias,
+                                       &secProps, secAlias) < 0)
+        goto cleanup;
+
+    if (qemuDomainAddTLSObjects(driver, vm, *secAlias, &secProps,
+                                *tlsAlias, &tlsProps) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    virJSONValueFree(tlsProps);
+    virJSONValueFree(secProps);
+
+    return ret;
+}
+
+
 int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
                                    virQEMUDriverPtr driver,
                                    virDomainObjPtr vm,
@@ -1665,8 +1698,6 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
     char *charAlias = NULL;
     char *devstr = NULL;
     bool chardevAdded = false;
-    virJSONValuePtr tlsProps = NULL;
-    virJSONValuePtr secProps = NULL;
     char *tlsAlias = NULL;
     char *secAlias = NULL;
     bool need_release = false;
@@ -1695,13 +1726,8 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
                                        redirdev->source) < 0)
         goto cleanup;
 
-    if (qemuDomainGetChardevTLSObjects(cfg, priv, redirdev->source,
-                                       charAlias, &tlsProps, &tlsAlias,
-                                       &secProps, &secAlias) < 0)
-        goto cleanup;
-
-    if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
-                                tlsAlias, &tlsProps) < 0)
+    if (qemuDomainAddChardevTLSObjects(driver, cfg, vm, redirdev->source,
+                                       charAlias, &tlsAlias, &secAlias) < 0)
         goto cleanup;
 
     qemuDomainObjEnterMonitor(driver, vm);
@@ -1726,9 +1752,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn,
     if (ret < 0 && need_release)
         qemuDomainReleaseDeviceAddress(vm, &redirdev->info, NULL);
     VIR_FREE(tlsAlias);
-    virJSONValueFree(tlsProps);
     VIR_FREE(secAlias);
-    virJSONValueFree(secProps);
     VIR_FREE(charAlias);
     VIR_FREE(devstr);
     virObjectUnref(cfg);
@@ -1924,9 +1948,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
     bool chardevAttached = false;
     bool teardowncgroup = false;
     bool teardowndevice = false;
-    virJSONValuePtr tlsProps = NULL;
     char *tlsAlias = NULL;
-    virJSONValuePtr secProps = NULL;
     char *secAlias = NULL;
     bool need_release = false;
 
@@ -1965,13 +1987,8 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
                                        dev) < 0)
         goto cleanup;
 
-    if (qemuDomainGetChardevTLSObjects(cfg, priv, dev, charAlias,
-                                       &tlsProps, &tlsAlias,
-                                       &secProps, &secAlias) < 0)
-        goto cleanup;
-
-    if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
-                                tlsAlias, &tlsProps) < 0)
+    if (qemuDomainAddChardevTLSObjects(driver, cfg, vm, dev, charAlias,
+                                       &tlsAlias, &secAlias) < 0)
         goto cleanup;
 
     qemuDomainObjEnterMonitor(driver, vm);
@@ -2002,9 +2019,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
             VIR_WARN("Unable to remove chr device from /dev");
     }
     VIR_FREE(tlsAlias);
-    virJSONValueFree(tlsProps);
     VIR_FREE(secAlias);
-    virJSONValueFree(secProps);
     VIR_FREE(charAlias);
     VIR_FREE(devstr);
     virObjectUnref(cfg);
@@ -2047,8 +2062,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
     bool chardevAdded = false;
     bool objAdded = false;
     virJSONValuePtr props = NULL;
-    virJSONValuePtr tlsProps = NULL;
-    virJSONValuePtr secProps = NULL;
     virDomainCCWAddressSetPtr ccwaddrs = NULL;
     const char *type;
     int ret = -1;
@@ -2116,13 +2129,8 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
                                            rng->source.chardev) < 0)
             goto cleanup;
 
-        if (qemuDomainGetChardevTLSObjects(cfg, priv, rng->source.chardev,
-                                           charAlias, &tlsProps, &tlsAlias,
-                                           &secProps, &secAlias) < 0)
-            goto cleanup;
-
-        if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps,
-                                    tlsAlias, &tlsProps) < 0)
+        if (qemuDomainAddChardevTLSObjects(driver, cfg, vm, rng->source.chardev,
+                                           charAlias, &tlsAlias, &secAlias) < 0)
             goto cleanup;
     }
 
@@ -2155,8 +2163,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn,
  audit:
     virDomainAuditRNG(vm, NULL, rng, "attach", ret == 0);
  cleanup:
-    virJSONValueFree(tlsProps);
-    virJSONValueFree(secProps);
     virJSONValueFree(props);
     if (ret < 0) {
         if (releaseaddr)
-- 
2.9.3




More information about the libvir-list mailing list