On Mon, Mar 12, 2018 at 11:23 AM, Keith Busch <keith.busch@xxxxxxxxx> wrote: > On Mon, Mar 12, 2018 at 11:09:34AM -0700, Alexander Duyck wrote: >> On Mon, Mar 12, 2018 at 10:40 AM, Keith Busch <keith.busch@xxxxxxxxx> wrote: >> > On Mon, Mar 12, 2018 at 10:21:29AM -0700, Alexander Duyck wrote: >> >> 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); >> >> #else >> > >> > I 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.