aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Hansen <dave.hansen@linux.intel.com>2014-09-11 17:15:24 -0400
committerH. Peter Anvin <hpa@linux.intel.com>2014-09-11 17:30:17 -0400
commit9298b815efe500b272e4084ed05eeae7a92b5340 (patch)
tree7ea33c7d7576125749453b793ccb2143140d14a8
parent381aa07a9b4e1f82969203e9e4863da2a157781d (diff)
x86: Add more disabled features
The original motivation for these patches was for an Intel CPU feature called MPX. The patch to add a disabled feature for it will go in with the other parts of the support. But, in the meantime, there are a few other features than MPX that we can make assumptions about at compile-time based on compile options. Add them to disabled-features.h and check them with cpu_feature_enabled(). Note that this gets rid of the last things that needed an #ifdef CONFIG_X86_64 in cpufeature.h. Yay! Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Link: http://lkml.kernel.org/r/20140911211524.C0EC332A@viggo.jf.intel.com Acked-by: Borislav Petkov <bp@suse.de> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r--arch/x86/include/asm/cpufeature.h20
-rw-r--r--arch/x86/include/asm/disabled-features.h16
-rw-r--r--arch/x86/kernel/cpu/common.c2
-rw-r--r--arch/x86/kernel/cpu/mtrr/main.c6
4 files changed, 18 insertions, 26 deletions
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index 1492041b8a68..42db503b61fb 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -324,7 +324,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
324} while (0) 324} while (0)
325 325
326#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) 326#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU)
327#define cpu_has_vme boot_cpu_has(X86_FEATURE_VME)
328#define cpu_has_de boot_cpu_has(X86_FEATURE_DE) 327#define cpu_has_de boot_cpu_has(X86_FEATURE_DE)
329#define cpu_has_pse boot_cpu_has(X86_FEATURE_PSE) 328#define cpu_has_pse boot_cpu_has(X86_FEATURE_PSE)
330#define cpu_has_tsc boot_cpu_has(X86_FEATURE_TSC) 329#define cpu_has_tsc boot_cpu_has(X86_FEATURE_TSC)
@@ -343,9 +342,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
343#define cpu_has_avx2 boot_cpu_has(X86_FEATURE_AVX2) 342#define cpu_has_avx2 boot_cpu_has(X86_FEATURE_AVX2)
344#define cpu_has_ht boot_cpu_has(X86_FEATURE_HT) 343#define cpu_has_ht boot_cpu_has(X86_FEATURE_HT)
345#define cpu_has_nx boot_cpu_has(X86_FEATURE_NX) 344#define cpu_has_nx boot_cpu_has(X86_FEATURE_NX)
346#define cpu_has_k6_mtrr boot_cpu_has(X86_FEATURE_K6_MTRR)
347#define cpu_has_cyrix_arr boot_cpu_has(X86_FEATURE_CYRIX_ARR)
348#define cpu_has_centaur_mcr boot_cpu_has(X86_FEATURE_CENTAUR_MCR)
349#define cpu_has_xstore boot_cpu_has(X86_FEATURE_XSTORE) 345#define cpu_has_xstore boot_cpu_has(X86_FEATURE_XSTORE)
350#define cpu_has_xstore_enabled boot_cpu_has(X86_FEATURE_XSTORE_EN) 346#define cpu_has_xstore_enabled boot_cpu_has(X86_FEATURE_XSTORE_EN)
351#define cpu_has_xcrypt boot_cpu_has(X86_FEATURE_XCRYPT) 347#define cpu_has_xcrypt boot_cpu_has(X86_FEATURE_XCRYPT)
@@ -380,22 +376,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
380#define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) 376#define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU)
381#define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT) 377#define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT)
382 378
383#ifdef CONFIG_X86_64
384
385#undef cpu_has_vme
386#define cpu_has_vme 0
387
388#undef cpu_has_k6_mtrr
389#define cpu_has_k6_mtrr 0
390
391#undef cpu_has_cyrix_arr
392#define cpu_has_cyrix_arr 0
393
394#undef cpu_has_centaur_mcr
395#define cpu_has_centaur_mcr 0
396
397#endif /* CONFIG_X86_64 */
398
399#if __GNUC__ >= 4 379#if __GNUC__ >= 4
400extern void warn_pre_alternatives(void); 380extern void warn_pre_alternatives(void);
401extern bool __static_cpu_has_safe(u16 bit); 381extern bool __static_cpu_has_safe(u16 bit);
diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h
index 1a9955dbf0a0..97534a7d38e3 100644
--- a/arch/x86/include/asm/disabled-features.h
+++ b/arch/x86/include/asm/disabled-features.h
@@ -10,13 +10,25 @@
10 * cpu_feature_enabled(). 10 * cpu_feature_enabled().
11 */ 11 */
12 12
13#ifdef CONFIG_X86_64
14# define DISABLE_VME (1<<(X86_FEATURE_VME & 31))
15# define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))
16# define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))
17# define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31))
18#else
19# define DISABLE_VME 0
20# define DISABLE_K6_MTRR 0
21# define DISABLE_CYRIX_ARR 0
22# define DISABLE_CENTAUR_MCR 0
23#endif /* CONFIG_X86_64 */
24
13/* 25/*
14 * Make sure to add features to the correct mask 26 * Make sure to add features to the correct mask
15 */ 27 */
16#define DISABLED_MASK0 0 28#define DISABLED_MASK0 (DISABLE_VME)
17#define DISABLED_MASK1 0 29#define DISABLED_MASK1 0
18#define DISABLED_MASK2 0 30#define DISABLED_MASK2 0
19#define DISABLED_MASK3 0 31#define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
20#define DISABLED_MASK4 0 32#define DISABLED_MASK4 0
21#define DISABLED_MASK5 0 33#define DISABLED_MASK5 0
22#define DISABLED_MASK6 0 34#define DISABLED_MASK6 0
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index e4ab2b42bd6f..724d221107eb 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1391,7 +1391,7 @@ void cpu_init(void)
1391 1391
1392 printk(KERN_INFO "Initializing CPU#%d\n", cpu); 1392 printk(KERN_INFO "Initializing CPU#%d\n", cpu);
1393 1393
1394 if (cpu_has_vme || cpu_has_tsc || cpu_has_de) 1394 if (cpu_feature_enabled(X86_FEATURE_VME) || cpu_has_tsc || cpu_has_de)
1395 clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); 1395 clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);
1396 1396
1397 load_current_idt(); 1397 load_current_idt();
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
index f961de9964c7..ea5f363a1948 100644
--- a/arch/x86/kernel/cpu/mtrr/main.c
+++ b/arch/x86/kernel/cpu/mtrr/main.c
@@ -707,7 +707,7 @@ void __init mtrr_bp_init(void)
707 } else { 707 } else {
708 switch (boot_cpu_data.x86_vendor) { 708 switch (boot_cpu_data.x86_vendor) {
709 case X86_VENDOR_AMD: 709 case X86_VENDOR_AMD:
710 if (cpu_has_k6_mtrr) { 710 if (cpu_feature_enabled(X86_FEATURE_K6_MTRR)) {
711 /* Pre-Athlon (K6) AMD CPU MTRRs */ 711 /* Pre-Athlon (K6) AMD CPU MTRRs */
712 mtrr_if = mtrr_ops[X86_VENDOR_AMD]; 712 mtrr_if = mtrr_ops[X86_VENDOR_AMD];
713 size_or_mask = SIZE_OR_MASK_BITS(32); 713 size_or_mask = SIZE_OR_MASK_BITS(32);
@@ -715,14 +715,14 @@ void __init mtrr_bp_init(void)
715 } 715 }
716 break; 716 break;
717 case X86_VENDOR_CENTAUR: 717 case X86_VENDOR_CENTAUR:
718 if (cpu_has_centaur_mcr) { 718 if (cpu_feature_enabled(X86_FEATURE_CENTAUR_MCR)) {
719 mtrr_if = mtrr_ops[X86_VENDOR_CENTAUR]; 719 mtrr_if = mtrr_ops[X86_VENDOR_CENTAUR];
720 size_or_mask = SIZE_OR_MASK_BITS(32); 720 size_or_mask = SIZE_OR_MASK_BITS(32);
721 size_and_mask = 0; 721 size_and_mask = 0;
722 } 722 }
723 break; 723 break;
724 case X86_VENDOR_CYRIX: 724 case X86_VENDOR_CYRIX:
725 if (cpu_has_cyrix_arr) { 725 if (cpu_feature_enabled(X86_FEATURE_CYRIX_ARR)) {
726 mtrr_if = mtrr_ops[X86_VENDOR_CYRIX]; 726 mtrr_if = mtrr_ops[X86_VENDOR_CYRIX];
727 size_or_mask = SIZE_OR_MASK_BITS(32); 727 size_or_mask = SIZE_OR_MASK_BITS(32);
728 size_and_mask = 0; 728 size_and_mask = 0;