From 85b6c0d75cb6e06b7388df19cfcd4059851d874e Mon Sep 17 00:00:00 2001 From: Xie XiuQi Date: Fri, 15 May 2026 15:36:31 +0800 Subject: [PATCH 1/2] GHES: Add a notify chain for process memory section. Add a notify chain for process memory section, with which other modules might do error recovery. Signed-off-by: Xie XiuQi Tested-by: Wang Xiongfeng Tested-by: Tyler Baicar Reviewed-by: Hanjun Guo Signed-off-by: Yang Yingliang Tested-by: Peng Min Signed-off-by: Wang Yinfeng Signed-off-by: Wang Chenlu --- drivers/acpi/apei/ghes.c | 8 ++++++++ include/acpi/ghes.h | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 14c3add985264..f7227e6586f0c 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -150,6 +150,9 @@ static DEFINE_MUTEX(ghes_list_mutex); static LIST_HEAD(ghes_devs); static DEFINE_MUTEX(ghes_devs_mutex); +ATOMIC_NOTIFIER_HEAD(ghes_mem_err_chain); +EXPORT_SYMBOL_GPL(ghes_mem_err_chain); + /* * Because the memory area used to transfer hardware error information * from BIOS to Linux can be determined only in NMI, IRQ or timer @@ -702,6 +705,11 @@ static bool ghes_do_proc(struct ghes *ghes, if (guid_equal(sec_type, &CPER_SEC_PLATFORM_MEM)) { struct cper_sec_mem_err *mem_err = acpi_hest_get_payload(gdata); + struct ghes_mem_err mem; + + mem.notify_type = ghes->generic->notify.type; + mem.severity = gdata->error_severity; + mem.mem_err = mem_err; atomic_notifier_call_chain(&ghes_report_chain, sev, mem_err); diff --git a/include/acpi/ghes.h b/include/acpi/ghes.h index 16646fdd1f841..72b905a803ce0 100644 --- a/include/acpi/ghes.h +++ b/include/acpi/ghes.h @@ -131,6 +131,14 @@ int ghes_notify_sea(void); static inline int ghes_notify_sea(void) { return -ENOENT; } #endif +struct ghes_mem_err { + int notify_type; + int severity; + struct cper_sec_mem_err *mem_err; +}; + +extern struct atomic_notifier_head ghes_mem_err_chain; + struct notifier_block; extern void ghes_register_report_chain(struct notifier_block *nb); extern void ghes_unregister_report_chain(struct notifier_block *nb); From 21e539727515223fee21c0d480695815d48bb41b Mon Sep 17 00:00:00 2001 From: Wang Chenlu Date: Fri, 15 May 2026 16:28:17 +0800 Subject: [PATCH 2/2] GHES: Add ghes_mem_err_chain notify chain for process memory section In some scenarios where memory errors occur, we need to invoke the callback function of the ghes_mem_err_chain to trigger SEA. Mainline: NA Signed-off-by: Peng Min Signed-off-by: Wang Yinfeng Signed-off-by: Wang Chenlu --- drivers/acpi/apei/ghes.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index f7227e6586f0c..ce10402ef2a32 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -711,6 +711,7 @@ static bool ghes_do_proc(struct ghes *ghes, mem.severity = gdata->error_severity; mem.mem_err = mem_err; + atomic_notifier_call_chain(&ghes_mem_err_chain, 0, &mem); atomic_notifier_call_chain(&ghes_report_chain, sev, mem_err); arch_apei_report_mem_error(sev, mem_err);