diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2020-01-29 16:59:57 -0600 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2020-01-29 16:59:57 -0600 |
commit | ba51b7188db4a879d600d95471adac24a7b90a66 (patch) | |
tree | 44e82d11278e6fb72ffa8ff018984e39bf7d0519 /drivers/pci | |
parent | e42617b825f8073569da76dc4510bfa019b1c35a (diff) | |
parent | d95f20c4f07020ebc605f3b46af4b6db9eb5fc99 (diff) | |
download | linux-ba51b7188db4a879d600d95471adac24a7b90a66.tar.bz2 |
Merge branch 'pci/aer'
- Log a message to identify the device that caused AER/DPC recovery to
fail (Yicong Yang)
- Initialize aer_fifo before use (Dongdong Liu)
* pci/aer:
PCI/AER: Initialize aer_fifo
PCI/AER: Factor message prefixes with dev_fmt()
PCI/AER: Log which device prevents error recovery
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/pcie/aer.c | 1 | ||||
-rw-r--r-- | drivers/pci/pcie/err.c | 12 |
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 1ca86f2e0166..4a818b07a1af 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -1445,6 +1445,7 @@ static int aer_probe(struct pcie_device *dev) return -ENOMEM; rpc->rpd = port; + INIT_KFIFO(rpc->aer_fifo); set_service_data(dev, rpc); status = devm_request_threaded_irq(device, dev->irq, aer_irq, aer_isr, diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c index b0e6048a9208..01dfc8bb7ca0 100644 --- a/drivers/pci/pcie/err.c +++ b/drivers/pci/pcie/err.c @@ -10,6 +10,8 @@ * Zhang Yanmin (yanmin.zhang@intel.com) */ +#define dev_fmt(fmt) "AER: " fmt + #include <linux/pci.h> #include <linux/module.h> #include <linux/kernel.h> @@ -61,10 +63,12 @@ static int report_error_detected(struct pci_dev *dev, * error callbacks of "any" device in the subtree, and will * exit in the disconnected error state. */ - if (dev->hdr_type != PCI_HEADER_TYPE_BRIDGE) + if (dev->hdr_type != PCI_HEADER_TYPE_BRIDGE) { vote = PCI_ERS_RESULT_NO_AER_DRIVER; - else + pci_info(dev, "can't recover (no error_detected callback)\n"); + } else { vote = PCI_ERS_RESULT_NONE; + } } else { err_handler = dev->driver->err_handler; vote = err_handler->error_detected(dev, state); @@ -233,12 +237,12 @@ void pcie_do_recovery(struct pci_dev *dev, enum pci_channel_state state, pci_aer_clear_device_status(dev); pci_cleanup_aer_uncorrect_error_status(dev); - pci_info(dev, "AER: Device recovery successful\n"); + pci_info(dev, "device recovery successful\n"); return; failed: pci_uevent_ers(dev, PCI_ERS_RESULT_DISCONNECT); /* TODO: Should kernel panic here? */ - pci_info(dev, "AER: Device recovery failed\n"); + pci_info(dev, "device recovery failed\n"); } |