Messages in this thread | | | From | Bjorn Helgaas <> | Date | Mon, 13 Jan 2014 11:56:43 -0700 | Subject | Re: [PATCH] pci/iov: VFs are never multifunction |
| |
On Thu, Jan 9, 2014 at 8:36 AM, Alex Williamson <alex.williamson@redhat.com> wrote: > Per the SR-IOV spec rev 1.1: > > 3.4.1.9 Header Type (Offset 0Eh) > > "... For VFs, this register must be RO Zero." > > Unfortunately some devices get this wrong, ex. Emulex OneConnect 10Gb > NIC. When they do it makes us handle ACS testing and therefore IOMMU > groups as if they were actual multifunction devices and require ACS > capabilities to make sure there's no peer-to-peer between functions. > VFs are never traditional multifunction devices, so simply clear this > bit before we get any further into setup. > > Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Applied to pci/misc for v3.14, thanks!
Bjorn
> --- > drivers/pci/iov.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c > index 1fe2d6f..e2fbb67 100644 > --- a/drivers/pci/iov.c > +++ b/drivers/pci/iov.c > @@ -84,6 +84,7 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset) > virtfn->dev.parent = dev->dev.parent; > virtfn->physfn = pci_dev_get(dev); > virtfn->is_virtfn = 1; > + virtfn->multifunction = 0; > > for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { > res = dev->resource + PCI_IOV_RESOURCES + i; >
| |