[libvirt] [PATCH 1/4 v2] pci: Move some pci sriov helper code out of node device driver to util/pci

Stefan Berger stefanb at linux.vnet.ibm.com
Mon Aug 15 10:58:37 UTC 2011


On 08/12/2011 07:14 PM, Roopa Prabhu wrote:
>
> -        get_physical_function(sysfs_path, d);
> -        get_virtual_functions(sysfs_path, d);
> +        if (!pciGetPhysicalFunction(sysfs_path,&d->pci_dev.physical_function))
> +            d->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCI_PHYSICAL_FUNCTION;
> +
> +        if (!pciGetVirtualFunctions(sysfs_path,&d->pci_dev.virtual_functions,
> +&d->pci_dev.num_virtual_functions) ||
> +            d->pci_dev.num_virtual_functions>  0)
> +            d->pci_dev.flags |= VIR_NODE_DEV_CAP_FLAG_PCI_VIRTUAL_FUNCTION;
>
>           VIR_FREE(sysfs_path);
>

[...]
> diff --git a/src/util/pci.h b/src/util/pci.h
> index a351baf..367881e 100644
> --- a/src/util/pci.h
> +++ b/src/util/pci.h
> @@ -27,6 +27,13 @@
>   typedef struct _pciDevice pciDevice;
>   typedef struct _pciDeviceList pciDeviceList;
>
> +struct pci_config_address {
> +    unsigned int domain;
> +    unsigned int bus;
> +    unsigned int slot;
> +    unsigned int function;
> +};
> +
>   pciDevice *pciGetDevice      (unsigned       domain,
>                                 unsigned       bus,
>                                 unsigned       slot,
> @@ -74,4 +81,22 @@ int pciDeviceIsAssignable(pciDevice *dev,
>                             int strict_acs_check);
>   int pciWaitForDeviceCleanup(pciDevice *dev, const char *matcher);
>
> +#ifdef __linux__
> +
> +#  define pciGetPhysicalFunction(s,a) pciGetPhysicalFunctionLinux(s,a)
> +int pciGetPhysicalFunctionLinux(const char *sysfs_path,
> +                                struct pci_config_address **phys_fn);
> +
> +#  define pciGetVirtualFunctions(s,a,n) pciGetVirtualFunctionsLinux(s,a,n)
> +int pciGetVirtualFunctionsLinux(const char *sysfs_path,
> +                                struct pci_config_address ***virtual_functions,
> +                                unsigned int *num_virtual_functions);
> +
> +#else /* __linux__ */
> +
> +#  define pciGetPhysicalFunction(s,a)
> +#  define pciGetVirtualFunctions(s,a,n)
> +
I don't think these #defines will produce compilable code if they are 
used above. You'll probably have to implement functions for them.

   Stefan
> +#endif
> +
>   #endif /* __VIR_PCI_H__ */
>




More information about the libvir-list mailing list