#define pr_fmt(fmt) …
#include <acpi/ghes.h>
#include <linux/edac.h>
#include <linux/dmi.h>
#include "edac_module.h"
#include <ras/ras_event.h>
#include <linux/notifier.h>
#define OTHER_DETAIL_LEN …
struct ghes_pvt { … };
static refcount_t ghes_refcount = …;
static struct ghes_pvt *ghes_pvt;
static struct ghes_hw_desc { … } ghes_hw;
static DEFINE_MUTEX(ghes_reg_mutex);
static DEFINE_SPINLOCK(ghes_lock);
static bool system_scanned;
static struct list_head *ghes_devs;
struct memdev_dmi_entry { … } __attribute__((packed));
static struct dimm_info *find_dimm_by_handle(struct mem_ctl_info *mci, u16 handle)
{ … }
static void dimm_setup_label(struct dimm_info *dimm, u16 handle)
{ … }
static void assign_dmi_dimm_info(struct dimm_info *dimm, struct memdev_dmi_entry *entry)
{ … }
static void enumerate_dimms(const struct dmi_header *dh, void *arg)
{ … }
static void ghes_scan_system(void)
{ … }
static int print_mem_error_other_detail(const struct cper_sec_mem_err *mem, char *msg,
const char *location, unsigned int len)
{ … }
static int ghes_edac_report_mem_error(struct notifier_block *nb,
unsigned long val, void *data)
{ … }
static struct notifier_block ghes_edac_mem_err_nb = …;
static int ghes_edac_register(struct device *dev)
{ … }
static void ghes_edac_unregister(struct ghes *ghes)
{ … }
static int __init ghes_edac_init(void)
{ … }
module_init(…) …;
static void __exit ghes_edac_exit(void)
{ … }
module_exit(ghes_edac_exit);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;