PCI: pcie, aer: report multiple/first error on a device
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 print strings for all bits unmasked and set. And check First Error Pointer to mark the error occured first. This FEP is not valid when the corresponing bit of the Uncorrectable Error Status register is not set, or unimplemented or undefined. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
committed by
Jesse Barnes
parent
0d90c3ac0b
commit
e7a0d92b19
@@ -698,7 +698,7 @@ static struct aer_err_source *get_e_source(struct aer_rpc *rpc)
|
||||
|
||||
static int get_device_error_info(struct pci_dev *dev, struct aer_err_info *info)
|
||||
{
|
||||
int pos;
|
||||
int pos, temp;
|
||||
|
||||
info->status = 0;
|
||||
info->flags &= ~AER_TLP_HEADER_VALID_FLAG;
|
||||
@@ -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, &temp);
|
||||
info->first = PCI_ERR_CAP_FEP(temp);
|
||||
|
||||
if (info->status & AER_LOG_TLP_MASKS) {
|
||||
info->flags |= AER_TLP_HEADER_VALID_FLAG;
|
||||
pci_read_config_dword(dev,
|
||||
|
||||
Reference in New Issue
Block a user