On Thu, Feb 08, 2018 at 11:20:35PM +1100, Michael Ellerman wrote: > There's no reason pci_uevent_ers() needs to be inline in pci.h, so > move it out to a C file. > > Given it's used by AER the obvious location would be somewhere in > drivers/pci/pcie/aer, but because it's also used by powerpc EEH code > unfortunately that doesn't work in the case where EEH is enabled but > PCIEPORTBUS is not. > > So for now put it in pci-driver.c, next to pci_uevent(), with an > appropriate #ifdef so it's not built if AER and EEH are both disabled. > > While we're moving it also fix up the kernel doc comment for @pdev to > be accurate. > > Reported-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Applied to pci/aer for v4.17, thanks! > --- > drivers/pci/pci-driver.c | 36 ++++++++++++++++++++++++++++++++++++ > include/linux/pci.h | 38 +++----------------------------------- > 2 files changed, 39 insertions(+), 35 deletions(-) > > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c > index 3bed6beda051..f21e8b1bef80 100644 > --- a/drivers/pci/pci-driver.c > +++ b/drivers/pci/pci-driver.c > @@ -1517,6 +1517,42 @@ static int pci_uevent(struct device *dev, struct kobj_uevent_env *env) > return 0; > } > > +#if defined(CONFIG_PCIEAER) || defined(CONFIG_EEH) > +/** > + * pci_uevent_ers - emit a uevent during recovery path of pci device > + * @pdev: pci device undergoing error recovery > + * @err_type: type of error event > + */ > +void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type) > +{ > + int idx = 0; > + char *envp[3]; > + > + switch (err_type) { > + case PCI_ERS_RESULT_NONE: > + case PCI_ERS_RESULT_CAN_RECOVER: > + envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY"; > + envp[idx++] = "DEVICE_ONLINE=0"; > + break; > + case PCI_ERS_RESULT_RECOVERED: > + envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY"; > + envp[idx++] = "DEVICE_ONLINE=1"; > + break; > + case PCI_ERS_RESULT_DISCONNECT: > + envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY"; > + envp[idx++] = "DEVICE_ONLINE=0"; > + break; > + default: > + break; > + } > + > + if (idx > 0) { > + envp[idx++] = NULL; > + kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp); > + } > +} > +#endif > + > static int pci_bus_num_vf(struct device *dev) > { > return pci_num_vf(to_pci_dev(dev)); > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 024a1beda008..19c1dbcff0c6 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -2280,41 +2280,9 @@ static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev) > return false; > } > > -/** > - * pci_uevent_ers - emit a uevent during recovery path of pci device > - * @pdev: pci device to check > - * @err_type: type of error event > - * > - */ > -static inline void pci_uevent_ers(struct pci_dev *pdev, > - enum pci_ers_result err_type) > -{ > - int idx = 0; > - char *envp[3]; > - > - switch (err_type) { > - case PCI_ERS_RESULT_NONE: > - case PCI_ERS_RESULT_CAN_RECOVER: > - envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY"; > - envp[idx++] = "DEVICE_ONLINE=0"; > - break; > - case PCI_ERS_RESULT_RECOVERED: > - envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY"; > - envp[idx++] = "DEVICE_ONLINE=1"; > - break; > - case PCI_ERS_RESULT_DISCONNECT: > - envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY"; > - envp[idx++] = "DEVICE_ONLINE=0"; > - break; > - default: > - break; > - } > - > - if (idx > 0) { > - envp[idx++] = NULL; > - kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp); > - } > -} > +#if defined(CONFIG_PCIEAER) || defined(CONFIG_EEH) > +void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type); > +#endif > > /* Provide the legacy pci_dma_* API */ > #include <linux/pci-dma-compat.h> > -- > 2.14.1 >