Intel: hardirq/nmi: Allow nested nmi_enter()
commit 69ea03b56ed2c7189ccd0b5910ad39f3cad1df21 upstream Backport summary: Backport to kernel 5.4.49 to enhance MCA-R for copyin, backporting removes the changes to non-x86 architecture. Since there are already a number of sites (ARM64, PowerPC) that effectively nest nmi_enter(), make the primitive support this before adding even more. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Marc Zyngier <maz@kernel.org> Acked-by: Will Deacon <will@kernel.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Link: https://lkml.kernel.org/r/20200505134100.864179229@linutronix.de Signed-off-by: Youquan Song <youquan.song@intel.com> Signed-off-by: root <root@localhost.localdomain>
This commit is contained in:
parent
1089fe3845
commit
3456293869
|
|
@ -65,13 +65,16 @@ extern void irq_exit(void);
|
|||
#define arch_nmi_exit() do { } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* nmi_enter() can nest up to 15 times; see NMI_BITS.
|
||||
*/
|
||||
#define nmi_enter() \
|
||||
do { \
|
||||
arch_nmi_enter(); \
|
||||
printk_nmi_enter(); \
|
||||
lockdep_off(); \
|
||||
ftrace_nmi_enter(); \
|
||||
BUG_ON(in_nmi()); \
|
||||
BUG_ON(in_nmi() == NMI_MASK); \
|
||||
preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET); \
|
||||
rcu_nmi_enter(); \
|
||||
trace_hardirq_enter(); \
|
||||
|
|
|
|||
|
|
@ -26,13 +26,13 @@
|
|||
* PREEMPT_MASK: 0x000000ff
|
||||
* SOFTIRQ_MASK: 0x0000ff00
|
||||
* HARDIRQ_MASK: 0x000f0000
|
||||
* NMI_MASK: 0x00100000
|
||||
* NMI_MASK: 0x00f00000
|
||||
* PREEMPT_NEED_RESCHED: 0x80000000
|
||||
*/
|
||||
#define PREEMPT_BITS 8
|
||||
#define SOFTIRQ_BITS 8
|
||||
#define HARDIRQ_BITS 4
|
||||
#define NMI_BITS 1
|
||||
#define NMI_BITS 4
|
||||
|
||||
#define PREEMPT_SHIFT 0
|
||||
#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
|
||||
|
|
|
|||
Loading…
Reference in New Issue