[PATCH OLK-6.6 0/9] prevent SEA storms on critical RAS
After a critical RAS event is triggered, user data for this task becomes inaccessible. To prevents wider system impact, following step will be done: - sending SIGBUS to threads belong to this task - skip memory access during __access_remote_vm - skip memory access during exit_ruobus_list - skip memory access during rseq_get_rseq_cs - skip memory access during do_coredump Jiacheng Yu (1): futex: avoid memory access during exit_robust_list if task facing critical RAS Wupeng Ma (5): mm: memory_failure: fix UAF in memory_failure_cb ACPI: APEI: Add MMF_RAS_CRITICAL to mark critical RAS scenarios in mm struct coredump: skip coredump during critical error if task facing critical RAS mm: avoid memory access during __access_remote_vm if task facing critical RAS arm64: openeuler_defconfig: enable ras critical related configs by default Xiaofei Tan (1): ACPI: APEI: Add vendor specific error info handling for ARM Processor Zhang Qiao (2): exit: terminate process on critical RAS events to prevent further damage rseq: avoid memory access during rseq_get_rseq_cs if task facing critical RAS arch/arm64/configs/openeuler_defconfig | 2 + drivers/acpi/apei/Kconfig | 14 ++++ drivers/acpi/apei/Makefile | 1 + drivers/acpi/apei/apei-internal.h | 11 ++++ drivers/acpi/apei/ghes-vendor-info.c | 90 ++++++++++++++++++++++++++ drivers/acpi/apei/ghes.c | 60 +++++++++++++++-- fs/coredump.c | 15 +++++ include/linux/mm.h | 12 ++++ include/linux/sched/coredump.h | 6 ++ kernel/futex/core.c | 3 + kernel/rseq.c | 3 + mm/memory.c | 5 ++ 12 files changed, 217 insertions(+), 5 deletions(-) create mode 100644 drivers/acpi/apei/ghes-vendor-info.c -- 2.43.0
hulk inclusion category: bugfix bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ The twcb pointer is accessed after gen_pool_free() in memory_failure_cb, which leads to a use-after-free vulnerability. Fix this by moving gen_pool_free() to the end of the function after all twcb accesses. Fixes: a81f1aa5c8ea ("mm: memory-failure: use kill_accessing_process() in ghes") Signed-off-by: Wupeng Ma <mawupeng1@huawei.com> --- drivers/acpi/apei/ghes.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 8a3fc78ec4ea..925355f156b6 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -484,12 +484,14 @@ static void memory_failure_cb(struct callback_head *twork) container_of(twork, struct sync_task_work, twork); ret = memory_failure(twcb->pfn, twcb->flags); - gen_pool_free(ghes_estatus_pool, (unsigned long)twcb, sizeof(*twcb)); - if (!ret || ret == -EHWPOISON || ret == -EOPNOTSUPP) + if (!ret || ret == -EHWPOISON || ret == -EOPNOTSUPP) { + gen_pool_free(ghes_estatus_pool, (unsigned long)twcb, sizeof(*twcb)); return; + } kill_accessing_process(twcb->pfn, twcb->flags, true); + gen_pool_free(ghes_estatus_pool, (unsigned long)twcb, sizeof(*twcb)); } static bool ghes_do_memory_failure(u64 physical_addr, int flags) -- 2.43.0
From: Xiaofei Tan <tanxiaofei@huawei.com> driver inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ In the vendor specific error info of ARM Processor Error Section, Hisi defines a critical flag. When a CPU core consumes memory fault and a synchronization exception occurs. Set this flag if the memory fault is device-level fault, such as a remote memory link disconnection, where the CPU core may generate a large number of synchronization exceptions. OS can handle the error more efficient with this flag. Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com> --- drivers/acpi/apei/Kconfig | 9 +++ drivers/acpi/apei/Makefile | 1 + drivers/acpi/apei/apei-internal.h | 11 ++++ drivers/acpi/apei/ghes-vendor-info.c | 90 ++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 drivers/acpi/apei/ghes-vendor-info.c diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig index 5f34dd572829..cf799e7b68bf 100644 --- a/drivers/acpi/apei/Kconfig +++ b/drivers/acpi/apei/Kconfig @@ -34,6 +34,15 @@ config ACPI_APEI_GHES by firmware to produce more valuable hardware error information for Linux. +config ACPI_APEI_GHES_ARMP_VENDOR_INFO + bool "ARM processor vendor specific error info" + depends on ARM64 && ACPI_APEI_GHES + default n + help + Parse vendor specific error info of ARM processor error section, + for platform-related fault status to handle system failures. This + functionality requires support from both the chip and the firmware. + config ACPI_APEI_GHES_NOTIFY_ALL_RAS_ERR bool "Notify all ras err to driver" depends on ARM64 && ACPI_APEI_GHES diff --git a/drivers/acpi/apei/Makefile b/drivers/acpi/apei/Makefile index a2f54a554abd..10f22e6e4de3 100644 --- a/drivers/acpi/apei/Makefile +++ b/drivers/acpi/apei/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_ACPI_APEI) += apei.o obj-$(CONFIG_ACPI_APEI_GHES) += ghes.o +obj-$(CONFIG_ACPI_APEI_GHES_ARMP_VENDOR_INFO) += ghes-vendor-info.o obj-$(CONFIG_ACPI_APEI_EINJ) += einj.o obj-$(CONFIG_ACPI_APEI_ERST_DEBUG) += erst-dbg.o obj-$(CONFIG_ACPI_APEI_MEMORY_FAILURE) += ghes-policy.o diff --git a/drivers/acpi/apei/apei-internal.h b/drivers/acpi/apei/apei-internal.h index 472f023bb227..f5519153e32d 100644 --- a/drivers/acpi/apei/apei-internal.h +++ b/drivers/acpi/apei/apei-internal.h @@ -10,6 +10,7 @@ #include <linux/acpi.h> struct apei_exec_context; +struct cper_sec_proc_arm; typedef int (*apei_exec_ins_func_t)(struct apei_exec_context *ctx, struct acpi_whea_header *entry); @@ -138,4 +139,14 @@ static inline bool apei_page_should_offline(unsigned long pfn) return true; } #endif + +#ifdef CONFIG_ACPI_APEI_GHES_ARMP_VENDOR_INFO +bool ghes_armp_vendor_critical_error(struct cper_sec_proc_arm *err, bool sync); +#else +static inline bool +ghes_armp_vendor_critical_error(struct cper_sec_proc_arm *err, bool sync) +{ + return false; +} +#endif #endif diff --git a/drivers/acpi/apei/ghes-vendor-info.c b/drivers/acpi/apei/ghes-vendor-info.c new file mode 100644 index 000000000000..55db619638a2 --- /dev/null +++ b/drivers/acpi/apei/ghes-vendor-info.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Handle ARM processor vendor specific error info. + * Copyright (c) Huawei Technologies Co., Ltd. 2026. All rights reserved. + */ + +#include <linux/init.h> +#include <linux/acpi.h> +#include <acpi/ghes.h> +#include <acpi/apei.h> +#include "apei-internal.h" + +#define HISI_OEM BIT(0) + +static int vender_oem __ro_after_init; + +#ifdef CONFIG_ARCH_HISI + +#define HISI_VENDOR_MAGIC_NUM 0xCC08CC08CC08CC08 +#define HISI_VENDOR_CRITICAL_ERR BIT(0) + +struct hisi_armp_vendor_info { + u64 magic_num; + u32 ver_info; + u32 err_flag; /* bit0:critical error, others: reserved */ + u32 *regs; +} __packed; + +static bool ghes_hisi_critical_hw_error(struct cper_sec_proc_arm *err, bool sync) +{ + struct hisi_armp_vendor_info *vendor_info; + unsigned long err_info_sz; + char *p; + + if (!sync) + return false; + + if (!(err->validation_bits & CPER_ARM_VALID_VENDOR_INFO)) + return false; + + p = (char *)(err + 1); + err_info_sz = sizeof(struct cper_arm_err_info) * err->err_info_num; + if (!err->context_info_num) { + vendor_info = (struct hisi_armp_vendor_info *) + (p + err_info_sz); + } else { + struct cper_arm_ctx_info *ctx_info = (struct cper_arm_ctx_info *) + (p + err_info_sz); + + vendor_info = (struct hisi_armp_vendor_info *) + (p + err_info_sz + + ctx_info->size * err->context_info_num); + } + + if (vendor_info->magic_num != HISI_VENDOR_MAGIC_NUM) + return false; + + return (bool)(vendor_info->err_flag & HISI_VENDOR_CRITICAL_ERR); +} +#else +static inline bool ghes_hisi_critical_hw_error(struct cper_sec_proc_arm *err, bool sync) +{ + return false; +} +#endif + +bool ghes_armp_vendor_critical_error(struct cper_sec_proc_arm *err, bool sync) +{ + if (vender_oem & HISI_OEM) + return ghes_hisi_critical_hw_error(err, sync); + + return false; +} + +static int __init ghes_check_oem_table(void) +{ + struct acpi_table_header *tbl; + acpi_status status = AE_OK; + + status = acpi_get_table(ACPI_SIG_HEST, 0, &tbl); + if (ACPI_FAILURE(status) || !tbl) + return -ENODEV; + + if (!memcmp(tbl->oem_id, "HISI ", ACPI_OEM_ID_SIZE)) + vender_oem |= HISI_OEM; + + acpi_put_table(tbl); + return 0; +} +subsys_initcall(ghes_check_oem_table); -- 2.43.0
hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ This patch introduces a mm flag MMF_RAS_CRITICAL to identify processes that have triggered critical RAS (Reliability, Availability, Serviceability) events. When a severe RAS scenario (e.g., unrecoverable memory error) is detected, this flag is set on the mm of the faulting process to indicate its critical context. This is a preparatory patch to enable subsequent changes that will leverage this flag to: - Skip non-essential error handling paths - Avoid redundant diagnostic operations - Reduce latency spikes during critical RAS scenarios Signed-off-by: Wupeng Ma <mawupeng1@huawei.com> --- drivers/acpi/apei/Kconfig | 5 ++++ drivers/acpi/apei/ghes.c | 52 ++++++++++++++++++++++++++++++++-- include/linux/mm.h | 12 ++++++++ include/linux/sched/coredump.h | 6 ++++ 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig index cf799e7b68bf..d090a3171492 100644 --- a/drivers/acpi/apei/Kconfig +++ b/drivers/acpi/apei/Kconfig @@ -43,6 +43,11 @@ config ACPI_APEI_GHES_ARMP_VENDOR_INFO for platform-related fault status to handle system failures. This functionality requires support from both the chip and the firmware. +config ACPI_APEI_RAS_CRITICAL + bool + depends on ACPI_APEI_GHES_ARMP_VENDOR_INFO && NUMA_REMOTE + default y + config ACPI_APEI_GHES_NOTIFY_ALL_RAS_ERR bool "Notify all ras err to driver" depends on ARM64 && ACPI_APEI_GHES diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 925355f156b6..49d3cbe09f2c 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -48,6 +48,7 @@ #include <asm/fixmap.h> #include <asm/tlbflush.h> #include <ras/ras_event.h> +#include <linux/numa_remote.h> #include "apei-internal.h" @@ -461,6 +462,46 @@ static void ghes_clear_estatus(struct ghes *ghes, ghes_ack_error(ghes->generic_v2); } +/* + * This function is utilized in both virtualized and non-virtualized environments. + * + * In standard non-virtualized (bare-metal) mode, it triggers the termination of the + * process accessing the faulty memory. + * + * In virtualized scenarios (KVM): + * - For Synchronous External Aborts (SEA), this function is invoked via + * apei_claim_sea() from within kvm_handle_guest_sea(). + * - If the error is successfully handled by the host, KVM injects the fault into + * the guest OS using kvm_inject_vabt(). + * - In exceptional cases where the guest cannot handle the injected exception, + * terminating the corresponding host process (e.g., the VMM/QEMU task) is the + * expected behavior to ensure system stability. + */ +static void ghes_handle_critical_ras(unsigned long pfn) +{ + struct mm_struct *mm = current->mm; + struct page *p; + int nid; + + if (!IS_ENABLED(CONFIG_ACPI_APEI_RAS_CRITICAL)) + return; + + p = pfn_to_online_page(pfn); + if (!p) + return; + + nid = page_to_nid(p); + if (!numa_is_remote_node(nid)) + return; + + if (test_bit(MMF_CRITICAL_ERR, &mm->flags)) + return; + + set_bit(MMF_CRITICAL_ERR, &mm->flags); + pr_warn_ratelimited(GHES_PFX "detected critical ras on pfn: %#lx, nid: %d, comm: %s, pid: %d, tgid: %d\n", + pfn, nid, current->comm, current->pid, current->tgid); +} + /* * struct sync_task_work - for synchronous RAS event * @@ -494,7 +535,7 @@ static void memory_failure_cb(struct callback_head *twork) gen_pool_free(ghes_estatus_pool, (unsigned long)twcb, sizeof(*twcb)); } -static bool ghes_do_memory_failure(u64 physical_addr, int flags) +static bool ghes_do_memory_failure(u64 physical_addr, int flags, bool critical) { unsigned long pfn; struct sync_task_work *twcb; @@ -511,6 +552,9 @@ static bool ghes_do_memory_failure(u64 physical_addr, int flags) } if (flags == MF_ACTION_REQUIRED && current->mm) { + if (critical) + ghes_handle_critical_ras(pfn); + twcb = (void *)gen_pool_alloc(ghes_estatus_pool, sizeof(*twcb)); if (!twcb) return false; @@ -547,7 +591,7 @@ static bool ghes_handle_memory_failure(struct acpi_hest_generic_data *gdata, flags = sync ? MF_ACTION_REQUIRED : 0; if (flags != -1) - return ghes_do_memory_failure(mem_err->physical_addr, flags); + return ghes_do_memory_failure(mem_err->physical_addr, flags, false); return false; } @@ -559,6 +603,7 @@ static bool ghes_handle_arm_hw_error(struct acpi_hest_generic_data *gdata, int flags = sync ? MF_ACTION_REQUIRED : 0; bool queued = false; int sec_sev, i; + bool critical; char *p; sec_sev = ghes_severity(gdata->error_severity); @@ -571,6 +616,7 @@ static bool ghes_handle_arm_hw_error(struct acpi_hest_generic_data *gdata, return false; p = (char *)(err + 1); + critical = ghes_armp_vendor_critical_error(err, sync); for (i = 0; i < err->err_info_num; i++) { struct cper_arm_err_info *err_info = (struct cper_arm_err_info *)p; bool is_cache = (err_info->type == CPER_ARM_CACHE_ERROR); @@ -584,7 +630,7 @@ static bool ghes_handle_arm_hw_error(struct acpi_hest_generic_data *gdata, * and don't filter out 'corrected' error here. */ if (is_cache && has_pa) { - queued = ghes_do_memory_failure(err_info->physical_fault_addr, flags); + queued = ghes_do_memory_failure(err_info->physical_fault_addr, flags, critical); p += err_info->length; continue; } diff --git a/include/linux/mm.h b/include/linux/mm.h index eeb1bf1b36c9..f52ed8b4cf36 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4455,4 +4455,16 @@ static inline bool vma_is_peer_shared(struct vm_area_struct *vma) } #endif +#ifdef CONFIG_ACPI_APEI_RAS_CRITICAL +static inline bool mm_is_critical_error(struct mm_struct *mm) +{ + return mm && test_bit(MMF_CRITICAL_ERR, &mm->flags); +} +#else +static inline bool mm_is_critical_error(struct mm_struct *mm) +{ + return false; +} +#endif + #endif /* _LINUX_MM_H */ diff --git a/include/linux/sched/coredump.h b/include/linux/sched/coredump.h index 1b37fa8fc723..28d71cc496bc 100644 --- a/include/linux/sched/coredump.h +++ b/include/linux/sched/coredump.h @@ -93,6 +93,12 @@ static inline int get_dumpable(struct mm_struct *mm) #define MMF_VM_MERGE_ANY 29 #define MMF_HAS_MDWE_NO_INHERIT 30 +#ifdef CONFIG_ACPI_APEI_RAS_CRITICAL +#define MMF_CRITICAL_ERR 63 +#else +#define MMF_CRITICAL_ERR 0 +#endif + static inline unsigned long mmf_init_flags(unsigned long flags) { if (flags & (1UL << MMF_HAS_MDWE_NO_INHERIT)) -- 2.43.0
From: Zhang Qiao <zhangqiao22@huawei.com> hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ After a critical RAS event is triggered, user data for this task becomes inaccessible. To prevent further system instability, SIGBUS is sent to all threads in the process. This ensures immediate termination and prevents wider system impact. Signed-off-by: Zhang Qiao <zhangqiao22@huawei.com> --- drivers/acpi/apei/ghes.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 49d3cbe09f2c..f6b68b7b81e9 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -500,6 +500,8 @@ static void ghes_handle_critical_ras(unsigned long pfn) set_bit(MMF_CRITICAL_ERR, &mm->flags); pr_warn_ratelimited(GHES_PFX "detected critical ras on pfn: %#lx, nid: %d, comm: %s, pid: %d, tgid: %d\n", pfn, nid, current->comm, current->pid, current->tgid); + + do_send_sig_info(SIGBUS, SEND_SIG_PRIV, current, PIDTYPE_TGID); } /* -- 2.43.0
hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ After a critical RAS event is triggered, user data for this task becomes inaccessible. In critical error scenarios, user memory as a whole becomes inaccessible, and therefore, the coredump must be skipped. Furthermore, dump_vma_snapshot performs a copy operation specifically on those VMA(s) that are considered "potentially" containing an ELF header. This process involves multiple accesses to user memory. Signed-off-by: Wupeng Ma <mawupeng1@huawei.com> --- fs/coredump.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fs/coredump.c b/fs/coredump.c index 68cef59bf022..f8b7d657845c 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -550,6 +550,9 @@ void do_coredump(const kernel_siginfo_t *siginfo) audit_core_dumps(siginfo->si_signo); + if (mm_is_critical_error(mm)) + goto fail; + binfmt = mm->binfmt; if (!binfmt || !binfmt->core_dump) goto fail; @@ -1231,6 +1234,18 @@ static bool dump_vma_snapshot(struct coredump_params *cprm) if (m->dump_size == DUMP_SIZE_MAYBE_ELFHDR_PLACEHOLDER) { char elfmag[SELFMAG]; + /* + * When a critical fault is triggered, the process might have already passed + * the initial checks in do_coredump. Since this path potentially involves + * multiple accesses to user memory in a loop, if the mm is marked as + * critical, we should skip the operation directly, release resources, and + * return failure. + */ + if (mm_is_critical_error(mm)) { + free_vma_snapshot(cprm); + return false; + } + if (copy_from_user(elfmag, (void __user *)m->start, SELFMAG) || memcmp(elfmag, ELFMAG, SELFMAG) != 0) { m->dump_size = 0; -- 2.43.0
hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ After a critical RAS event is triggered, user data for this task becomes inaccessible. During __access_remote_vm, task data will be accessed. Terminate this to prevent wider system impact. Signed-off-by: Wupeng Ma <mawupeng1@huawei.com> --- mm/memory.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 70f979d82ed5..794233ef55eb 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -6658,6 +6658,11 @@ int __access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, break; } else { int ret = 0; + + if (mm_is_critical_error(mm)) { + mmap_read_unlock(mm); + return 0; + } bytes = len; offset = addr & (PAGE_SIZE-1); if (bytes > PAGE_SIZE-offset) -- 2.43.0
From: Jiacheng Yu <yujiacheng3@huawei.com> hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ Background: After a CRITICAL RAS event is triggered, all user memory for this task becomes inaccessible. Accessing faulted memory during thread exit can cause further system damage. Fix: Upon detecting a task with CRITICAL RAS event, exit_robust_list returns immediately without attempting to access user memory. Impact: Any locks held by the affected thread will remain unavailable indefinitely. Threads waiting on these locks will block until an alternative wakeup mechanism is triggered. Signed-off-by: Jiacheng Yu <yujiacheng3@huawei.com> --- kernel/futex/core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/futex/core.c b/kernel/futex/core.c index f30a93e50f65..46a277c6697b 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -789,6 +789,9 @@ static void exit_robust_list(struct task_struct *curr) unsigned long futex_offset; int rc; + if (mm_is_critical_error(curr->mm)) + return; + /* * Fetch the list head (which was registered earlier, via * sys_set_robust_list()): -- 2.43.0
From: Zhang Qiao <zhangqiao22@huawei.com> hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ After a critical RAS event is triggered, user data for this task becomes inaccessible. The __rseq_handle_notify_resume function handles atomic operations in user space. Upon kernel interruption, the task's IP pointer is modified to abort_handler. RSEQ-protected data is typically per-CPU statistics during task exit. As mm_struct is about to be freed, continuing to fix code is meaningless. Thus there is no harm to skip during rseq_get_rseq_cs if task facing critical RAS. Signed-off-by: Zhang Qiao <zhangqiao22@huawei.com> --- kernel/rseq.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/rseq.c b/kernel/rseq.c index 1be13934448b..4388a3fe887d 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -180,6 +180,9 @@ static int rseq_get_rseq_cs(struct task_struct *t, struct rseq_cs *rseq_cs) u32 sig; int ret; + if (mm_is_critical_error(t->mm)) + return -EFAULT; + ret = rseq_get_rseq_cs_ptr_val(t->rseq, &ptr); if (ret) return ret; -- 2.43.0
hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/8787 ------------------------------------------ Enable CONFIG_ACPI_APEI_GHES_ARMP_VENDOR_INFO & CONFIG_ACPI_APEI_RAS_CRITICAL by default. Signed-off-by: Wupeng Ma <mawupeng1@huawei.com> --- arch/arm64/configs/openeuler_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig index fc581adb563b..357a29cedc5c 100644 --- a/arch/arm64/configs/openeuler_defconfig +++ b/arch/arm64/configs/openeuler_defconfig @@ -763,6 +763,8 @@ CONFIG_ACPI_HMAT=y CONFIG_HAVE_ACPI_APEI=y CONFIG_ACPI_APEI=y CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_GHES_ARMP_VENDOR_INFO=y +CONFIG_ACPI_APEI_RAS_CRITICAL=y # CONFIG_ACPI_APEI_GHES_NOTIFY_ALL_RAS_ERR is not set CONFIG_ACPI_APEI_PCIEAER=y CONFIG_ACPI_APEI_SEA=y -- 2.43.0
反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://atomgit.com/openeuler/kernel/merge_requests/21334 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/WPQ... FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://atomgit.com/openeuler/kernel/merge_requests/21334 Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/WPQ...
participants (2)
-
patchwork bot -
Wupeng Ma