virJSONValuePtr
qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem)
{
+ char *mem_alias = NULL;
char *mem_path = NULL;
virJSONValuePtr ret = NULL;
if (virAsprintf(&mem_path, "/dev/shm/%s", shmem->name) < 0)
return NULL;
- virJSONValueObjectCreate(&ret,
- "s:mem-path", mem_path,
- "U:size", shmem->size,
- "b:share", true,
- NULL);
-
- VIR_FREE(mem_path);
- return ret;
-}
-
-
-static char *
-qemuBuildShmemBackendMemStr(virDomainShmemDefPtr shmem)
-{
- char *ret = NULL;
- char *alias = NULL;
- virJSONValuePtr props = qemuBuildShmemBackendMemProps(shmem);
-
- if (!props)
- return NULL;
-
- if (virAsprintf(&alias, "shmmem-%s", shmem->info.alias) < 0)
+ if (virAsprintf(&mem_alias, "shmmem-%s", shmem->info.alias) < 0)
goto cleanup;
- ret = virQEMUBuildObjectCommandlineFromJSONType("memory-backend-file",
- alias,
- props);
- cleanup:
- VIR_FREE(alias);
- virJSONValueFree(props);
+ qemuMonitorCreateObjectProps(&ret, "memory-backend-file", mem_alias,
+ "s:mem-path", mem_path,
+ "U:size", shmem->size,
+ "b:share", true,
+ NULL);
+ cleanup:
+ VIR_FREE(mem_alias);
+ VIR_FREE(mem_path);
return ret;
}
virQEMUCapsPtr qemuCaps,
bool chardevStdioLogd)
{
+ virJSONValuePtr memProps = NULL;
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
char *devstr = NULL;
+ int rc;
if (shmem->size) {
/*
break;
case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN:
- if (!(devstr = qemuBuildShmemBackendMemStr(shmem)))
+ if (!(memProps = qemuBuildShmemBackendMemProps(shmem)))
return -1;
- virCommandAddArgList(cmd, "-object", devstr, NULL);
- VIR_FREE(devstr);
+ rc = virQEMUBuildObjectCommandlineFromJSON(&buf, memProps);
+ virJSONValueFree(memProps);
+
+ if (rc < 0)
+ return -1;
+
+ virCommandAddArg(cmd, "-object");
+ virCommandAddArgBuffer(cmd, &buf);
ATTRIBUTE_FALLTHROUGH;
case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL:
if (!(props = qemuBuildShmemBackendMemProps(shmem)))
goto cleanup;
- if (virAsprintf(&memAlias, "shmmem-%s", shmem->info.alias) < 0)
- goto cleanup;
}
qemuDomainObjEnterMonitor(driver, vm);
&shmem->server.chr) < 0)
goto exit_monitor;
} else {
- if (qemuMonitorAddObjectType(priv->mon, "memory-backend-file",
- memAlias, props) < 0) {
- props = NULL;
+ if (qemuMonitorAddObject(priv->mon, &props, &memAlias) < 0)
goto exit_monitor;
- }
- props = NULL;
}
release_backing = true;