x86/nmi: Remove irq_work from the long duration NMI handler
authorChangbin Du <changbin.du@gmail.com>
Sat, 11 Jan 2020 12:54:27 +0000 (20:54 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Feb 2020 07:36:45 +0000 (08:36 +0100)
commit73f48c1004d4e5052445b80e4a24c375431c989b
treea1a2247d28de7b706d9b2ef2f7aef2fcdb14a12a
parentb075c29e816c5520aac739c7f8c90fc71365271a
x86/nmi: Remove irq_work from the long duration NMI handler

[ Upstream commit 248ed51048c40d36728e70914e38bffd7821da57 ]

First, printk() is NMI-context safe now since the safe printk() has been
implemented and it already has an irq_work to make NMI-context safe.

Second, this NMI irq_work actually does not work if a NMI handler causes
panic by watchdog timeout. It has no chance to run in such case, while
the safe printk() will flush its per-cpu buffers before panicking.

While at it, repurpose the irq_work callback into a function which
concentrates the NMI duration checking and makes the code easier to
follow.

 [ bp: Massage. ]

Signed-off-by: Changbin Du <changbin.du@gmail.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200111125427.15662-1-changbin.du@gmail.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/include/asm/nmi.h
arch/x86/kernel/nmi.c