|
@@ -48,8 +48,8 @@
|
|
|
#include <linux/genalloc.h>
|
|
|
#include <linux/pci.h>
|
|
|
#include <linux/aer.h>
|
|
|
-#include <acpi/apei.h>
|
|
|
-#include <acpi/hed.h>
|
|
|
+
|
|
|
+#include <acpi/ghes.h>
|
|
|
#include <asm/mce.h>
|
|
|
#include <asm/tlbflush.h>
|
|
|
#include <asm/nmi.h>
|
|
@@ -84,42 +84,6 @@
|
|
|
((struct acpi_hest_generic_status *) \
|
|
|
((struct ghes_estatus_node *)(estatus_node) + 1))
|
|
|
|
|
|
-/*
|
|
|
- * One struct ghes is created for each generic hardware error source.
|
|
|
- * It provides the context for APEI hardware error timer/IRQ/SCI/NMI
|
|
|
- * handler.
|
|
|
- *
|
|
|
- * estatus: memory buffer for error status block, allocated during
|
|
|
- * HEST parsing.
|
|
|
- */
|
|
|
-#define GHES_TO_CLEAR 0x0001
|
|
|
-#define GHES_EXITING 0x0002
|
|
|
-
|
|
|
-struct ghes {
|
|
|
- struct acpi_hest_generic *generic;
|
|
|
- struct acpi_hest_generic_status *estatus;
|
|
|
- u64 buffer_paddr;
|
|
|
- unsigned long flags;
|
|
|
- union {
|
|
|
- struct list_head list;
|
|
|
- struct timer_list timer;
|
|
|
- unsigned int irq;
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
-struct ghes_estatus_node {
|
|
|
- struct llist_node llnode;
|
|
|
- struct acpi_hest_generic *generic;
|
|
|
-};
|
|
|
-
|
|
|
-struct ghes_estatus_cache {
|
|
|
- u32 estatus_len;
|
|
|
- atomic_t count;
|
|
|
- struct acpi_hest_generic *generic;
|
|
|
- unsigned long long time_in;
|
|
|
- struct rcu_head rcu;
|
|
|
-};
|
|
|
-
|
|
|
bool ghes_disable;
|
|
|
module_param_named(disable, ghes_disable, bool, 0);
|
|
|
|
|
@@ -333,13 +297,6 @@ static void ghes_fini(struct ghes *ghes)
|
|
|
apei_unmap_generic_address(&ghes->generic->error_status_address);
|
|
|
}
|
|
|
|
|
|
-enum {
|
|
|
- GHES_SEV_NO = 0x0,
|
|
|
- GHES_SEV_CORRECTED = 0x1,
|
|
|
- GHES_SEV_RECOVERABLE = 0x2,
|
|
|
- GHES_SEV_PANIC = 0x3,
|
|
|
-};
|
|
|
-
|
|
|
static inline int ghes_severity(int severity)
|
|
|
{
|
|
|
switch (severity) {
|