From a30a4837c514c3e0513ccab0070238def0181198 Mon Sep 17 00:00:00 2001 From: Li Zhengyu Date: Fri, 29 Dec 2023 08:48:02 +0000 Subject: [PATCH] arm64: Add non nmi ipi backtrace support hulk inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I8PRY6?from=project-issue CVE: NA -------------------------------- Use non nmi ipi to support backtrace on arm64 with nmi unsupported. It has been tested on qemu. Signed-off-by: Li Zhengyu Reviewed-by: Liao Chang Reviewed-by: Wei Li Signed-off-by: Zheng Zengkai Signed-off-by: linruizhe --- arch/arm64/kernel/ipi_nmi.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kernel/ipi_nmi.c b/arch/arm64/kernel/ipi_nmi.c index 9249e8b100aa..2eeab4a0354e 100644 --- a/arch/arm64/kernel/ipi_nmi.c +++ b/arch/arm64/kernel/ipi_nmi.c @@ -33,12 +33,24 @@ void arm64_send_nmi(cpumask_t *mask) __ipi_send_mask(ipi_nmi_desc, mask); } +static void ipi_cpu_backtrace(void *info) +{ + __printk_safe_enter(); + nmi_cpu_backtrace(get_irq_regs()); + __printk_safe_exit(); +} + +static void arm64_send_ipi(cpumask_t *mask) +{ + smp_call_function_many(mask, ipi_cpu_backtrace, NULL, false); +} + bool arch_trigger_cpumask_backtrace(const cpumask_t *mask, int exclude_cpu) { if (!ipi_nmi_desc) - return false; - - nmi_trigger_cpumask_backtrace(mask, exclude_cpu, arm64_send_nmi); + nmi_trigger_cpumask_backtrace(mask, exclude_cpu, arm64_send_ipi); + else + nmi_trigger_cpumask_backtrace(mask, exclude_cpu, arm64_send_nmi); return true; } -- Gitee