|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen PV passthru: assign SR-IOV virtual functions to separate virtual slots
>>> On 16.10.12 at 19:36, Laszlo Ersek <lersek@xxxxxxxxxx> wrote:
> 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>
> ---
> drivers/xen/xen-pciback/vpci.c | 35 ++++++++++++++++++++---------------
> 1 files changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/xen/xen-pciback/vpci.c b/drivers/xen/xen-pciback/vpci.c
> index 46d140b..489404a 100644
> --- a/drivers/xen/xen-pciback/vpci.c
> +++ b/drivers/xen/xen-pciback/vpci.c
> @@ -89,21 +89,26 @@ 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 */
> - for (slot = 0; slot < PCI_SLOT_MAX; slot++) {
> - if (!list_empty(&vpci_dev->dev_list[slot])) {
> - t = list_entry(list_first(&vpci_dev->dev_list[slot]),
> - struct pci_dev_entry, list);
> -
> - if (match_slot(dev, t->dev)) {
> - pr_info(DRV_NAME ": vpci: %s: "
> - "assign to virtual slot %d func %d\n",
> - pci_name(dev), slot,
> - PCI_FUNC(dev->devfn));
> - list_add_tail(&dev_entry->list,
> - &vpci_dev->dev_list[slot]);
> - func = PCI_FUNC(dev->devfn);
> - goto unlock;
> + /*
> + * 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])) {
To keep indentation reasonable (and shrink the patch size at once),
could you use
if (list_empty(&vpci_dev->dev_list[slot]))
continue;
here instead? Or alternatively tweak the for() above to embed the
if()'s condition there?
Jan
> + t =
> list_entry(list_first(&vpci_dev->dev_list[slot]),
> + struct pci_dev_entry, list);
> +
> + if (match_slot(dev, t->dev)) {
> + pr_info(DRV_NAME ": vpci: %s: "
> + "assign to virtual slot %d func
> %d\n",
> + pci_name(dev), slot,
> + PCI_FUNC(dev->devfn));
> + list_add_tail(&dev_entry->list,
> +
> &vpci_dev->dev_list[slot]);
> + func = PCI_FUNC(dev->devfn);
> + goto unlock;
> + }
> }
> }
> }
> --
> 1.7.1
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |