Re: [PATCH 8/8] pcie, aer: report multiple/first error on a device

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

 



On Fri, 2009-08-21 at 12:48 +0900, Hidetoshi Seto wrote:
> Multiple bits might be set in the Uncorrectable Error Status
> register.  But aer_print_error_source() only report a error of
> the lowest bit set in the error status register.
> 
> So it is better to print strings for all bits unmasked and set.
> 
> And check First Error Pointer to mark the error occurred first.
> This FEP is not valid when the corresponding bit of the Uncorrectable
> Error Status register is not set, or unimplemented or undefined.
> 
> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@xxxxxxxxxxxxxx>
> ---
>  drivers/pci/pcie/aer/aerdrv.h          |    1 +
>  drivers/pci/pcie/aer/aerdrv_core.c     |    4 ++++
>  drivers/pci/pcie/aer/aerdrv_errprint.c |    8 ++++----
>  3 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h
> index 0db530d..436bf79 100644
> --- a/drivers/pci/pcie/aer/aerdrv.h
> +++ b/drivers/pci/pcie/aer/aerdrv.h
> @@ -61,6 +61,7 @@ struct aer_err_info {
>  	u16 id;
>  	int severity;			/* 0:NONFATAL | 1:FATAL | 2:COR */
>  	int flags;
> +	int first;
>  	unsigned int status;		/* COR/UNCOR Error Status */
>  	unsigned int mask;		/* COR/UNCOR Error Mask */
>  	struct header_log_regs tlp;	/* TLP Header */
> diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
> index 38b3933..995644e 100644
> --- a/drivers/pci/pcie/aer/aerdrv_core.c
> +++ b/drivers/pci/pcie/aer/aerdrv_core.c
> @@ -727,6 +727,10 @@ static int get_device_error_info(struct pci_dev *dev, struct aer_err_info *info)
>  		if (!(info->status & ~info->mask))
>  			return AER_UNSUCCESS;
>  
> +		/* Get First Error Pointer */
> +		pci_read_config_dword(dev, pos + PCI_ERR_CAP, &info->first);

Perhaps use a temporary variable here?

> +		info->first = PCI_ERR_CAP_FEP(info->first);
> +
>  		if (info->status & AER_LOG_TLP_MASKS) {
>  			info->flags |= AER_TLP_HEADER_VALID_FLAG;
>  			pci_read_config_dword(dev,
> diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c b/drivers/pci/pcie/aer/aerdrv_errprint.c
> index 919c2c0..b6303fc 100644
> --- a/drivers/pci/pcie/aer/aerdrv_errprint.c
> +++ b/drivers/pci/pcie/aer/aerdrv_errprint.c
> @@ -169,11 +169,11 @@ static void aer_print_error_source(struct aer_err_info *info)
>  			errmsg = aer_uncorrectable_error_string[i];
>  
>  		if (errmsg)
> -			AER_PR(info, "%s\t:\n", errmsg);
> +			AER_PR(info, "%s\t: %s\n", errmsg,
> +				info->first == i ? "First" : "");
>  		else
> -			AER_PR(info, "Unknown Error Bit %2d  \t:\n", i);
> -
> -		break;
> +			AER_PR(info, "Unknown Error Bit %2d  \t: %s\n",
> +				i, info->first == i ? "First" : "");
>  	}
>  }
>  

Reviewed-by: Andrew Patterson <andrew.patterson@xxxxxx>

-- 
Andrew Patterson
Hewlett-Packard

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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