[libvirt] [PATCH 2/6] qemu: Make switch statements more strict
Andrea Bolognani
abologna at redhat.com
Wed Feb 22 09:29:33 UTC 2017
On Tue, 2017-02-21 at 15:26 -0500, Laine Stump wrote:
> > @@ -2664,19 +2664,13 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
> > break;
> >
> > case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
> > - if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT ||
> > - def->model == VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT) {
> > - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > - _("wrong function called for pci-root/pcie-root"));
> > - return NULL;
> > - }
>
> It makes sense that the above code would never happen (certainly one of
> the two current callers to qemuBuildControllerDevStr() guarantees that
> it won't happen by skipping the call in that case), but how much do you
> want to trues the caller.
Not at all! That's why I didn't drop the check but merely
moved it ;)
> > @@ -2917,6 +2911,12 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
> > virBufferAsprintf(&buf, ",numa_node=%d",
> > def->opts.pciopts.numaNode);
> > break;
> > + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
> > + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
> > + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
> > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > + _("wrong function called"));
>
> Actually it will probably never get to here, because the code above
> where you removed this check also checks to be sure that def->idx != 0
> (and for root controllers it always does, unless the user has manually
> altered it). So instead of getting a "wrong function called" log, you
> would probably get the incorrect "index for pci controllers of model
> "pci[e]-root" must be > 0".
>
> You can solve this by putting the "if (def->idx == 0)" check down just
> below the "switch (def->model)".
Makes sense.
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list