diff options
author | Chunyu Hu <chuhu@redhat.com> | 2017-11-27 22:21:39 +0800 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-11-28 08:15:40 +0100 |
commit | 55d2d0ad2fb4325f615d1950486fbc5e6fba1769 (patch) | |
tree | 9f422bd397bd85dcde5e7b7ed332881d29f6c35a /arch/x86/kernel/smpboot.c | |
parent | 42b3a4cb5609de757f5445fcad18945ba9239a07 (diff) | |
download | linux-55d2d0ad2fb4325f615d1950486fbc5e6fba1769.tar.gz linux-55d2d0ad2fb4325f615d1950486fbc5e6fba1769.tar.bz2 linux-55d2d0ad2fb4325f615d1950486fbc5e6fba1769.zip |
x86/idt: Load idt early in start_secondary
On a secondary, idt is first loaded in cpu_init() with load_current_idt(),
i.e. no exceptions can be handled before that point.
The conversion of WARN() to use UD requires the IDT being loaded earlier as
any warning between start_secondary() and load_curren_idt() in cpu_init()
will result in an unhandled @UD exception and therefore fail the bringup of
the CPU.
Install the IDT handlers right in start_secondary() before calling cpu_init().
[ tglx: Massaged changelog ]
Fixes: 9a93848fe787 ("x86/debug: Implement __WARN() using UD0")
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Cc: peterz@infradead.org
Cc: bp@alien8.de
Cc: rostedt@goodmis.org
Cc: luto@kernel.org
Link: https://lkml.kernel.org/r/1511792499-4073-1-git-send-email-chuhu@redhat.com
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r-- | arch/x86/kernel/smpboot.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 3d01df7d7cf6..05a97d5fe298 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -237,7 +237,7 @@ static void notrace start_secondary(void *unused) load_cr3(swapper_pg_dir); __flush_tlb_all(); #endif - + load_current_idt(); cpu_init(); x86_cpuinit.early_percpu_clock_init(); preempt_disable(); |