domain_conf: move virDomainPCIControllerOpts checks to domain_validate.c

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>
This commit is contained in:
Daniel Henrique Barboza 2020-12-04 18:11:51 -03:00
parent 84da28a86d
commit 4fa54581d0
4 changed files with 56 additions and 42 deletions

View 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);

View 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;
}

View 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'

View 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);