| From 8bf1ebca215c262e48c15a4a15f175991776f57f Mon Sep 17 00:00:00 2001 |
| From: Andy Lutomirski <luto@kernel.org> |
| Date: Wed, 18 Jan 2017 11:15:38 -0800 |
| Subject: x86/cpu: Factor out application of forced CPU caps |
| |
| From: Andy Lutomirski <luto@kernel.org> |
| |
| commit 8bf1ebca215c262e48c15a4a15f175991776f57f upstream. |
| |
| There are multiple call sites that apply forced CPU caps. Factor |
| them into a helper. |
| |
| Signed-off-by: Andy Lutomirski <luto@kernel.org> |
| Reviewed-by: Borislav Petkov <bp@suse.de> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Brian Gerst <brgerst@gmail.com> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: Fenghua Yu <fenghua.yu@intel.com> |
| Cc: H. Peter Anvin <hpa@zytor.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Matthew Whitehead <tedheadster@gmail.com> |
| Cc: Oleg Nesterov <oleg@redhat.com> |
| Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Rik van Riel <riel@redhat.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Yu-cheng Yu <yu-cheng.yu@intel.com> |
| Link: http://lkml.kernel.org/r/623ff7555488122143e4417de09b18be2085ad06.1484705016.git.luto@kernel.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/cpu/common.c | 20 ++++++++++++-------- |
| 1 file changed, 12 insertions(+), 8 deletions(-) |
| |
| --- a/arch/x86/kernel/cpu/common.c |
| +++ b/arch/x86/kernel/cpu/common.c |
| @@ -706,6 +706,16 @@ void cpu_detect(struct cpuinfo_x86 *c) |
| } |
| } |
| |
| +static void apply_forced_caps(struct cpuinfo_x86 *c) |
| +{ |
| + int i; |
| + |
| + for (i = 0; i < NCAPINTS; i++) { |
| + c->x86_capability[i] &= ~cpu_caps_cleared[i]; |
| + c->x86_capability[i] |= cpu_caps_set[i]; |
| + } |
| +} |
| + |
| void get_cpu_cap(struct cpuinfo_x86 *c) |
| { |
| u32 eax, ebx, ecx, edx; |
| @@ -1086,10 +1096,7 @@ static void identify_cpu(struct cpuinfo_ |
| this_cpu->c_identify(c); |
| |
| /* Clear/Set all flags overridden by options, after probe */ |
| - for (i = 0; i < NCAPINTS; i++) { |
| - c->x86_capability[i] &= ~cpu_caps_cleared[i]; |
| - c->x86_capability[i] |= cpu_caps_set[i]; |
| - } |
| + apply_forced_caps(c); |
| |
| #ifdef CONFIG_X86_64 |
| c->apicid = apic->phys_pkg_id(c->initial_apicid, 0); |
| @@ -1151,10 +1158,7 @@ static void identify_cpu(struct cpuinfo_ |
| * Clear/Set all flags overridden by options, need do it |
| * before following smp all cpus cap AND. |
| */ |
| - for (i = 0; i < NCAPINTS; i++) { |
| - c->x86_capability[i] &= ~cpu_caps_cleared[i]; |
| - c->x86_capability[i] |= cpu_caps_set[i]; |
| - } |
| + apply_forced_caps(c); |
| |
| /* |
| * On SMP, boot_cpu_data holds the common feature set between |