aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBetty Dall <betty.dall@hp.com>2013-06-06 14:10:50 -0400
committerBjorn Helgaas <bhelgaas@google.com>2013-06-06 16:39:16 -0400
commit0ba98ec9196746dd6abfa7bb9856ef4f29ffb9be (patch)
tree4a1e561b242cdd42fea73b3cf8c6ed84abb8b125
parentfde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98d (diff)
ACPI / APEI: Force fatal AER severity when component has been reset
The CPER error record has a reset bit that indicates that the platform has reset the component. The reset bit can be set for any severity error including recoverable. From the AER code path's perspective, any error is fatal if the component has been reset. This patch upgrades the severity of the AER recovery to AER_FATAL whenever the CPER error record indicates that the component has been reset. [bhelgaas: s/bus has been reset/component has been reset/] Signed-off-by: Betty Dall <betty.dall@hp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/acpi/apei/ghes.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index d668a8ae602b..ab315515908e 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -449,9 +449,19 @@ static void ghes_do_proc(struct ghes *ghes,
449 pcie_err->validation_bits & CPER_PCIE_VALID_AER_INFO) { 449 pcie_err->validation_bits & CPER_PCIE_VALID_AER_INFO) {
450 unsigned int devfn; 450 unsigned int devfn;
451 int aer_severity; 451 int aer_severity;
452
452 devfn = PCI_DEVFN(pcie_err->device_id.device, 453 devfn = PCI_DEVFN(pcie_err->device_id.device,
453 pcie_err->device_id.function); 454 pcie_err->device_id.function);
454 aer_severity = cper_severity_to_aer(sev); 455 aer_severity = cper_severity_to_aer(sev);
456
457 /*
458 * If firmware reset the component to contain
459 * the error, we must reinitialize it before
460 * use, so treat it as a fatal AER error.
461 */
462 if (gdata->flags & CPER_SEC_RESET)
463 aer_severity = AER_FATAL;
464
455 aer_recover_queue(pcie_err->device_id.segment, 465 aer_recover_queue(pcie_err->device_id.segment,
456 pcie_err->device_id.bus, 466 pcie_err->device_id.bus,
457 devfn, aer_severity); 467 devfn, aer_severity);