Re: [Patch]PCI:AER:Notify which device has no error_detected callback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2019/12/14 6:57, Bjorn Helgaas wrote:
> 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");

I think use "device" here is more proper. Sometimes the device is even not bind to the driver, which
will also lead to the recovery failure.


>  		} 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");
>  }
>
> .
>





[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux