[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Dom0 PCI: fix SR-IOV function dependency link problem



On Wed, Jun 03, 2009 at 01:41:34PM +0800, Yu Zhao wrote:
> PCIe Root Complex Integrated Endpoint does not implement ARI, so this
> kind of endpoint uses 3-bit function number. The function dependency
> link of the integrated endpoint should be calculated using the device
> number field in conjunction with the value from function dependency
> link register.
> 
> Normal SR-IOV endpoint always implements ARI and the function dependency
> link register contains 8-bit function number (i.e. `devfn' from software
> perspective).
> 
> Signed-off-by: Yu Zhao <yu.zhao@xxxxxxxxx>

> # HG changeset patch
> # User Yu Zhao <yu.zhao@xxxxxxxxx>
> # Date 1244007161 -28800
> # Node ID 3a959a6975152b741389d2eed1823d55be4f2889
> # Parent  ec3442c2ed48eb11fcacd3fe31af48932f0a6645
> PCI: fix SR-IOV function dependency link problem
> 
> PCIe Root Complex Integrated Endpoint does not implement ARI, so this
> kind of endpoint uses 3-bit function number. The function dependency
> link of the integrated endpoint should be calculated using the device
> number field in conjunction with the value from function dependency
> link register.
> 
> Normal SR-IOV endpoint always implements ARI and the function dependency
> link register contains 8-bit function number (i.e. `devfn' from software
> perspective).
> 
> Signed-off-by: Yu Zhao <yu.zhao@xxxxxxxxx>
> 
> diff -r ec3442c2ed48 -r 3a959a697515 drivers/pci/iov.c
> --- a/drivers/pci/iov.c       Wed Jun 03 13:30:08 2009 +0800
> +++ b/drivers/pci/iov.c       Wed Jun 03 13:32:41 2009 +0800
> @@ -366,6 +366,8 @@
>       iov->self = dev;
>       pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap);
>       pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link);
> +     if (!dev->bus->number)  /* Root Complex Integrated Endpoint */
> +             iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link);
>  
>       if (pdev)
>               iov->dev = pci_dev_get(pdev);

Possibly the above check may work.
But pci capability list should be examined.
something like
  rpcap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
  if (!rpcap)
          pci_read_config_word(pdev, rpcap + PCI_CAP_FLAGS, &cap);
          if (cap == PCI_EXP_TYPE_RC_END)
...

thanks,
-- 
yamahata

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.