x86: Replace ist_enter() with nmi_enter()
authorPeter Zijlstra <peterz@infradead.org>
Wed, 19 Feb 2020 08:46:43 +0000 (09:46 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 19 May 2020 13:51:20 +0000 (15:51 +0200)
commit0d00449c7a28a1514595630735df383dec606812
tree2983e126ef290b53793ddf46b6df670ad2f7d8a9
parent5567d11c21a1d508a91a8cb64a819783a0835d9f
x86: Replace ist_enter() with nmi_enter()

A few exceptions (like #DB and #BP) can happen at any location in the code,
this then means that tracers should treat events from these exceptions as
NMI-like. The interrupted context could be holding locks with interrupts
disabled for instance.

Similarly, #MC is an actual NMI-like exception.

All of them use ist_enter() which only concerns itself with RCU, but does
not do any of the other setup that NMIs need. This means things like:

printk()
  raw_spin_lock_irq(&logbuf_lock);
  <#DB/#BP/#MC>
     printk()
       raw_spin_lock_irq(&logbuf_lock);

are entirely possible (well, not really since printk tries hard to
play nice, but the concept stands).

So replace ist_enter() with nmi_enter(). Also observe that any nmi_enter()
caller must be both notrace and NOKPROBE, or in the noinstr text section.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Link: https://lkml.kernel.org/r/20200505134101.525508608@linutronix.de
arch/x86/include/asm/traps.h
arch/x86/kernel/cpu/mce/core.c
arch/x86/kernel/cpu/mce/p5.c
arch/x86/kernel/cpu/mce/winchip.c
arch/x86/kernel/traps.c