]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Move hugepage XML validation check out of qemu_command
authorPavel Hrdina <phrdina@redhat.com>
Thu, 9 Aug 2018 12:02:16 +0000 (14:02 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Fri, 10 Aug 2018 15:06:48 +0000 (17:06 +0200)
We can safely validate the hugepage nodeset attribute at a define time.
This validation is not done for already existing domains when the daemon
is restarted.

All the changes to the tests are necessary because we move the error
from domain start into XML parse.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/conf/domain_conf.c
src/qemu/qemu_command.c
tests/qemuxml2argvdata/seclabel-dynamic-none-relabel.xml
tests/qemuxml2argvtest.c
tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml [deleted symlink]
tests/qemuxml2xmloutdata/hugepages-nodeset.xml [deleted symlink]
tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml [deleted symlink]
tests/qemuxml2xmloutdata/seclabel-dynamic-none-relabel.xml
tests/qemuxml2xmltest.c

index 8fd774b531a2e4fbd570cf1df257f02f6f71e08e..be9c08626a05b5d1344eff8544e1fe91b6af7f6b 100644 (file)
@@ -6184,6 +6184,35 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
 }
 
 
+static int
+virDomainDefMemtuneValidate(const virDomainDef *def)
+{
+    const virDomainMemtune *mem = &(def->mem);
+    size_t i;
+    ssize_t pos = virDomainNumaGetNodeCount(def->numa) - 1;
+
+    for (i = 0; i < mem->nhugepages; i++) {
+        ssize_t nextBit;
+
+        if (!mem->hugepages[i].nodemask) {
+            /* This is the master hugepage to use. Skip it as it has no
+             * nodemask anyway. */
+            continue;
+        }
+
+        nextBit = virBitmapNextSetBit(mem->hugepages[i].nodemask, pos);
+        if (nextBit >= 0) {
+            virReportError(VIR_ERR_XML_DETAIL,
+                           _("hugepages: node %zd not found"),
+                           nextBit);
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 static int
 virDomainDefValidateInternal(const virDomainDef *def)
 {
@@ -6219,6 +6248,9 @@ virDomainDefValidateInternal(const virDomainDef *def)
     if (virDomainDefLifecycleActionValidate(def) < 0)
         return -1;
 
+    if (virDomainDefMemtuneValidate(def) < 0)
+        return -1;
+
     return 0;
 }
 
index 12ff09d46dadad998304ae1d19bc71eacc8ffa3b..a3fadc505d3e6723a00ef32ccebdb80bb2f8602a 100644 (file)
@@ -7433,16 +7433,6 @@ qemuBuildMemPathStr(virQEMUDriverConfigPtr cfg,
     if (!def->mem.nhugepages)
         return 0;
 
-    if (def->mem.hugepages[0].nodemask) {
-        ssize_t next_bit = virBitmapNextSetBit(def->mem.hugepages[0].nodemask, -1);
-        if (next_bit >= 0) {
-            virReportError(VIR_ERR_XML_DETAIL,
-                           _("hugepages: node %zd not found"),
-                           next_bit);
-            return -1;
-        }
-    }
-
     /* There is one special case: if user specified "huge"
      * pages of regular system pages size.
      * And there is nothing to do in this case.
@@ -7575,30 +7565,6 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
     if (!virDomainNumatuneNodesetIsAvailable(def->numa, priv->autoNodeset))
         goto cleanup;
 
-    for (i = 0; i < def->mem.nhugepages; i++) {
-        ssize_t next_bit, pos = 0;
-
-        if (!def->mem.hugepages[i].nodemask) {
-            /* This is the master hugepage to use. Skip it as it has no
-             * nodemask anyway. */
-            continue;
-        }
-
-        if (ncells) {
-            /* Fortunately, we allow only guest NUMA nodes to be continuous
-             * starting from zero. */
-            pos = ncells - 1;
-        }
-
-        next_bit = virBitmapNextSetBit(def->mem.hugepages[i].nodemask, pos);
-        if (next_bit >= 0) {
-            virReportError(VIR_ERR_XML_DETAIL,
-                           _("hugepages: node %zd not found"),
-                           next_bit);
-            goto cleanup;
-        }
-    }
-
     if (VIR_ALLOC_N(nodeBackends, ncells) < 0)
         goto cleanup;
 
index 47f253b5f776c2c9c4486915434a2963fe59e2b0..e954250009ba563fda02038764ac54179a7ea813 100644 (file)
@@ -5,7 +5,7 @@
   <currentMemory unit='KiB'>262144</currentMemory>
   <memoryBacking>
     <hugepages>
-      <page size='2048' unit='KiB' nodeset='0'/>
+      <page size='2048' unit='KiB'/>
     </hugepages>
   </memoryBacking>
   <vcpu placement='static'>4</vcpu>
index 7721827f40eff5345ee5a73b2b3b53c021970e5b..8d883efafd1a08d2c8592edb8e021f712557083f 100644 (file)
@@ -958,12 +958,12 @@ mymain(void)
     DO_TEST("hugepages-default", NONE);
     DO_TEST("hugepages-default-2M", NONE);
     DO_TEST("hugepages-default-system-size", NONE);
-    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
-    DO_TEST_FAILURE("hugepages-nodeset", NONE);
-    DO_TEST_FAILURE("hugepages-nodeset-nonexist",
-                    QEMU_CAPS_DEVICE_PC_DIMM,
-                    QEMU_CAPS_OBJECT_MEMORY_FILE,
-                    QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
+    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
+    DO_TEST_PARSE_ERROR("hugepages-nodeset", NONE);
+    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
+                        QEMU_CAPS_DEVICE_PC_DIMM,
+                        QEMU_CAPS_OBJECT_MEMORY_FILE,
+                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
     DO_TEST("hugepages-numa-default",
             QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-numa-default-2M",
@@ -978,9 +978,9 @@ mymain(void)
     DO_TEST("hugepages-numa-nodeset-part",
             QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
-    DO_TEST_FAILURE("hugepages-numa-nodeset-nonexist",
-                    QEMU_CAPS_OBJECT_MEMORY_RAM,
-                    QEMU_CAPS_OBJECT_MEMORY_FILE);
+    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
+                        QEMU_CAPS_OBJECT_MEMORY_RAM,
+                        QEMU_CAPS_OBJECT_MEMORY_FILE);
     DO_TEST("hugepages-shared",
             QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_OBJECT_MEMORY_FILE);
diff --git a/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml b/tests/qemuxml2xmloutdata/hugepages-default-1G-nodeset-2M.xml
deleted file mode 120000 (symlink)
index 3d8eb76..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../qemuxml2argvdata/hugepages-default-1G-nodeset-2M.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/hugepages-nodeset.xml b/tests/qemuxml2xmloutdata/hugepages-nodeset.xml
deleted file mode 120000 (symlink)
index b55838b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../qemuxml2argvdata/hugepages-nodeset.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml b/tests/qemuxml2xmloutdata/hugepages-numa-nodeset-nonexist.xml
deleted file mode 120000 (symlink)
index d490edc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../qemuxml2argvdata/hugepages-numa-nodeset-nonexist.xml
\ No newline at end of file
index 050967b4eead6f17009408974cddae7a94be7d3e..bfa66b8debbcb4ba4c1af7c7638032b4860091b9 100644 (file)
@@ -5,7 +5,7 @@
   <currentMemory unit='KiB'>262144</currentMemory>
   <memoryBacking>
     <hugepages>
-      <page size='2048' unit='KiB' nodeset='0'/>
+      <page size='2048' unit='KiB'/>
     </hugepages>
   </memoryBacking>
   <vcpu placement='static'>4</vcpu>
index 7c4a649a6e8cc1fe8a643cbe51f873587a96b3b1..d5f6db5504ba36d080791c0b2d1b61eb5fe3f857 100644 (file)
@@ -331,13 +331,10 @@ mymain(void)
     DO_TEST("hugepages-default", NONE);
     DO_TEST("hugepages-default-2M", NONE);
     DO_TEST("hugepages-default-system-size", NONE);
-    DO_TEST("hugepages-default-1G-nodeset-2M", NONE);
-    DO_TEST("hugepages-nodeset", NONE);
     DO_TEST("hugepages-numa-default-2M", NONE);
     DO_TEST("hugepages-numa-default-dimm", NONE);
     DO_TEST("hugepages-numa-nodeset", NONE);
     DO_TEST("hugepages-numa-nodeset-part", NONE);
-    DO_TEST("hugepages-numa-nodeset-nonexist", NONE);
     DO_TEST("hugepages-shared", NONE);
     DO_TEST("hugepages-memaccess", NONE);
     DO_TEST("hugepages-memaccess2", NONE);