On Fri, Dec 13, 2019 at 07:44:34PM +0800, Yicong Yang wrote: > The PCI error recovery will fail if any device under > root port doesn't have an error_detected callback. > Currently only failure result is printed, which is > not enough to determine which device leads to the > failure and the detailed failure reason. > > Add print information if certain device under root > port has no error_detected callback. > > Signed-off-by: Yicong Yang <yangyicong@xxxxxxxxxxxxx> Applied to pci/aer for v5.6, thanks! I also added a trivial follow-on patch to factor out the "AER: " prefix (attached below). This code is now used by DPC as well as AER, so "AER: " might not be exactly the correct prefix, but I didn't try to untangle that. > --- > drivers/pci/pcie/err.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c > index b0e6048..ec37c33 100644 > --- a/drivers/pci/pcie/err.c > +++ b/drivers/pci/pcie/err.c > @@ -61,8 +61,10 @@ 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; > + pci_info(dev, "AER: Device has no error_detected callback\n"); > + } > else > vote = PCI_ERS_RESULT_NONE; > } else { > -- > 2.8.1 > commit 9694ef043ea4 ("PCI/AER: Factor message prefixes with dev_fmt()") Author: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> Date: Fri Dec 13 16:46:05 2019 -0600 PCI/AER: Factor message prefixes with dev_fmt() Define dev_fmt() with the common prefix of log messages so we don't have to repeat it in every printk. No functional change intended. Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c index abde5e000f5d..747ef8b41d1f 100644 --- a/drivers/pci/pcie/err.c +++ b/drivers/pci/pcie/err.c @@ -10,6 +10,8 @@ * Zhang Yanmin (yanmin.zhang@xxxxxxxxx) */ +#define dev_fmt(fmt) "AER: " fmt + #include <linux/pci.h> #include <linux/module.h> #include <linux/kernel.h> @@ -64,7 +66,7 @@ static int report_error_detected(struct pci_dev *dev, */ if (dev->hdr_type != PCI_HEADER_TYPE_BRIDGE) { vote = PCI_ERS_RESULT_NO_AER_DRIVER; - pci_info(dev, "AER: Driver has no error_detected callback\n"); + pci_info(dev, "driver has no error_detected callback\n"); } else { vote = PCI_ERS_RESULT_NONE; } @@ -236,12 +238,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"); }