#include <linux/module.h>
#include <linux/acpi.h>
#include <linux/cper.h>
#include <linux/ratelimit.h>
#include <linux/edac.h>
#include <linux/ras.h>
#include <acpi/ghes.h>
#include <asm/cpu.h>
#include <asm/mce.h>
#include "apei/apei-internal.h"
#include <ras/ras_event.h>
#define EXT_ELOG_ENTRY_MASK …
#define EXTLOG_DSM_REV …
#define EXTLOG_FN_ADDR …
#define FLAG_OS_OPTIN …
#define ELOG_ENTRY_VALID …
#define ELOG_ENTRY_LEN …
#define EMCA_BUG …
struct extlog_l1_head { … };
static u8 extlog_dsm_uuid[] __initdata = …;
static u64 elog_base;
static size_t elog_size;
static u64 l1_dirbase;
static size_t l1_size;
static void __iomem *extlog_l1_addr;
static void __iomem *elog_addr;
static void *elog_buf;
static u64 *l1_entry_base;
static u32 l1_percpu_entry;
#define ELOG_IDX(cpu, bank) …
#define ELOG_ENTRY_DATA(idx) …
#define ELOG_ENTRY_ADDR(phyaddr) …
static struct acpi_hest_generic_status *extlog_elog_entry_check(int cpu, int bank)
{ … }
static void __print_extlog_rcd(const char *pfx,
struct acpi_hest_generic_status *estatus, int cpu)
{ … }
static int print_extlog_rcd(const char *pfx,
struct acpi_hest_generic_status *estatus, int cpu)
{ … }
static int extlog_print(struct notifier_block *nb, unsigned long val,
void *data)
{ … }
static bool __init extlog_get_l1addr(void)
{ … }
static struct notifier_block extlog_mce_dec = …;
static int __init extlog_init(void)
{ … }
static void __exit extlog_exit(void)
{ … }
module_init(…) …;
module_exit(extlog_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;