Re: [pci PATCH v5 1/4] pci: Add pci_sriov_configure_simple for PFs that don't manage VF resources
From: Alexander Duyck <hidden>
Date: 2018-03-12 20:17:06
Also in:
kvm, linux-nvme, linux-pci, lkml
On Mon, Mar 12, 2018 at 11:23 AM, Keith Busch [off-list ref] wrote:
On Mon, Mar 12, 2018 at 11:09:34AM -0700, Alexander Duyck wrote:quoted
On Mon, Mar 12, 2018 at 10:40 AM, Keith Busch [off-list ref] wrote:quoted
On Mon, Mar 12, 2018 at 10:21:29AM -0700, Alexander Duyck wrote:quoted
diff --git a/include/linux/pci.h b/include/linux/pci.h index 024a1beda008..9cab9d0d51dc 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h@@ -1953,6 +1953,7 @@ static inline void pci_mmcfg_late_init(void) { } int pci_vfs_assigned(struct pci_dev *dev); int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs); int pci_sriov_get_totalvfs(struct pci_dev *dev); +int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn); resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno); void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe); #elseI recommend stubbing 'pci_sriov_configure_simple' or defining it to NULL in the '#else' section here so you don't need to repeat the "#ifdef CONFIG_PCI_IOV" in each driver wishing to use this function. Otherwise looks fine to me.My concern with defining it as NULL is that somebody may end up calling it in the future directly and that may end up causing issues. One thought I have been debating is moving it to a different file. I am just not sure where the best place to put something like this would be. I could move this function to drivers/pci/pci.c if everyone is okay with it and then I could just strip the contents out by wrapping them in a #ifdef instead.Okay, instead of NULL, a stub implementation in the header file may suffice when CONFIG_PCI_IOV is not defined: static inline int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn) { return -ENOSYS; } See pci_iov_virtfn_bus, pci_iov_virtfn_devfn, pci_iov_add_virtfn, or pci_enable_sriov for other examples.
No, I am aware of those. The problem is they aren't accessed as function pointers. As such converting them to static inline functions is easy. As I am sure you are aware an "inline" function doesn't normally generate a function pointer. Actually my original idea has been complicated further by the fact that I realized my code is accessing functions that are static in the iov.c file. I'll need to think about how to come up with a better solution for this.