ACPI, APEI, GHES: Add PCIe AER recovery support
aer_recover_queue() is called when recoverable PCIe AER errors are notified by firmware to do the recovery work. Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@@ -45,6 +45,8 @@
|
|||||||
#include <linux/irq_work.h>
|
#include <linux/irq_work.h>
|
||||||
#include <linux/llist.h>
|
#include <linux/llist.h>
|
||||||
#include <linux/genalloc.h>
|
#include <linux/genalloc.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/aer.h>
|
||||||
#include <acpi/apei.h>
|
#include <acpi/apei.h>
|
||||||
#include <acpi/atomicio.h>
|
#include <acpi/atomicio.h>
|
||||||
#include <acpi/hed.h>
|
#include <acpi/hed.h>
|
||||||
@@ -476,6 +478,27 @@ static void ghes_do_proc(const struct acpi_hest_generic_status *estatus)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_ACPI_APEI_PCIEAER
|
||||||
|
else if (!uuid_le_cmp(*(uuid_le *)gdata->section_type,
|
||||||
|
CPER_SEC_PCIE)) {
|
||||||
|
struct cper_sec_pcie *pcie_err;
|
||||||
|
pcie_err = (struct cper_sec_pcie *)(gdata+1);
|
||||||
|
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(sev);
|
||||||
|
aer_recover_queue(pcie_err->device_id.segment,
|
||||||
|
pcie_err->device_id.bus,
|
||||||
|
devfn, aer_severity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user