e8e641
From b0e9d41346a272bbe33ce1da7f7dd015a58747e1 Mon Sep 17 00:00:00 2001
e8e641
Message-Id: <b0e9d41346a272bbe33ce1da7f7dd015a58747e1@dist-git>
e8e641
From: Michal Privoznik <mprivozn@redhat.com>
e8e641
Date: Tue, 7 Mar 2023 12:02:11 +0100
e8e641
Subject: [PATCH] qemu: Add @nodemaskRet argument to
e8e641
 qemuBuildMemoryBackendProps()
e8e641
e8e641
While it's true that anybody who's interested in getting
e8e641
.host-nodes attribute value can just use
e8e641
virJSONValueObjectGetArray() (and that's exactly what
e8e641
qemuBuildThreadContextProps() is doing, btw), if somebody is
e8e641
interested in getting the actual virBitmap, they would have to
e8e641
parse the JSON array.
e8e641
e8e641
Instead, introduce an argument to qemuBuildMemoryBackendProps()
e8e641
which is set to corresponding value used when formatting the
e8e641
attribute.
e8e641
e8e641
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
e8e641
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
e8e641
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
e8e641
(cherry picked from commit 9f26f6cc4bd6161a1978b8703005b9916270d382)
e8e641
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2185039
e8e641
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
e8e641
---
e8e641
 src/qemu/qemu_command.c | 14 ++++++++++----
e8e641
 src/qemu/qemu_command.h |  4 +++-
e8e641
 src/qemu/qemu_hotplug.c |  2 +-
e8e641
 3 files changed, 14 insertions(+), 6 deletions(-)
e8e641
e8e641
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
e8e641
index 436df47eaa..938332496f 100644
e8e641
--- a/src/qemu/qemu_command.c
e8e641
+++ b/src/qemu/qemu_command.c
e8e641
@@ -3234,6 +3234,7 @@ qemuBuildMemoryGetPagesize(virQEMUDriverConfig *cfg,
e8e641
  * @def: domain definition object
e8e641
  * @mem: memory definition object
e8e641
  * @force: forcibly use one of the backends
e8e641
+ * @nodemaskRet: [out] bitmap used to format .host-nodes attribute
e8e641
  *
e8e641
  * Creates a configuration object that represents memory backend of given guest
e8e641
  * NUMA node (domain @def and @mem). Use @priv->autoNodeset to fine tune the
e8e641
@@ -3258,7 +3259,8 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
e8e641
                             const virDomainDef *def,
e8e641
                             const virDomainMemoryDef *mem,
e8e641
                             bool force,
e8e641
-                            bool systemMemory)
e8e641
+                            bool systemMemory,
e8e641
+                            virBitmap **nodemaskRet)
e8e641
 {
e8e641
     const char *backendType = "memory-backend-file";
e8e641
     virDomainNumatuneMemMode mode;
e8e641
@@ -3445,6 +3447,9 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
e8e641
                                       "S:policy", qemuNumaPolicyTypeToString(mode),
e8e641
                                       NULL) < 0)
e8e641
                 return -1;
e8e641
+
e8e641
+            if (nodemaskRet)
e8e641
+                *nodemaskRet = nodemask;
e8e641
         }
e8e641
     }
e8e641
 
e8e641
@@ -3498,7 +3503,8 @@ qemuBuildMemoryCellBackendProps(virDomainDef *def,
e8e641
     mem.targetNode = cell;
e8e641
     mem.info.alias = alias;
e8e641
 
e8e641
-    return qemuBuildMemoryBackendProps(props, alias, cfg, priv, def, &mem, false, false);
e8e641
+    return qemuBuildMemoryBackendProps(props, alias, cfg, priv,
e8e641
+                                       def, &mem, false, false, NULL);
e8e641
 }
e8e641
 
e8e641
 
e8e641
@@ -3522,7 +3528,7 @@ qemuBuildMemoryDimmBackendStr(virCommand *cmd,
e8e641
     alias = g_strdup_printf("mem%s", mem->info.alias);
e8e641
 
e8e641
     if (qemuBuildMemoryBackendProps(&props, alias, cfg,
e8e641
-                                    priv, def, mem, true, false) < 0)
e8e641
+                                    priv, def, mem, true, false, NULL) < 0)
e8e641
         return -1;
e8e641
 
e8e641
     if (qemuBuildThreadContextProps(&tcProps, &props, priv) < 0)
e8e641
@@ -7055,7 +7061,7 @@ qemuBuildMemCommandLineMemoryDefaultBackend(virCommand *cmd,
e8e641
     mem.info.alias = (char *) defaultRAMid;
e8e641
 
e8e641
     if (qemuBuildMemoryBackendProps(&props, defaultRAMid, cfg,
e8e641
-                                    priv, def, &mem, false, true) < 0)
e8e641
+                                    priv, def, &mem, false, true, NULL) < 0)
e8e641
         return -1;
e8e641
 
e8e641
     if (qemuBuildThreadContextProps(&tcProps, &props, priv) < 0)
e8e641
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
e8e641
index c49096a057..9074822bc5 100644
e8e641
--- a/src/qemu/qemu_command.h
e8e641
+++ b/src/qemu/qemu_command.h
e8e641
@@ -22,6 +22,7 @@
e8e641
 #pragma once
e8e641
 
e8e641
 #include "domain_conf.h"
e8e641
+#include "virbitmap.h"
e8e641
 #include "vircommand.h"
e8e641
 #include "virenum.h"
e8e641
 #include "qemu_block.h"
e8e641
@@ -140,7 +141,8 @@ int qemuBuildMemoryBackendProps(virJSONValue **backendProps,
e8e641
                                 const virDomainDef *def,
e8e641
                                 const virDomainMemoryDef *mem,
e8e641
                                 bool force,
e8e641
-                                bool systemMemory);
e8e641
+                                bool systemMemory,
e8e641
+                                virBitmap **nodemaskRet);
e8e641
 
e8e641
 virJSONValue *
e8e641
 qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg,
e8e641
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
e8e641
index 2df59873db..8e72a2c431 100644
e8e641
--- a/src/qemu/qemu_hotplug.c
e8e641
+++ b/src/qemu/qemu_hotplug.c
e8e641
@@ -2284,7 +2284,7 @@ qemuDomainAttachMemory(virQEMUDriver *driver,
e8e641
         goto cleanup;
e8e641
 
e8e641
     if (qemuBuildMemoryBackendProps(&props, objalias, cfg,
e8e641
-                                    priv, vm->def, mem, true, false) < 0)
e8e641
+                                    priv, vm->def, mem, true, false, NULL) < 0)
e8e641
         goto cleanup;
e8e641
 
e8e641
     if (qemuProcessBuildDestroyMemoryPaths(driver, vm, mem, true) < 0)
e8e641
-- 
e8e641
2.40.0