diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 81fc2bc5487a5b136d13c20dd430723c95ef97a6..16f5aa90983fd79ec2000ecdda953f6cbdf88fed 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3177,31 +3177,38 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, /** * qemuBuildMemoryBackendStr: - * @mem: memory definition object - * @autoNodeset: fallback nodeset in case of automatic numa placement - * @def: domain definition object - * @qemuCaps: qemu capabilities object + * @backendProps: [out] constructed object + * @backendType: [out] type of the backennd used * @cfg: qemu driver config object - * @aliasPrefix: prefix string of the alias (to allow for multiple frontents) - * @id: index of the device (to construct the alias) - * @backendStr: returns the object string + * @qemuCaps: qemu capabilities object + * @def: domain definition object + * @mem: memory definition object + * @autoNodeset: fallback nodeset in case of automatic NUMA placement + * @force: forcibly use one of the backends + * + * Creates a configuration object that represents memory backend of given guest + * NUMA node (domain @def and @mem). Use @autoNodeset to fine tune the + * placement of the memory on the host NUMA nodes. + * + * By default, if no memory-backend-* object is necessary to fulfil the guest + * configuration value of 1 is returned. This behaviour can be suppressed by + * setting @force to true in which case 0 would be returned. * - * Formats the configuration string for the memory device backend according - * to the configuration. @pagesize and @hostNodes can be used to override the - * default source configuration, both are optional. + * Then, if one of the two memory-backend-* should be used, the @qemuCaps is + * consulted to check if qemu does support it. * - * Returns 0 on success, 1 if only the implicit memory-device-ram with no - * other configuration was used (to detect legacy configurations). Returns - * -1 in case of an error. + * Returns: 0 on success, + * 1 on success and if there's no need to use memory-backend-* + * -1 on error. */ int -qemuBuildMemoryBackendStr(virDomainMemoryDefPtr mem, - virBitmapPtr autoNodeset, - virDomainDefPtr def, - virQEMUCapsPtr qemuCaps, - virQEMUDriverConfigPtr cfg, +qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps, const char **backendType, - virJSONValuePtr *backendProps, + virQEMUDriverConfigPtr cfg, + virQEMUCapsPtr qemuCaps, + virDomainDefPtr def, + virDomainMemoryDefPtr mem, + virBitmapPtr autoNodeset, bool force) { virDomainHugePagePtr master_hugepage = NULL; @@ -3425,8 +3432,8 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, if (virAsprintf(&alias, "ram-node%zu", cell) < 0) goto cleanup; - if ((rc = qemuBuildMemoryBackendStr(&mem, auto_nodeset, def, qemuCaps, - cfg, &backendType, &props, false)) < 0) + if ((rc = qemuBuildMemoryBackendStr(&props, &backendType, cfg, qemuCaps, + def, &mem, auto_nodeset, false)) < 0) goto cleanup; if (!(*backendStr = virQEMUBuildObjectCommandlineFromJSON(backendType, @@ -3465,9 +3472,8 @@ qemuBuildMemoryDimmBackendStr(virDomainMemoryDefPtr mem, if (virAsprintf(&alias, "mem%s", mem->info.alias) < 0) goto cleanup; - if (qemuBuildMemoryBackendStr(mem, auto_nodeset, - def, qemuCaps, cfg, - &backendType, &props, true) < 0) + if (qemuBuildMemoryBackendStr(&props, &backendType, cfg, qemuCaps, + def, mem, auto_nodeset, true) < 0) goto cleanup; ret = virQEMUBuildObjectCommandlineFromJSON(backendType, alias, props); diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 9b2b81f552d935c771264e7dd4ae008deda5f8f6..f3ed9e7e4e206365d3557f46fc8c410d5d0d311e 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -124,13 +124,13 @@ char *qemuBuildControllerDevStr(const virDomainDef *domainDef, virQEMUCapsPtr qemuCaps, int *nusbcontroller); -int qemuBuildMemoryBackendStr(virDomainMemoryDefPtr mem, - virBitmapPtr autoNodeset, - virDomainDefPtr def, - virQEMUCapsPtr qemuCaps, - virQEMUDriverConfigPtr cfg, +int qemuBuildMemoryBackendStr(virJSONValuePtr *backendProps, const char **backendType, - virJSONValuePtr *backendProps, + virQEMUDriverConfigPtr cfg, + virQEMUCapsPtr qemuCaps, + virDomainDefPtr def, + virDomainMemoryDefPtr mem, + virBitmapPtr autoNodeset, bool force); char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index cf1a36ecc6bbbac2962929822f016e965cbcb004..b50f44cf347d9d32c4afe39247cbfe1de5d94499 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2240,8 +2240,8 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, if (!(devstr = qemuBuildMemoryDeviceStr(mem))) goto cleanup; - if (qemuBuildMemoryBackendStr(mem, NULL, vm->def, priv->qemuCaps, - cfg, &backendType, &props, true) < 0) + if (qemuBuildMemoryBackendStr(&props, &backendType, cfg, + priv->qemuCaps, vm->def, mem, NULL, true) < 0) goto cleanup; if (virDomainMemoryInsert(vm->def, mem) < 0) {