Commit 5d0b401f authored by Alexandru Gagniuc's avatar Alexandru Gagniuc Committed by Bjorn Helgaas

PCI/AER: Unify error bit printing for native and CPER reporting

AER errors can be reported natively (Linux AER driver fields interrupts and
reads error state directly from hardware) or via the ACPI/APEI/GHES/CPER
path (platform firmware reads error state from hardware and sends it to
Linux via ACPI interfaces).

Previously the same error would produce different output depending on
whether it was reported natively or via ACPI.  The CPER path resulted in
hard-to-understand messages, without a prefix. Instead use
__aer_print_error() for both native AER and CPER to provide a more
consistent log format.
Signed-off-by: default avatarAlexandru Gagniuc <mr.nuke.me@gmail.com>
[bhelgaas: changelog]
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent 60cc43fc
...@@ -216,28 +216,30 @@ EXPORT_SYMBOL_GPL(cper_severity_to_aer); ...@@ -216,28 +216,30 @@ EXPORT_SYMBOL_GPL(cper_severity_to_aer);
void cper_print_aer(struct pci_dev *dev, int aer_severity, void cper_print_aer(struct pci_dev *dev, int aer_severity,
struct aer_capability_regs *aer) struct aer_capability_regs *aer)
{ {
int layer, agent, status_strs_size, tlp_header_valid = 0; int layer, agent, tlp_header_valid = 0;
u32 status, mask; u32 status, mask;
const char **status_strs; struct aer_err_info info;
if (aer_severity == AER_CORRECTABLE) { if (aer_severity == AER_CORRECTABLE) {
status = aer->cor_status; status = aer->cor_status;
mask = aer->cor_mask; mask = aer->cor_mask;
status_strs = aer_correctable_error_string;
status_strs_size = ARRAY_SIZE(aer_correctable_error_string);
} else { } else {
status = aer->uncor_status; status = aer->uncor_status;
mask = aer->uncor_mask; mask = aer->uncor_mask;
status_strs = aer_uncorrectable_error_string;
status_strs_size = ARRAY_SIZE(aer_uncorrectable_error_string);
tlp_header_valid = status & AER_LOG_TLP_MASKS; tlp_header_valid = status & AER_LOG_TLP_MASKS;
} }
layer = AER_GET_LAYER_ERROR(aer_severity, status); layer = AER_GET_LAYER_ERROR(aer_severity, status);
agent = AER_GET_AGENT(aer_severity, status); agent = AER_GET_AGENT(aer_severity, status);
memset(&info, 0, sizeof(info));
info.severity = aer_severity;
info.status = status;
info.mask = mask;
info.first_error = PCI_ERR_CAP_FEP(aer->cap_control);
pci_err(dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); pci_err(dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask);
cper_print_bits("", status, status_strs, status_strs_size); __aer_print_error(dev, &info);
pci_err(dev, "aer_layer=%s, aer_agent=%s\n", pci_err(dev, "aer_layer=%s, aer_agent=%s\n",
aer_error_layer[layer], aer_agent_string[agent]); aer_error_layer[layer], aer_agent_string[agent]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment