[libvirt] [PATCH 03/10] qemu: Refactor creation of shared memory device commandline

Martin Kletzander mkletzan at redhat.com
Fri Jul 3 12:56:42 UTC 2015


On Wed, Jun 17, 2015 at 11:56:14AM +0800, Luyao Huang wrote:
>Rename qemuBuildShmemDevCmd to qemuBuildShmemDevStr and change the
>return type so that it can be reused in the device hotplug code later.
>
>And split the chardev creation part in a new function
>qemuBuildShmemBackendStr for reused in the device hotplug code later.
>
>Signed-off-by: Luyao Huang <lhuang at redhat.com>
>---
> src/qemu/qemu_command.c | 70 +++++++++++++++++++++++++++----------------------
> src/qemu/qemu_command.h |  7 +++++
> 2 files changed, 45 insertions(+), 32 deletions(-)
>
>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>index 636e040..0414f77 100644
>--- a/src/qemu/qemu_command.c
>+++ b/src/qemu/qemu_command.c
>@@ -8433,9 +8433,8 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
>     return ret;
> }
>
>-static int
>-qemuBuildShmemDevCmd(virCommandPtr cmd,
>-                     virDomainDefPtr def,
>+char *
>+qemuBuildShmemDevStr(virDomainDefPtr def,
>                      virDomainShmemDefPtr shmem,
>                      virQEMUCapsPtr qemuCaps)
> {
>@@ -8489,14 +8488,38 @@ qemuBuildShmemDevCmd(virCommandPtr cmd,
>     if (virBufferCheckError(&buf) < 0)
>         goto error;
>
>-    virCommandAddArg(cmd, "-device");
>-    virCommandAddArgBuffer(cmd, &buf);
>-
>-    return 0;
>+    return virBufferContentAndReset(&buf);
>

You should be able to just unconditionally do
return virBufferContentAndReset() here since it returns NULL if
there's a buf->error.

ACK with that changed.

>  error:
>     virBufferFreeAndReset(&buf);
>-    return -1;
>+    return NULL;
>+}
>+
>+char *
>+qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
>+                         virQEMUCapsPtr qemuCaps)
>+{
>+    char *devstr = NULL;
>+    virDomainChrSourceDef source = {
>+        .type = VIR_DOMAIN_CHR_TYPE_UNIX,
>+        .data.nix = {
>+            .path = shmem->server.path,
>+            .listen = false,
>+        }
>+    };
>+
>+    if (!shmem->server.path &&
>+        virAsprintf(&source.data.nix.path,
>+                    "/var/lib/libvirt/shmem-%s-sock",
>+                    shmem->name) < 0)
>+        return NULL;
>+
>+    devstr = qemuBuildChrChardevStr(&source, shmem->info.alias, qemuCaps);
>+
>+    if (!shmem->server.path)
>+        VIR_FREE(source.data.nix.path);
>+
>+    return devstr;
> }
>
> static int
>@@ -8505,35 +8528,18 @@ qemuBuildShmemCommandLine(virCommandPtr cmd,
>                           virDomainShmemDefPtr shmem,
>                           virQEMUCapsPtr qemuCaps)
> {
>-    if (qemuBuildShmemDevCmd(cmd, def, shmem, qemuCaps) < 0)
>+    char *devstr = NULL;
>+
>+    if (!(devstr = qemuBuildShmemDevStr(def, shmem, qemuCaps)))
>         return -1;
>+    virCommandAddArgList(cmd, "-device", devstr, NULL);
>+    VIR_FREE(devstr);
>
>     if (shmem->server.enabled) {
>-        char *devstr = NULL;
>-        virDomainChrSourceDef source = {
>-            .type = VIR_DOMAIN_CHR_TYPE_UNIX,
>-            .data.nix = {
>-                .path = shmem->server.path,
>-                .listen = false,
>-            }
>-        };
>-
>-        if (!shmem->server.path &&
>-            virAsprintf(&source.data.nix.path,
>-                        "/var/lib/libvirt/shmem-%s-sock",
>-                        shmem->name) < 0)
>+        if (!(devstr = qemuBuildShmemBackendStr(shmem, qemuCaps)))
>             return -1;
>
>-        devstr = qemuBuildChrChardevStr(&source, shmem->info.alias, qemuCaps);
>-
>-        if (!shmem->server.path)
>-            VIR_FREE(source.data.nix.path);
>-
>-        if (!devstr)
>-            return -1;
>-
>-        virCommandAddArg(cmd, "-chardev");
>-        virCommandAddArg(cmd, devstr);
>+        virCommandAddArgList(cmd, "-chardev", devstr, NULL);
>         VIR_FREE(devstr);
>     }
>
>diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
>index 0fc59a8..73f24dc 100644
>--- a/src/qemu/qemu_command.h
>+++ b/src/qemu/qemu_command.h
>@@ -194,6 +194,13 @@ int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
>                              const char **type,
>                              virJSONValuePtr *props);
>
>+char *qemuBuildShmemDevStr(virDomainDefPtr def,
>+                           virDomainShmemDefPtr shmem,
>+                           virQEMUCapsPtr qemuCaps);
>+char *qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
>+                               virQEMUCapsPtr qemuCaps);
>+
>+
> int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);
>
> /* Legacy, pre device support */
>--
>1.8.3.1
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150703/705dacc9/attachment-0001.sig>


More information about the libvir-list mailing list