[libvirt] [PATCH v2 08/15] qemu: Validate PCI controllers (index)
Andrea Bolognani
abologna at redhat.com
Mon Feb 19 12:05:59 UTC 2018
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
More information about the libvir-list
mailing list