[libvirt] [PATCH v3 25/26] qemu: Isolate hostdevs on pSeries guests

Andrea Bolognani abologna at redhat.com
Thu Jun 29 15:37:30 UTC 2017

On Wed, 2017-06-28 at 18:22 -0400, Laine Stump wrote:
> > +static int
> > +qemuDomainFillDeviceIsolationGroupIter(virDomainDefPtr def ATTRIBUTE_UNUSED,
> > +                                       virDomainDeviceDefPtr dev,
> > +                                       virDomainDeviceInfoPtr info,
> > +                                       void *opaque ATTRIBUTE_UNUSED)
> > +{
> > +    virDomainHostdevDefPtr hostdev;
> > +    virPCIDeviceAddressPtr hostAddr;
> > +
> > +    /* Only hostdevs... */
> > +    if (dev->type != VIR_DOMAIN_DEVICE_HOSTDEV)
> > +        return 0;
> I can see one problem here - a device that is a hostdev network
> interface won't be properly recognized.
> We can solve the problem for plain <interface type='hostdev'> by just
> checking for that in addition to <hostdev> here.

Right, I hadn't considered that case. I'll make sure it is
handled correctly.

> The one that we can't
> deal with is <interface type='network'> where the network is a pool of VFs.
> We had a similar problem when trying to decide whether a device needed
> to be placed on a PCI or PCIe bus, but were able to punt on that one
> because all SRIOV devices are PCIe. In this case it's a bit more
> problematic though.
> Maybe we can do this: if a device is <interface type='network'> then we
> look to the network to see if it's a "hostdev network". If so, we assign
> it "some isolation group that won't be otherwise used" (basically
> *anything* that assures the device is placed on a bus by itself). It's
> necessary to do this because we can't know until the domain is started
> exactly which SRIOV VF from the pool will be used, so we can't know the
> actual IOMMU group in advance. And it's reasonable because each SRIOV VF
> is by itself in its own IOMMU group, so we won't have the exact same
> number as the actual iommu group, but we'll be guaranteeing that it is
> different from any other device (which is really all that's important in
> this context).

Hm, that's quite a pickle.

Choosing a synthetic isolation group that is guaranteed not
to clash with any host device or other VFs sounds like it
might require some annoying bookkeeping.

I'm not sure isolating SR-IOV VFs is really needed, though,
because by virtue of being subject to their own layer of
virtualization / abstraction they might being unable to take
advantage of EEH and similar isolation-dependent features.

David, what's your take on this?

> > +static int
> > +qemuDomainSetupIsolationGroups(virDomainDefPtr def)
> > +{
> > +    virDomainControllerDefPtr defaultPHB;
> > +    int idx;
> > +    int ret = -1;
> > +
> > +    /* Only pSeries guests care about isolation groups at the moment */
> > +    if (!qemuDomainIsPSeries(def))
> > +        return 0;
> I suppose this would be pointless on, e.g. Q35, since each device is on
> its own (isolated?) root-port anyway, right?

I don't think PCIe Root Ports provide any isolation; not of
the kind we're talking about here, at least. So the concepts
implemented here don't apply AFAICT.

Andrea Bolognani / Red Hat / Virtualization

More information about the libvir-list mailing list