[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] PV passthru: assign SR-IOV virtual functions to separate virtual slots
# HG changeset patch # User Laszlo Ersek <lersek@xxxxxxxxxx> # Date 1350661572 -7200 # Node ID 0dbf07f0bdbfea42ba2f43a7e4786394ece74515 # Parent bd485861bc4206d51400333919787d7f6a79aa3c PV passthru: assign SR-IOV virtual functions to separate virtual slots VFs are reported as single-function devices in PCI_HEADER_TYPE, which causes pci_scan_slot() in the PV domU to skip all VFs beyond #0 in the pciback-provided slot. Avoid this by assigning each VF to a separate virtual slot. Signed-off-by: Laszlo Ersek <lersek@xxxxxxxxxx> Committed-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r bd485861bc42 -r 0dbf07f0bdbf drivers/xen/pciback/vpci.c --- a/drivers/xen/pciback/vpci.c Fri Oct 19 11:36:42 2012 +0200 +++ b/drivers/xen/pciback/vpci.c Fri Oct 19 17:46:12 2012 +0200 @@ -89,9 +89,15 @@ int pciback_add_pci_dev(struct pciback_d spin_lock_irqsave(&vpci_dev->lock, flags); - /* Keep multi-function devices together on the virtual PCI bus */ - for (slot = 0; slot < PCI_SLOT_MAX; slot++) { - if (!list_empty(&vpci_dev->dev_list[slot])) { + /* + * Keep multi-function devices together on the virtual PCI bus, except + * virtual functions. + */ + if (!dev->is_virtfn) { + for (slot = 0; slot < PCI_SLOT_MAX; slot++) { + if (list_empty(&vpci_dev->dev_list[slot])) + continue; + t = list_entry(list_first(&vpci_dev->dev_list[slot]), struct pci_dev_entry, list); @@ -116,7 +122,7 @@ int pciback_add_pci_dev(struct pciback_d pci_name(dev), slot); list_add_tail(&dev_entry->list, &vpci_dev->dev_list[slot]); - func = PCI_FUNC(dev->devfn); + func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn); goto unlock; } } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |