]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_process: Deduplicate code in qemuProcessNeedHugepagesPath()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 5 Feb 2021 12:34:35 +0000 (13:34 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 18 May 2021 15:47:58 +0000 (17:47 +0200)
The aim of qemuProcessNeedHugepagesPath() is to return whether
guest needs private path inside HugeTLBFS mounts (deducted from
domain definition @def) or whether the memory device that user is
hotplugging in needs the private path (deducted from the @mem
argument). The actual creation of the path is done in the only
caller qemuProcessBuildDestroyMemoryPaths().

The rule for the first case (@def) and the second case (@mem) is
the same (domain has a DIMM device that has HP requested) and is
written twice. Move the logic into a function to deduplicate the
code.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_process.c

index 92c1f0ab7432b7445a6b793c3bb3a398b80047e3..75a3a0c9b066ad3eb2c15901f502f27fddd01853 100644 (file)
@@ -3872,6 +3872,26 @@ qemuProcessReconnectCheckMemAliasOrderMismatch(virDomainObj *vm)
 }
 
 
+static bool
+qemuProcessDomainMemoryDefNeedHugepagesPath(const virDomainMemoryDef *mem,
+                                            const long system_pagesize)
+{
+    switch (mem->model) {
+    case VIR_DOMAIN_MEMORY_MODEL_DIMM:
+        return mem->pagesize && mem->pagesize != system_pagesize;
+
+    case VIR_DOMAIN_MEMORY_MODEL_NONE:
+    case VIR_DOMAIN_MEMORY_MODEL_NVDIMM:
+    case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM:
+    case VIR_DOMAIN_MEMORY_MODEL_LAST:
+        /* None of these can be backed by hugepages. */
+        return false;
+    }
+
+    return false;
+}
+
+
 static bool
 qemuProcessNeedHugepagesPath(virDomainDef *def,
                              virDomainMemoryDef *mem)
@@ -3888,16 +3908,12 @@ qemuProcessNeedHugepagesPath(virDomainDef *def,
     }
 
     for (i = 0; i < def->nmems; i++) {
-        if (def->mems[i]->model == VIR_DOMAIN_MEMORY_MODEL_DIMM &&
-            def->mems[i]->pagesize &&
-            def->mems[i]->pagesize != system_pagesize)
+        if (qemuProcessDomainMemoryDefNeedHugepagesPath(def->mems[i], system_pagesize))
             return true;
     }
 
     if (mem &&
-        mem->model == VIR_DOMAIN_MEMORY_MODEL_DIMM &&
-        mem->pagesize &&
-        mem->pagesize != system_pagesize)
+        qemuProcessDomainMemoryDefNeedHugepagesPath(mem, system_pagesize))
         return true;
 
     return false;