@ -45,6 +45,8 @@
# include <linux/irq_work.h>
# include <linux/llist.h>
# include <linux/genalloc.h>
# include <linux/pci.h>
# include <linux/aer.h>
# include <acpi/apei.h>
# include <acpi/atomicio.h>
# include <acpi/hed.h>
@ -476,6 +478,27 @@ static void ghes_do_proc(const struct acpi_hest_generic_status *estatus)
}
# 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
}
}