Discussion:
[Xen-changelog] [xen stable-4.8] x86/boot: enable NMIs after traps init
p***@xen.org
2018-11-14 13:33:53 UTC
Permalink
commit 49f74ea609a61004c638e6ffc527bff769ce98ef
Author: Sergey Dyasli <***@citrix.com>
AuthorDate: Mon Nov 5 16:16:19 2018 +0100
Commit: Jan Beulich <***@suse.com>
CommitDate: Mon Nov 5 16:16:19 2018 +0100

x86/boot: enable NMIs after traps init

In certain scenarios, NMIs might be disabled during Xen boot process.
Such situation will cause alternative_instructions() to:

panic("Timed out waiting for alternatives self-NMI to hit\n");

This bug was originally seen when using Tboot to boot Xen 4.11

To prevent this from happening, enable NMIs during cpu_init() and
during __start_xen() for BSP.

Signed-off-by: Sergey Dyasli <***@citrix.com>
Reviewed-by: Andrew Cooper <***@citrix.com>
master commit: 072e054359a4d4a4f6c3fa09585667472c4f0f1d
master date: 2018-10-23 12:33:54 +0100
---
xen/arch/x86/cpu/common.c | 3 +++
xen/arch/x86/setup.c | 3 +++
2 files changed, 6 insertions(+)

diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
index 81487cb2e6..3fbb7d8ec3 100644
--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -748,6 +748,9 @@ void cpu_init(void)
#define CD(register) asm volatile ( "mov %0,%%db" #register : : "r"(0UL) );
CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7);
#undef CD
+
+ /* Enable NMIs. Our loader (e.g. Tboot) may have left them disabled. */
+ enable_nmis();
}

void cpu_uninit(unsigned int cpu)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 1050127c25..550435cf33 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -683,6 +683,9 @@ void __init noreturn __start_xen(unsigned long mbi_p)

/* Full exception support from here on in. */

+ /* Enable NMIs. Our loader (e.g. Tboot) may have left them disabled. */
+ enable_nmis();
+
loader = (mbi->flags & MBI_LOADERNAME)
? (char *)__va(mbi->boot_loader_name) : "unknown";

--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.8

Loading...