[libvirt] [PATCH v2 1/5] qemu: change the logic of setting default USB controller

Pavel Hrdina phrdina at redhat.com
Thu Apr 27 18:58:15 UTC 2017


On Thu, Apr 27, 2017 at 08:14:17PM +0200, Andrea Bolognani wrote:
> On Thu, 2017-04-27 at 18:09 +0200, Pavel Hrdina wrote:
> > @@ -3200,11 +3200,17 @@ qemuDomainControllerDefPostParse(virDomainControllerDefPtr cont,
> >               * when the relevant device is not available.
> >               *
> >               * See qemuBuildControllerDevCommandLine() */
> > -            if (ARCH_IS_S390(def->os.arch) &&
> > -                cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
> > -                /* set the default USB model to none for s390 unless an
> > -                 * address is found */
> > -                cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE;
> > +
> > +            /* Default USB controller is piix3-uhci if available. */
> > +            if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI))
> > +                cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI;
> > +
> > +            if (ARCH_IS_S390(def->os.arch)) {
> > +                if (cont->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
> > +                    /* set the default USB model to none for s390 unless an
> > +                     * address is found */
> > +                    cont->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE;
> > +                }
> 
> You should add an else branch where you unset cont->model
> explicitly, like you do for ppc64 below, otherwise s390
> guests will start being assigned piix3-uhci controllers in
> some situations.

That would change the output of this code, this patch preserver
the ouput, just changes the logic to be easier to follow.

> We don't have checks for that in our test suite, and it's
> probably not going to be much of an issue in the real world
> at least as far as downstream distros are concerned, but it
> should be avoided nonetheless.
> 
> 
> Overall I'm not convinced this is any more readable than
> what we had before or that it makes subsequent changes
> any easier, so I'd prefer if you'd just drop this patch.

The issue with original code is that the if else-if else condition
is not consistent.

The first if checks S390 and address type together, however the second
else-if checks only for PPC64, the capability checks are inside that block.

So if arch is S390 but the address type is different from
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE it continues to the last else block and
sets the model to piix3-uhci it it's available.

The second else-if for PPC64 doesn't fallback to piix3-uhci it the
architecture is PPC64 but none of the capabilities from that block
are set.

This patch changes the logic and also makes the if else-if more clearer
so the first check is only for architecture and after that in each block
we test for capabilities.

Pavel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170427/44a8cd7f/attachment-0001.sig>


More information about the libvir-list mailing list