aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2008-01-30 07:33:20 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:20 -0500
commit7d851c8d3db0f79b92c8b14361779ede8acd2488 (patch)
treee1588dcdb8c7db76478d484ece634453e2c3541c /arch
parentf95f2f7b9d7a3da79a833a8fd78a5154cc4b3107 (diff)
x86: add framework to disable CPUID bits on the command line
There are already various options to disable specific cpuid bits on the command line. They all use their own variable. Add a generic mask to make this easier in the future. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/cpu/common.c6
-rw-r--r--arch/x86/kernel/setup_64.c6
2 files changed, 12 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