1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

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 <lhuang@redhat.com>
This commit is contained in:
Luyao Huang 2015-06-17 11:56:14 +08:00 committed by Martin Kletzander
parent e9401342e1
commit ffe96a1593
2 changed files with 45 additions and 32 deletions

View File

@ -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);
}

View File

@ -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 */