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>
diff --git a/drivers/pci/pcie/aer/aerdrv_errprint.c b/drivers/pci/pcie/aer/aerdrv_errprint.c
index 48f70fa..a2a4b39 100644
--- a/drivers/pci/pcie/aer/aerdrv_errprint.c
+++ b/drivers/pci/pcie/aer/aerdrv_errprint.c
@@ -185,6 +185,7 @@
{
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 @@
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 @@
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 @@
*(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);
}