aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-09-28 19:06:33 -0400
committerIngo Molnar <mingo@kernel.org>2016-09-30 07:53:04 -0400
commit05fb3c199bb09f5b85de56cc3ede194ac95c5e1f (patch)
treea77a4e4668b1f1458cf3afed17eeb3489fc24eb8
parente4aad64597d7a2455a541f904365b48d607916db (diff)
x86/boot: Initialize FPU and X86_FEATURE_ALWAYS even if we don't have CPUID
Otherwise arch_task_struct_size == 0 and we die. While we're at it, set X86_FEATURE_ALWAYS, too. Reported-by: David Saggiorato <david@saggiorato.net> Tested-by: David Saggiorato <david@saggiorato.net> Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Dave Hansen <dave@sr71.net> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: stable@vger.kernel.org Fixes: aaeb5c01c5b ("x86/fpu, sched: Introduce CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT and use it on x86") Link: http://lkml.kernel.org/r/8de723afbf0811071185039f9088733188b606c9.1475103911.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/kernel/cpu/common.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 809eda03c527..bcc9ccc220c9 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -804,21 +804,20 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)
804 identify_cpu_without_cpuid(c); 804 identify_cpu_without_cpuid(c);
805 805
806 /* cyrix could have cpuid enabled via c_identify()*/ 806 /* cyrix could have cpuid enabled via c_identify()*/
807 if (!have_cpuid_p()) 807 if (have_cpuid_p()) {
808 return; 808 cpu_detect(c);
809 get_cpu_vendor(c);
810 get_cpu_cap(c);
809 811
810 cpu_detect(c); 812 if (this_cpu->c_early_init)
811 get_cpu_vendor(c); 813 this_cpu->c_early_init(c);
812 get_cpu_cap(c);
813
814 if (this_cpu->c_early_init)
815 this_cpu->c_early_init(c);
816 814
817 c->cpu_index = 0; 815 c->cpu_index = 0;
818 filter_cpuid_features(c, false); 816 filter_cpuid_features(c, false);
819 817
820 if (this_cpu->c_bsp_init) 818 if (this_cpu->c_bsp_init)
821 this_cpu->c_bsp_init(c); 819 this_cpu->c_bsp_init(c);
820 }
822 821
823 setup_force_cpu_cap(X86_FEATURE_ALWAYS); 822 setup_force_cpu_cap(X86_FEATURE_ALWAYS);
824 fpu__init_system(c); 823 fpu__init_system(c);