[PATCH V9 01/18] PCI/IOV: Export interface for retrieve VF's BDF
Bjorn Helgaas
bhelgaas at google.com
Thu Nov 20 10:35:02 AEDT 2014
On Sun, Nov 02, 2014 at 11:41:17PM +0800, Wei Yang wrote:
> When implementing the SR-IOV on PowerNV platform, some resource reservation is
> needed for VFs which don't exist at the bootup stage. To do the match between
> resources and VFs, the code need to get the VF's BDF in advance.
>
> In this patch, it exports the interface to retrieve VF's BDF:
> * Make the virtfn_bus as an interface
> * Make the virtfn_devfn as an interface
> * Rename them with more specific name
> * Code cleanup in pci_sriov_resource_alignment()
>
> Signed-off-by: Wei Yang <weiyang at linux.vnet.ibm.com>
> ---
> drivers/pci/iov.c | 22 +++++++++++++---------
> include/linux/pci.h | 11 +++++++++++
> 2 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index 4d109c0..5e8091b 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -19,14 +19,18 @@
>
> #define VIRTFN_ID_LEN 16
>
> -static inline u8 virtfn_bus(struct pci_dev *dev, int id)
> +int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
> {
> + if (!dev->is_physfn)
> + return -EINVAL;
> return dev->bus->number + ((dev->devfn + dev->sriov->offset +
> dev->sriov->stride * id) >> 8);
> }
>
> -static inline u8 virtfn_devfn(struct pci_dev *dev, int id)
> +int pci_iov_virtfn_devfn(struct pci_dev *dev, int id)
> {
> + if (!dev->is_physfn)
> + return -EINVAL;
> return (dev->devfn + dev->sriov->offset +
> dev->sriov->stride * id) & 0xff;
> }
I'm concerned about exporting these because they depend on First VF Offset
and VF Stride from the SR-IOV Capability, and those values change when the
ARI Capability Hierarchy setting or the NumVFs setting change (SR-IOV spec
sec 3.3.9, 3.3.10). The caller doesn't necessarily know about this
connection and may not be able to deal with the change.
I outlined one possible problem with this in patch 08/18.
Bjorn
More information about the Linuxppc-dev
mailing list