]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domain_conf: move virDomainPCIControllerOpts checks to domain_validate.c
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Fri, 4 Dec 2020 21:11:51 +0000 (18:11 -0300)
committerDaniel Henrique Barboza <danielhb413@gmail.com>
Wed, 9 Dec 2020 12:51:52 +0000 (09:51 -0300)
virDomainControllerDefParseXML() does a lot of checks with
virDomainPCIControllerOpts parameters that can be moved to
virDomainControllerDefValidate, sharing the logic with other use
cases that does not rely on XML parsing.

'pseries-default-phb-numa-node' parse error was changed to reflect
the error that is being thrown by qemuValidateDomainDeviceDefController()
via deviceValidateCallback, that is executed before
virDomainControllerDefValidate().

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/domain_conf.c
src/conf/domain_validate.c
tests/qemuxml2argvdata/pseries-default-phb-numa-node.err
tests/qemuxml2argvtest.c

index d340b304a21caf934702da0b982083e4449f7e04..fd15d883989984d7fe4c8de564d303fb46dcc82d 100644 (file)
@@ -10869,14 +10869,6 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
                                chassisNr);
                 return NULL;
             }
-            if (def->opts.pciopts.chassisNr < 1 ||
-                def->opts.pciopts.chassisNr > 255) {
-                virReportError(VIR_ERR_XML_ERROR,
-                               _("PCI controller chassisNr '%s' out of range "
-                                 "- must be 1-255"),
-                               chassisNr);
-                return NULL;
-            }
         }
         if (chassis) {
             if (virStrToLong_i(chassis, NULL, 0,
@@ -10886,14 +10878,6 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
                                chassis);
                 return NULL;
             }
-            if (def->opts.pciopts.chassis < 0 ||
-                def->opts.pciopts.chassis > 255) {
-                virReportError(VIR_ERR_XML_ERROR,
-                               _("PCI controller chassis '%s' out of range "
-                                 "- must be 0-255"),
-                               chassis);
-                return NULL;
-            }
         }
         if (port) {
             if (virStrToLong_i(port, NULL, 0,
@@ -10903,14 +10887,6 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
                                port);
                 return NULL;
             }
-            if (def->opts.pciopts.port < 0 ||
-                def->opts.pciopts.port > 255) {
-                virReportError(VIR_ERR_XML_ERROR,
-                               _("PCI controller port '%s' out of range "
-                                 "- must be 0-255"),
-                               port);
-                return NULL;
-            }
         }
         if (busNr) {
             if (virStrToLong_i(busNr, NULL, 0,
@@ -10920,14 +10896,6 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
                                busNr);
                 return NULL;
             }
-            if (def->opts.pciopts.busNr < 1 ||
-                def->opts.pciopts.busNr > 254) {
-                virReportError(VIR_ERR_XML_ERROR,
-                               _("PCI controller busNr '%s' out of range "
-                                 "- must be 1-254"),
-                               busNr);
-                return NULL;
-            }
         }
         if (targetIndex) {
             if (virStrToLong_i(targetIndex, NULL, 0,
@@ -10939,15 +10907,9 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
                 return NULL;
             }
         }
-        if (numaNode >= 0) {
-            if (def->idx == 0) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("The PCI controller with index=0 can't "
-                                 "be associated with a NUMA node"));
-                return NULL;
-            }
+        if (numaNode >= 0)
             def->opts.pciopts.numaNode = numaNode;
-        }
+
         if (hotplug) {
             int val = virTristateSwitchTypeFromString(hotplug);
 
index 416c24f97bdd2434995f84f39006605de2cff8be..f47e80ca38b53c5198d4269a7e3205b18cfb5d63 100644 (file)
@@ -551,6 +551,54 @@ virDomainControllerDefValidate(const virDomainControllerDef *controller)
                 return -1;
             }
         }
+
+        if (opts->chassisNr != -1) {
+            if (opts->chassisNr < 1 || opts->chassisNr > 255) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("PCI controller chassisNr '%d' out of range "
+                                 "- must be 1-255"),
+                               opts->chassisNr);
+                return -1;
+            }
+        }
+
+        if (opts->chassis != -1) {
+            if (opts->chassis < 0 || opts->chassis > 255) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("PCI controller chassis '%d' out of range "
+                                 "- must be 0-255"),
+                               opts->chassis);
+                return -1;
+            }
+        }
+
+        if (opts->port != -1) {
+            if (opts->port < 0 || opts->port > 255) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("PCI controller port '%d' out of range "
+                                 "- must be 0-255"),
+                               opts->port);
+                return -1;
+            }
+        }
+
+        if (opts->busNr != -1) {
+            if (opts->busNr < 1 || opts->busNr > 254) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("PCI controller busNr '%d' out of range "
+                                 "- must be 1-254"),
+                               opts->busNr);
+                return -1;
+            }
+        }
+
+        if (opts->numaNode >= 0 && controller->idx == 0) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("The PCI controller with index=0 can't "
+                             "be associated with a NUMA node"));
+            return -1;
+        }
     }
+
     return 0;
 }
index 5d11109317c3ecbb4504345418c9058fdd2efb09..e46b7103308b4f2bce65adecc5ff0e146d3ad645 100644 (file)
@@ -1 +1 @@
-XML error: The PCI controller with index=0 can't be associated with a NUMA node
+unsupported configuration: Option 'numaNode' is not valid for PCI controller with index '0', model 'pci-root' and modelName 'spapr-pci-host-bridge'
index 0e7d8d5ba3bdc95e69db7f0cb123ad691713f163..9b853c6d5996e6b3d9604fcb8bceb2733385a60c 100644 (file)
@@ -2115,7 +2115,11 @@ mymain(void)
             QEMU_CAPS_OBJECT_MEMORY_RAM,
             QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
             QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
-    DO_TEST_PARSE_ERROR("pseries-default-phb-numa-node", NONE);
+    DO_TEST_PARSE_ERROR("pseries-default-phb-numa-node",
+                        QEMU_CAPS_NUMA,
+                        QEMU_CAPS_OBJECT_MEMORY_RAM,
+                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+                        QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
     DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-1", NONE);
     DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-2", NONE);
     DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-3", NONE);