ab7a78
From a2cb0eca44996e1a7a397f028d44994f2e402a2e Mon Sep 17 00:00:00 2001
ab7a78
Message-Id: <a2cb0eca44996e1a7a397f028d44994f2e402a2e@dist-git>
ab7a78
From: Michal Privoznik <mprivozn@redhat.com>
ab7a78
Date: Mon, 5 Sep 2022 10:34:44 +0200
ab7a78
Subject: [PATCH] qemu_process: Don't require a hugetlbfs mount for memfd
ab7a78
ab7a78
The aim of qemuProcessNeedHugepagesPath() is to determine whether
ab7a78
a hugetlbfs mount point is required for given domain (as in
ab7a78
whether qemuBuildMemoryBackendProps() picks up
ab7a78
memory-backend-file pointing to a hugetlbfs mount point). Well,
ab7a78
when domain is configured to use memfd backend then that
ab7a78
condition can never be true. Therefore, skip creating domain's
ab7a78
private path under hugetlbfs mount points.
ab7a78
ab7a78
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
ab7a78
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
ab7a78
(cherry picked from commit f14f8dff9330ed51d817f190a2ee9ac76dfac00b)
ab7a78
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2132177
ab7a78
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
ab7a78
---
ab7a78
 src/qemu/qemu_process.c | 12 +++++++++++-
ab7a78
 1 file changed, 11 insertions(+), 1 deletion(-)
ab7a78
ab7a78
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
ab7a78
index 5c6657a876..540eee9ff0 100644
ab7a78
--- a/src/qemu/qemu_process.c
ab7a78
+++ b/src/qemu/qemu_process.c
ab7a78
@@ -3810,8 +3810,18 @@ qemuProcessNeedHugepagesPath(virDomainDef *def,
ab7a78
     const long system_pagesize = virGetSystemPageSizeKB();
ab7a78
     size_t i;
ab7a78
 
ab7a78
-    if (def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE)
ab7a78
+    switch ((virDomainMemorySource)def->mem.source) {
ab7a78
+    case VIR_DOMAIN_MEMORY_SOURCE_FILE:
ab7a78
+        /* This needs a hugetlbfs mount. */
ab7a78
         return true;
ab7a78
+    case VIR_DOMAIN_MEMORY_SOURCE_MEMFD:
ab7a78
+        /* memfd works without a hugetlbfs mount */
ab7a78
+        return false;
ab7a78
+    case VIR_DOMAIN_MEMORY_SOURCE_NONE:
ab7a78
+    case VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS:
ab7a78
+    case VIR_DOMAIN_MEMORY_SOURCE_LAST:
ab7a78
+        break;
ab7a78
+    }
ab7a78
 
ab7a78
     for (i = 0; i < def->mem.nhugepages; i++) {
ab7a78
         if (def->mem.hugepages[i].size != system_pagesize)
ab7a78
-- 
ab7a78
2.37.2
ab7a78