xen 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. Acked-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
parent
e9d1aa05da
commit
8a5248fe10
1 changed files with 10 additions and 4 deletions
|
@ -89,9 +89,15 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
|
||||||
|
|
||||||
mutex_lock(&vpci_dev->lock);
|
mutex_lock(&vpci_dev->lock);
|
||||||
|
|
||||||
/* Keep multi-function devices together on the virtual PCI bus */
|
/*
|
||||||
for (slot = 0; slot < PCI_SLOT_MAX; slot++) {
|
* Keep multi-function devices together on the virtual PCI bus, except
|
||||||
if (!list_empty(&vpci_dev->dev_list[slot])) {
|
* 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]),
|
t = list_entry(list_first(&vpci_dev->dev_list[slot]),
|
||||||
struct pci_dev_entry, list);
|
struct pci_dev_entry, list);
|
||||||
|
|
||||||
|
@ -116,7 +122,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
|
||||||
pci_name(dev), slot);
|
pci_name(dev), slot);
|
||||||
list_add_tail(&dev_entry->list,
|
list_add_tail(&dev_entry->list,
|
||||||
&vpci_dev->dev_list[slot]);
|
&vpci_dev->dev_list[slot]);
|
||||||
func = PCI_FUNC(dev->devfn);
|
func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn);
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue