On Mon, 2018-02-19 at 11:52 +0000, Daniel P. Berrangé wrote:
> +qemuDomainDeviceDefValidateControllerPCI(const
virDomainControllerDef *controller,
> + const virDomainDef *def)
> {
> + const virDomainPCIControllerOpts *pciopts = &controller->opts.pciopts;
> + const char *model =
virDomainControllerModelPCITypeToString(controller->model);
> + const char *modelName =
virDomainControllerPCIModelNameTypeToString(pciopts->modelName);
> +
> + if (!model) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Unknown virDomainControllerModelPCI value:
%d"),
Including type names in error messages is not too nice as a user facing
error - better to use plain english "Unexpected PCI controller model")
But these are marked as internal errors, eg. They Should Never
Happen™, and if they ever do it's useful for developers to have
more detailed information. Users can't really do anything but
report the issue, after all.
> + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
> + /* pci-root controllers for pSeries guests can have any index, but
> + * all other pci-root and pcie-root controller must have index 0 */
> + if (controller->idx != 0 &&
> + !(qemuDomainIsPSeries(def) &&
> + controller->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("Index for '%s' controller must be
0"),
> + model);
> + return -1;
> + }
> + break;
> +
> + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
Any time there is a _LAST element we should have an error report too
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unexpected controller model %d"), controller->model);
return -1;
It should also have an 'default:' next to the LAST. Both are things that
should never occur unless we've screwed up code elsewherein libvirt, but
we want to be robust about catching such screw ups. This is particularly
important for controller models, as we have many different controller
type specific enums all stored in the same struct field
Okay, I'll address that, but the point above about what error
message to show in such scenarios still applies IMHO.
--
Andrea Bolognani / Red Hat / Virtualization