@@ -3793,6 +3793,8 @@
nomio [S390] Do not use MIO instructions.
norid [S390] ignore the RID field and force use of
one PCI domain per PCI function
+ driver_load_messages
+ Output driver load status messages.
pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
Management.
@@ -23,6 +23,8 @@
#include "pci.h"
#include "pcie/portdrv.h"
+bool driver_load_messages;
+
struct pci_dynid {
struct list_head node;
struct pci_device_id id;
@@ -305,10 +307,20 @@ static long local_pci_probe(void *_ddi)
*/
pm_runtime_get_sync(dev);
pci_dev->driver = pci_drv;
+ if (driver_load_messages)
+ pci_info(pci_dev, "loading on device [%0x:%0x]\n",
+ pci_dev->vendor, pci_dev->device);
rc = pci_drv->probe(pci_dev, ddi->id);
- if (!rc)
+ if (!rc) {
+ if (driver_load_messages)
+ pci_info(pci_dev, "loaded on device [%0x:%0x]\n",
+ pci_dev->vendor, pci_dev->device);
return rc;
+ }
if (rc < 0) {
+ if (driver_load_messages)
+ pci_info(pci_dev, "failed (%d) on device [%0x:%0x]\n",
+ rc, pci_dev->vendor, pci_dev->device);
pci_dev->driver = NULL;
pm_runtime_put_sync(dev);
return rc;
@@ -6547,6 +6547,8 @@ static int __init pci_setup(char *str)
pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
} else if (!strncmp(str, "disable_acs_redir=", 18)) {
disable_acs_redir_param = str + 18;
+ } else if (!strncmp(str, "driver_load_messages", 24)) {
+ driver_load_messages = true;
} else {
pr_err("PCI: Unknown option `%s'\n", str);
}
@@ -690,4 +690,5 @@ static inline int pci_acpi_program_hp_params(struct pci_dev *dev)
extern const struct attribute_group aspm_ctrl_attr_group;
#endif
+extern bool driver_load_messages;
#endif /* DRIVERS_PCI_H */
There are two situations where driver load messages are helpful. 1) Some drivers silently load on devices and debugging driver or system failures in these cases is difficult. While some drivers (networking for example) may not completely initialize when the PCI driver probe() function has returned, it is still useful to have some idea of driver completion. 2) Storage and Network device vendors have relatively short lives for some of their hardware. Some devices may continue to function but are problematic due to out-of-date firmware or other issues. Maintaining a database of the hardware is out-of-the-question in the kernel as it would require constant updating. Outputting a message in the log would allow different OSes to determine if the problem hardware was truly supported or not. Add optional driver load messages from the PCI core that indicates which driver was loaded, on which slot, and on which device. Signed-off-by: Prarit Bhargava <prarit@redhat.com> Cc: Myron Stowe <mstowe@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: linux-doc@vger.kernel.org --- Documentation/admin-guide/kernel-parameters.txt | 2 ++ drivers/pci/pci-driver.c | 14 +++++++++++++- drivers/pci/pci.c | 2 ++ drivers/pci/pci.h | 1 + 4 files changed, 18 insertions(+), 1 deletion(-)