ACPI: APEI: handle PCIe AER errors in separate function
authorTyler Baicar <tbaicar@codeaurora.org>
Tue, 28 Nov 2017 21:48:08 +0000 (16:48 -0500)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 5 Dec 2017 01:10:13 +0000 (02:10 +0100)
Move PCIe AER error handling code into a separate function.

Signed-off-by: Tyler Baicar <tbaicar@codeaurora.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/apei/ghes.c

index 6402f7fad3bb3bf1cfb28384a4d843f0bd0b5bc8..f67eb763e950a99d8d67aa618954feed13232116 100644 (file)
@@ -414,6 +414,39 @@ static void ghes_handle_memory_failure(struct acpi_hest_generic_data *gdata, int
 #endif
 }
 
+static void ghes_handle_aer(struct acpi_hest_generic_data *gdata, int sev, int sec_sev)
+{
+#ifdef CONFIG_ACPI_APEI_PCIEAER
+       struct cper_sec_pcie *pcie_err = acpi_hest_get_payload(gdata);
+
+       if (sev == GHES_SEV_RECOVERABLE &&
+           sec_sev == GHES_SEV_RECOVERABLE &&
+           pcie_err->validation_bits & CPER_PCIE_VALID_DEVICE_ID &&
+           pcie_err->validation_bits & CPER_PCIE_VALID_AER_INFO) {
+               unsigned int devfn;
+               int aer_severity;
+
+               devfn = PCI_DEVFN(pcie_err->device_id.device,
+                                 pcie_err->device_id.function);
+               aer_severity = cper_severity_to_aer(gdata->error_severity);
+
+               /*
+                * If firmware reset the component to contain
+                * the error, we must reinitialize it before
+                * use, so treat it as a fatal AER error.
+                */
+               if (gdata->flags & CPER_SEC_RESET)
+                       aer_severity = AER_FATAL;
+
+               aer_recover_queue(pcie_err->device_id.segment,
+                                 pcie_err->device_id.bus,
+                                 devfn, aer_severity,
+                                 (struct aer_capability_regs *)
+                                 pcie_err->aer_info);
+       }
+#endif
+}
+
 static void ghes_do_proc(struct ghes *ghes,
                         const struct acpi_hest_generic_status *estatus)
 {
@@ -441,38 +474,9 @@ static void ghes_do_proc(struct ghes *ghes,
                        arch_apei_report_mem_error(sev, mem_err);
                        ghes_handle_memory_failure(gdata, sev);
                }
-#ifdef CONFIG_ACPI_APEI_PCIEAER
                else if (guid_equal(sec_type, &CPER_SEC_PCIE)) {
-                       struct cper_sec_pcie *pcie_err = acpi_hest_get_payload(gdata);
-
-                       if (sev == GHES_SEV_RECOVERABLE &&
-                           sec_sev == GHES_SEV_RECOVERABLE &&
-                           pcie_err->validation_bits & CPER_PCIE_VALID_DEVICE_ID &&
-                           pcie_err->validation_bits & CPER_PCIE_VALID_AER_INFO) {
-                               unsigned int devfn;
-                               int aer_severity;
-
-                               devfn = PCI_DEVFN(pcie_err->device_id.device,
-                                                 pcie_err->device_id.function);
-                               aer_severity = cper_severity_to_aer(gdata->error_severity);
-
-                               /*
-                                * If firmware reset the component to contain
-                                * the error, we must reinitialize it before
-                                * use, so treat it as a fatal AER error.
-                                */
-                               if (gdata->flags & CPER_SEC_RESET)
-                                       aer_severity = AER_FATAL;
-
-                               aer_recover_queue(pcie_err->device_id.segment,
-                                                 pcie_err->device_id.bus,
-                                                 devfn, aer_severity,
-                                                 (struct aer_capability_regs *)
-                                                 pcie_err->aer_info);
-                       }
-
+                       ghes_handle_aer(gdata, sev, sec_sev);
                }
-#endif
                else if (guid_equal(sec_type, &CPER_SEC_PROC_ARM)) {
                        struct cper_sec_proc_arm *err = acpi_hest_get_payload(gdata);