In x86_32, __flush_tlb_all() may have read cr4 shadow before the initialization of cr4 shadow in cpuinit().
Fix it by adding cr4_init_shadow() call ahead of __flush_tlb_all(). Signed-off-by: Zhenzhong Duan <zhenzhong.d...@oracle.com> Cc: Srinivas Reddy Eeda <srinivas.e...@oracle.com> --- arch/x86/kernel/smpboot.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index c2f7d1d..db9656e 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -221,6 +221,11 @@ static void notrace start_secondary(void *unused) #ifdef CONFIG_X86_32 /* switch away from the initial page table */ load_cr3(swapper_pg_dir); + /* + * Initialize the CR4 shadow before doing anything that could + * try to read it. + */ + cr4_init_shadow(); __flush_tlb_all(); #endif load_current_idt(); -- 1.7.3