On a Thursday in 2021, Peter Krempa wrote:
This includes the 'pc-dimm', 'nvdimm', 'virtio-pmem-pci' and 'virtio-mem-pci' devices. The value types according to QEMU are: 'pc-dimm' node=<uint32> - (default: 0) memdev=<link<memory-backend>> 'nvdimm' label-size=<int> memdev=<link<memory-backend>> node=<uint32> - (default: 0) unarmed=<bool> - (default: false) uuid=<QemuUUID> 'virtio-pmem-pci' memdev=<link<memory-backend>> 'virtio-mem-pci' block-size=<size> memdev=<link<memory-backend>> node=<uint32> - (default: 0) requested-size=<size> Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/qemu/qemu_command.c | 60 +++++++++++++++++++---------------------- src/qemu/qemu_command.h | 7 +++-- src/qemu/qemu_hotplug.c | 6 ++--- 3 files changed, 33 insertions(+), 40 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6fa804f7d8..794119a58c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3723,13 +3723,14 @@ qemuBuildMemoryDimmBackendStr(virCommand *cmd, } -char * -qemuBuildMemoryDeviceStr(const virDomainDef *def, - virDomainMemoryDef *mem, - virQEMUCaps *qemuCaps G_GNUC_UNUSED) +virJSONValue * +qemuBuildMemoryDeviceProps(const virDomainDef *def, + virDomainMemoryDef *mem) { - g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; + g_autoptr(virJSONValue) props = NULL; const char *device = NULL; + g_autofree char *uuidstr = NULL; + virTristateBool unarmed = VIR_TRISTATE_BOOL_ABSENT; if (!mem->info.alias) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -3761,37 +3762,31 @@ qemuBuildMemoryDeviceStr(const virDomainDef *def, break; } - virBufferAsprintf(&buf, "%s,", device); - - if (mem->targetNode >= 0) - virBufferAsprintf(&buf, "node=%d,", mem->targetNode); - - if (mem->labelsize) - virBufferAsprintf(&buf, "label-size=%llu,", mem->labelsize * 1024); - - if (mem->blocksize) { - virBufferAsprintf(&buf, "block-size=%llu,", mem->blocksize * 1024); - virBufferAsprintf(&buf, "requested-size=%llu,", mem->requestedsize * 1024); - } + if (mem->readonly) + unarmed = VIR_TRISTATE_BOOL_YES; if (mem->uuid) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - + uuidstr = g_new0(char, VIR_UUID_STRING_BUFLEN); virUUIDFormat(mem->uuid, uuidstr); - virBufferAsprintf(&buf, "uuid=%s,", uuidstr); } - if (mem->readonly) { - virBufferAddLit(&buf, "unarmed=on,"); - } - - virBufferAsprintf(&buf, "memdev=mem%s,id=%s", - mem->info.alias, mem->info.alias); + if (virJSONValueObjectCreate(&props, + "s:driver", device, + "k:node", mem->targetNode, + "P:label-size", mem->labelsize * 1024, + "P:block-size", mem->blocksize * 1024, + "P:requested-size", mem->requestedsize * 1024, + "S:uuid", uuidstr, + "T:unarmed", unarmed, + "f:memdev", g_strdup_printf("mem%s", mem->info.alias),
One more usage of 'f'. Also, I'm really glad these keys use letters, instead of, let's say, Morse code.
+ "s:id", mem->info.alias, + NULL) < 0) + return NULL;
Reviewed-by: Ján Tomko <jtomko@xxxxxxxxxx> Jano
Attachment:
signature.asc
Description: PGP signature