Unverified Commit 6188d510 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!4147 arm64: Add CONFIG_IPI_AS_NMI to IPI as NMI feature

Merge Pull Request from: @ci-robot 
 
PR sync from: Liao Chen <liaochen4@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/L7HJ6GORPFJGJVRD3AN36XFJNZMPGNSH/ 
This patch adds CONFIG_IPI_AS_NMI to control the availability of
pseudo NMIs, which follows upstream commit 41ddf73f (arm64: Add
framework to turn IPI as NMI).

CONFIG_IPI_AS_NMI

depends on:
ARM64_PSEUDO_NMI=y

Liao Chen (1):
  arm64: Add CONFIG_IPI_AS_NMI to IPI as NMI feature


-- 
2.34.1
 
https://gitee.com/openeuler/kernel/issues/I8PLUM 
 
Link:https://gitee.com/openeuler/kernel/pulls/4147

 

Reviewed-by: default avatarXu Kuohai <xukuohai@huawei.com>
Reviewed-by: default avatarZucheng Zheng <zhengzucheng@huawei.com>
Reviewed-by: default avatarZhang Jianhua <chris.zjh@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parents 0d1041c8 4466c7bf
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -2262,9 +2262,19 @@ config ARM64_DEBUG_PRIORITY_MASKING
	  If unsure, say N
endif # ARM64_PSEUDO_NMI

config IPI_AS_NMI
	bool "Support ipi triggerred as pseudo nmi"
	depends on ARM64_PSEUDO_NMI
	default n
	help
	  This adds support to trigger ipi as pseudo nmi, which allows to have an IPI
	  leveraged to invoke NMI functions on other CPUs. Current prospective users
	  are NMI backtrace and KGDB CPUs round-up whose support is added via future
	  patches.

config NON_NMI_IPI_BACKTRACE
	bool "Support non nmi ipi backtrace"
	depends on ARM64_PSEUDO_NMI
	depends on IPI_AS_NMI
	default n
	help
	  This adds support for non nmi ipi backtrace, which allows hungtask_monitor
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@

#include <asm-generic/irq.h>

#ifdef CONFIG_SMP
#if defined(CONFIG_SMP) && defined(CONFIG_IPI_AS_NMI)
extern bool arch_trigger_cpumask_backtrace(const cpumask_t *mask,
					   int exclude_cpu);
#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
+2 −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 ipi_nmi.o
			   patching.o

obj-$(CONFIG_AARCH32_EL0)		+= binfmt_elf32.o sys32.o signal32.o			\
					   sys_compat.o
@@ -80,6 +80,7 @@ obj-y += vdso-wrap.o
obj-$(CONFIG_COMPAT_VDSO)		+= vdso32-wrap.o
obj-$(CONFIG_ARM64_ILP32)		+= vdso-ilp32/
obj-$(CONFIG_UNWIND_PATCH_PAC_INTO_SCS)	+= patch-scs.o
obj-$(CONFIG_IPI_AS_NMI)		+= ipi_nmi.o
CFLAGS_patch-scs.o			+= -mbranch-protection=none

# Force dependency (vdso*-wrap.S includes vdso.so through incbin)
+2 −0
Original line number Diff line number Diff line
@@ -358,6 +358,7 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
			*(u32 *)bpt->saved_instr);
}

#ifdef CONFIG_IPI_AS_NMI
void kgdb_roundup_cpus(void)
{
	struct cpumask mask;
@@ -374,3 +375,4 @@ void kgdb_roundup_cpus(void)

	arm64_send_nmi(&mask);
}
#endif
+6 −0
Original line number Diff line number Diff line
@@ -937,7 +937,9 @@ static void ipi_setup(int cpu)
	for (i = 0; i < nr_ipi; i++)
		enable_percpu_irq(ipi_irq_base + i, 0);

#ifdef CONFIG_IPI_AS_NMI
	dynamic_ipi_setup(cpu);
#endif
}

#ifdef CONFIG_HOTPLUG_CPU
@@ -951,7 +953,9 @@ static void ipi_teardown(int cpu)
	for (i = 0; i < nr_ipi; i++)
		disable_percpu_irq(ipi_irq_base + i);

#ifdef CONFIG_IPI_AS_NMI
	dynamic_ipi_teardown(cpu);
#endif
}
#endif

@@ -973,8 +977,10 @@ void __init set_smp_ipi_range(int ipi_base, int n)
		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
	}

#ifdef CONFIG_IPI_AS_NMI
	if (n > nr_ipi)
		set_smp_dynamic_ipi(ipi_base + nr_ipi);
#endif

	ipi_irq_base = ipi_base;

Loading