Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a5248fe authored by Laszlo Ersek's avatar Laszlo Ersek Committed by Konrad Rzeszutek Wilk
Browse files

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: default avatarJan Beulich <jbeulich@suse.com>
Signed-off-by: default avatarLaszlo Ersek <lersek@redhat.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent e9d1aa05
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -89,9 +89,15 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,

	mutex_lock(&vpci_dev->lock);

	/* Keep multi-function devices together on the virtual PCI bus */
	/*
	 * 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])) {
			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 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
			       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;
		}
	}