summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHidetoshi Seto2009-09-07 10:10:40 +0200
committerJesse Barnes2009-09-09 22:47:46 +0200
commit0d465f23502e0810443c90a9cf1cf5686c4af4f2 (patch)
tree7b40a9655387f20895e491ed6d0ad25bc2c66e4c /drivers
parentPCI: pcie, aer: init struct aer_err_info for reuse (diff)
downloadkernel-qcow2-linux-0d465f23502e0810443c90a9cf1cf5686c4af4f2.tar.gz
kernel-qcow2-linux-0d465f23502e0810443c90a9cf1cf5686c4af4f2.tar.xz
kernel-qcow2-linux-0d465f23502e0810443c90a9cf1cf5686c4af4f2.zip
PCI: pcie, aer: fix report of multiple errors
The flag AER_MULTI_ERROR_VALID_FLAG in info->flag does mean that the root port receives multiple error messages. Error messages can be posted from different devices, so it does not mean that each reported device has multiple errors. If there are multiple error devices and the root port has valid error source ID, it would be nice to report which device is the error source reported first. Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/pcie/aer/aerdrv_errprint.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c b/drivers/pci/pcie/aer/aerdrv_errprint.c
index 48f70fa7f684..a2a4b3903a7a 100644
--- a/drivers/pci/pcie/aer/aerdrv_errprint.c
+++ b/drivers/pci/pcie/aer/aerdrv_errprint.c
@@ -185,6 +185,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
{
char *errmsg;
int err_layer, agent;
+ int id = ((dev->bus->number << 8) | dev->devfn);
AER_PR(info, "+------ PCI-Express Device Error ------+\n");
AER_PR(info, "Error Severity\t\t: %s\n",
@@ -192,11 +193,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
if (info->status == 0) {
AER_PR(info, "PCIE Bus Error type\t: (Unaccessible)\n");
- AER_PR(info, "Unaccessible Received\t: %s\n",
- info->flags & AER_MULTI_ERROR_VALID_FLAG ?
- "Multiple" : "First");
- AER_PR(info, "Unregistered Agent ID\t: %04x\n",
- (dev->bus->number << 8) | dev->devfn);
+ AER_PR(info, "Unregistered Agent ID\t: %04x\n", id);
} else {
err_layer = AER_GET_LAYER_ERROR(info->severity, info->status);
AER_PR(info, "PCIE Bus Error type\t: %s\n",
@@ -206,15 +203,11 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
errmsg = aer_get_error_source_name(info->severity,
info->status,
errmsg_buff);
- AER_PR(info, "%s\t: %s\n", errmsg,
- info->flags & AER_MULTI_ERROR_VALID_FLAG ?
- "Multiple" : "First");
+ AER_PR(info, "%s\t:\n", errmsg);
spin_unlock(&logbuf_lock);
agent = AER_GET_AGENT(info->severity, info->status);
- AER_PR(info, "%s\t\t: %04x\n",
- aer_agent_string[agent],
- (dev->bus->number << 8) | dev->devfn);
+ AER_PR(info, "%s\t\t: %04x\n", aer_agent_string[agent], id);
AER_PR(info, "VendorID=%04xh, DeviceID=%04xh,"
" Bus=%02xh, Device=%02xh, Function=%02xh\n",
@@ -236,4 +229,8 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info)
*(tlp + 13), *(tlp + 12));
}
}
+
+ if (info->id && info->error_dev_num > 1 && info->id == id)
+ AER_PR(info, "Error of this Agent(%04x) is reported first\n",
+ id);
}