aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/common.c6
-rw-r--r--arch/x86/kernel/setup_64.c6
-rw-r--r--include/asm-x86/cpufeature.h4
-rw-r--r--include/asm-x86/processor.h1
4 files changed, 17 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 4bd326d0322c..f0f29ddf33a2 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -57,6 +57,8 @@ DEFINE_PER_CPU(struct gdt_page, gdt_page) = { .gdt = {
57} }; 57} };
58EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); 58EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
59 59
60__u32 cleared_cpu_caps[NCAPINTS] __cpuinitdata;
61
60static int cachesize_override __cpuinitdata = -1; 62static int cachesize_override __cpuinitdata = -1;
61static int disable_x86_fxsr __cpuinitdata; 63static int disable_x86_fxsr __cpuinitdata;
62static int disable_x86_serial_nr __cpuinitdata = 1; 64static int disable_x86_serial_nr __cpuinitdata = 1;
@@ -497,6 +499,10 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
497 boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; 499 boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
498 } 500 }
499 501
502 /* Clear all flags overriden by options */
503 for (i = 0; i < NCAPINTS; i++)
504 c->x86_capability[i] ^= cleared_cpu_caps[i];
505
500 /* Init Machine Check Exception if available. */ 506 /* Init Machine Check Exception if available. */
501 mcheck_init(c); 507 mcheck_init(c);
502 508
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index 7edb43f0b279..df159520bbd2 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -80,6 +80,8 @@
80struct cpuinfo_x86 boot_cpu_data __read_mostly; 80struct cpuinfo_x86 boot_cpu_data __read_mostly;
81EXPORT_SYMBOL(boot_cpu_data); 81EXPORT_SYMBOL(boot_cpu_data);
82 82
83__u32 cleared_cpu_caps[NCAPINTS] __cpuinitdata;
84
83unsigned long mmu_cr4_features; 85unsigned long mmu_cr4_features;
84 86
85/* Boot loader ID as an integer, for the benefit of proc_dointvec */ 87/* Boot loader ID as an integer, for the benefit of proc_dointvec */
@@ -1013,6 +1015,10 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
1013 boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; 1015 boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
1014 } 1016 }
1015 1017
1018 /* Clear all flags overriden by options */
1019 for (i = 0; i < NCAPINTS; i++)
1020 c->x86_capability[i] ^= cleared_cpu_caps[i];
1021
1016#ifdef CONFIG_X86_MCE 1022#ifdef CONFIG_X86_MCE
1017 mcheck_init(c); 1023 mcheck_init(c);
1018#endif 1024#endif
diff --git a/include/asm-x86/cpufeature.h b/include/asm-x86/cpufeature.h
index 29727bf0e177..b8f53f869e1f 100644
--- a/include/asm-x86/cpufeature.h
+++ b/include/asm-x86/cpufeature.h
@@ -131,6 +131,10 @@
131 131
132#define set_cpu_cap(c, bit) set_bit(bit, (unsigned long *)((c)->x86_capability)) 132#define set_cpu_cap(c, bit) set_bit(bit, (unsigned long *)((c)->x86_capability))
133#define clear_cpu_cap(c, bit) clear_bit(bit, (unsigned long *)((c)->x86_capability)) 133#define clear_cpu_cap(c, bit) clear_bit(bit, (unsigned long *)((c)->x86_capability))
134#define setup_clear_cpu_cap(bit) do { \
135 clear_cpu_cap(&boot_cpu_data, bit); \
136 set_bit(bit, cleared_cpu_caps); \
137} while (0)
134 138
135#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) 139#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU)
136#define cpu_has_vme boot_cpu_has(X86_FEATURE_VME) 140#define cpu_has_vme boot_cpu_has(X86_FEATURE_VME)
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
index 81ecfed83e47..ab4d0c2a3f8f 100644
--- a/include/asm-x86/processor.h
+++ b/include/asm-x86/processor.h
@@ -118,6 +118,7 @@ struct cpuinfo_x86 {
118extern struct cpuinfo_x86 boot_cpu_data; 118extern struct cpuinfo_x86 boot_cpu_data;
119extern struct cpuinfo_x86 new_cpu_data; 119extern struct cpuinfo_x86 new_cpu_data;
120extern struct tss_struct doublefault_tss; 120extern struct tss_struct doublefault_tss;
121extern __u32 cleared_cpu_caps[NCAPINTS];
121 122
122#ifdef CONFIG_SMP 123#ifdef CONFIG_SMP
123DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); 124DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info);