xtensa: implement fake NMI
authorMax Filippov <jcmvbkbc@gmail.com>
Thu, 16 Jul 2015 07:37:31 +0000 (10:37 +0300)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 17 Aug 2015 04:33:39 +0000 (07:33 +0300)
commit38fef73c21d117cf992fb5ec6e30630e54e13f4f
treeca3aae4c2e29ee81c66dcc16eb835e0b8c4e631f
parent98e298329e7b391293da5097817437292c842dc9
xtensa: implement fake NMI

In case perf IRQ is the highest of the medium-level IRQs, and is alone
on its level, it may be treated as NMI:
- LOCKLEVEL is defined to be one level less than EXCM level,
- IRQ masking never lowers current IRQ level,
- new fake exception cause code, EXCCAUSE_MAPPED_NMI is assigned to that
  IRQ; new second level exception handler, do_nmi, assigned to it
  handles it as NMI,
- atomic operations in configurations without s32c1i still need to mask
  all interrupts.

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/include/asm/atomic.h
arch/xtensa/include/asm/cmpxchg.h
arch/xtensa/include/asm/irqflags.h
arch/xtensa/include/asm/processor.h
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/irq.c
arch/xtensa/kernel/perf_event.c
arch/xtensa/kernel/traps.c
arch/xtensa/kernel/vectors.S