[libvirt] [PATCH] qemu: Fix mdev checking for VFIO support

Erik Skultety eskultet at redhat.com
Wed Apr 12 11:22:33 UTC 2017


On Wed, Apr 12, 2017 at 11:35:14AM +0100, Daniel P. Berrange wrote:
> On Wed, Apr 12, 2017 at 12:26:35PM +0200, Erik Skultety wrote:
> > Commit a4a39d90 added a check that checks for VFIO support with mediated
> > devices. The problem is that the hostdev preparing functions behave like
> > a fallthrough if device of that specific type doesn't exist. However,
> > the check for VFIO support was independent of the existence of a mdev
> > device which caused the guest to fail to start with any device to be
> > directly assigned if VFIO was disabled/unavailable in the kernel.
> > The proposed change first ensures that it makes sense to check for VFIO
> > support in the first place, and only then performs the VFIO support check
> > itself.
> >
> > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1441291
> >
> > Signed-off-by: Erik Skultety <eskultet at redhat.com>
> > ---
> >  src/qemu/qemu_hostdev.c | 16 ++++++++++++----
> >  1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
> > index 685bf5b59..9b5504832 100644
> > --- a/src/qemu/qemu_hostdev.c
> > +++ b/src/qemu/qemu_hostdev.c
> > @@ -330,11 +330,19 @@ qemuHostdevPrepareMediatedDevices(virQEMUDriverPtr driver,
> >                                    int nhostdevs)
> >  {
> >      virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
> > +    bool supportsVFIO = qemuHostdevHostSupportsPassthroughVFIO();
> > +    size_t i;
> >
> > -    if (!qemuHostdevHostSupportsPassthroughVFIO()) {
> > -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > -                       _("host doesn't support VFIO PCI interface"));
> > -        return -1;
> > +    for (i = 0; i < nhostdevs; i++) {
> > +        if (hostdevs[i]->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
> > +            hostdevs[i]->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV) {
> > +            if (!supportsVFIO) {
> > +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > +                               _("host doesn't support VFIO PCI interface"));
>
> BTW, I'd suggest changing that message to
>
>   "Mediated host device assignment requires VFIO support"
>
> to make it clear what feature usage is triggering the error
>
> > +                return -1;
> > +            }
> > +            break;
> > +        }
> >      }
> >
> >      return virHostdevPrepareMediatedDevices(hostdev_mgr, QEMU_DRIVER_NAME,
>
> ACK,

Adjusted and pushed, thanks.
Erik




More information about the libvir-list mailing list