Commit 491a30c1 authored by Sumit Garg's avatar Sumit Garg Committed by Liao Chen
Browse files

nmi: backtrace: Allow runtime arch specific override

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8PLUM?from=project-issue
CVE: NA
Reference: https://lore.kernel.org/all/1604317487-14543-5-git-send-email-sumit.garg@linaro.org/



-------------------------------------------------

Add a boolean return to arch_trigger_cpumask_backtrace() to support a
use-case where a particular architecture detects at runtime if it supports
NMI backtrace or it would like to fallback to default implementation using
SMP cross-calls.

Currently such an architecture example is arm64 supporting pseudo NMIs
feature which is only available on platforms which have support for GICv3
or later version.

Signed-off-by: default avatarSumit Garg <sumit.garg@linaro.org>
Signed-off-by: default avatarWei Li <liwei391@huawei.com>
Reviewed-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
Signed-off-by: default avatarRuan Jinjie <ruanjinjie@huawei.com>
Signed-off-by: default avatarLiao Chen <liaochen4@huawei.com>
parent 9abfed35
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ void handle_IRQ(unsigned int, struct pt_regs *);
#ifdef CONFIG_SMP
#include <linux/cpumask.h>

extern void arch_trigger_cpumask_backtrace(const cpumask_t *mask,
extern bool arch_trigger_cpumask_backtrace(const cpumask_t *mask,
					   int exclude_cpu);
#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
#endif
+2 −1
Original line number Diff line number Diff line
@@ -846,7 +846,8 @@ static void raise_nmi(cpumask_t *mask)
	__ipi_send_mask(ipi_desc[IPI_CPU_BACKTRACE], mask);
}

void arch_trigger_cpumask_backtrace(const cpumask_t *mask, int exclude_cpu)
bool arch_trigger_cpumask_backtrace(const cpumask_t *mask, int exclude_cpu)
{
	nmi_trigger_cpumask_backtrace(mask, exclude_cpu, raise_nmi);
	return true;
}
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ obj-y := debug-monitors.o entry.o irq.o fpsimd.o \
			   cpufeature.o alternative.o cacheinfo.o		\
			   smp.o smp_spin_table.o topology.o smccc-call.o	\
			   syscall.o proton-pack.o idreg-override.o idle.o	\
			   patching.o
			   patching.o ipi_nmi.o

obj-$(CONFIG_AARCH32_EL0)		+= binfmt_elf32.o sys32.o signal32.o			\
					   sys_compat.o
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ extern int cp0_fdc_irq;

extern int get_c0_fdc_int(void);

void arch_trigger_cpumask_backtrace(const struct cpumask *mask,
bool arch_trigger_cpumask_backtrace(const struct cpumask *mask,
				    int exclude_cpu);
#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace

+2 −1
Original line number Diff line number Diff line
@@ -750,9 +750,10 @@ static void raise_backtrace(cpumask_t *mask)
	}
}

void arch_trigger_cpumask_backtrace(const cpumask_t *mask, int exclude_cpu)
bool arch_trigger_cpumask_backtrace(const cpumask_t *mask, int exclude_cpu)
{
	nmi_trigger_cpumask_backtrace(mask, exclude_cpu, raise_backtrace);
	return true;
}

int mips_get_process_fp_mode(struct task_struct *task)
Loading