Re: [PATCH 058/103] qemuBuildMemoryDeviceCommandLine: Generate via JSON

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux