diff options
author | Andy Lutomirski <luto@kernel.org> | 2016-09-28 19:06:33 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-09-30 07:53:04 -0400 |
commit | 05fb3c199bb09f5b85de56cc3ede194ac95c5e1f (patch) | |
tree | a77a4e4668b1f1458cf3afed17eeb3489fc24eb8 | |
parent | e4aad64597d7a2455a541f904365b48d607916db (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.c | 23 |
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); |