|
@@ -449,9 +449,19 @@ static void ghes_do_proc(struct ghes *ghes,
|
|
|
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(sev);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 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);
|