From ffe96a15933edf726b66cdace02e2e0db6d41d30 Mon Sep 17 00:00:00 2001 From: Luyao Huang Date: Wed, 17 Jun 2015 11:56:14 +0800 Subject: [PATCH] qemu: Refactor creation of shared memory device commandline 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 reuse in the device hotplug code later. Signed-off-by: Luyao Huang --- 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 f923d8a83..a56ccb8e4 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8526,9 +8526,8 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, return ret; } -static int -qemuBuildShmemDevCmd(virCommandPtr cmd, - virDomainDefPtr def, +char * +qemuBuildShmemDevStr(virDomainDefPtr def, virDomainShmemDefPtr shmem, virQEMUCapsPtr qemuCaps) { @@ -8582,14 +8581,38 @@ qemuBuildShmemDevCmd(virCommandPtr cmd, if (virBufferCheckError(&buf) < 0) goto error; - virCommandAddArg(cmd, "-device"); - virCommandAddArgBuffer(cmd, &buf); - - return 0; + return virBufferContentAndReset(&buf); 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 @@ -8598,35 +8621,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 6e0c3a37c..e356f5bb3 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 */ -- 2.39.5