aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw@amazon.co.uk>2018-01-25 11:14:09 -0500
committerThomas Gleixner <tglx@linutronix.de>2018-01-26 09:53:16 -0500
commit95ca0ee8636059ea2800dfbac9ecac6212d6b38f (patch)
treeec91e299bf08e4541ceccd19ef64b44cd8350989
parentcaf7501a1b4ec964190f31f9c3f163de252273b8 (diff)
x86/cpufeatures: Add CPUID_7_EDX CPUID leaf
This is a pure feature bits leaf. There are two AVX512 feature bits in it already which were handled as scattered bits, and three more from this leaf are going to be added for speculation control features. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Borislav Petkov <bp@suse.de> Cc: gnomes@lxorguk.ukuu.org.uk Cc: ak@linux.intel.com Cc: ashok.raj@intel.com Cc: dave.hansen@intel.com Cc: karahmed@amazon.de Cc: arjan@linux.intel.com Cc: torvalds@linux-foundation.org Cc: peterz@infradead.org Cc: bp@alien8.de Cc: pbonzini@redhat.com Cc: tim.c.chen@linux.intel.com Cc: gregkh@linux-foundation.org Link: https://lkml.kernel.org/r/1516896855-7642-2-git-send-email-dwmw@amazon.co.uk
-rw-r--r--arch/x86/include/asm/cpufeature.h7
-rw-r--r--arch/x86/include/asm/cpufeatures.h8
-rw-r--r--arch/x86/include/asm/disabled-features.h3
-rw-r--r--arch/x86/include/asm/required-features.h3
-rw-r--r--arch/x86/kernel/cpu/common.c1
-rw-r--r--arch/x86/kernel/cpu/scattered.c2
6 files changed, 15 insertions, 9 deletions
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
index ea9a7dde62e5..70eddb3922ff 100644
--- a/arch/x86/include/asm/cpufeature.h
+++ b/arch/x86/include/asm/cpufeature.h
@@ -29,6 +29,7 @@ enum cpuid_leafs
29 CPUID_8000_000A_EDX, 29 CPUID_8000_000A_EDX,
30 CPUID_7_ECX, 30 CPUID_7_ECX,
31 CPUID_8000_0007_EBX, 31 CPUID_8000_0007_EBX,
32 CPUID_7_EDX,
32}; 33};
33 34
34#ifdef CONFIG_X86_FEATURE_NAMES 35#ifdef CONFIG_X86_FEATURE_NAMES
@@ -79,8 +80,9 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
79 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 15, feature_bit) || \ 80 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 15, feature_bit) || \
80 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 16, feature_bit) || \ 81 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 16, feature_bit) || \
81 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 17, feature_bit) || \ 82 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 17, feature_bit) || \
83 CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 18, feature_bit) || \
82 REQUIRED_MASK_CHECK || \ 84 REQUIRED_MASK_CHECK || \
83 BUILD_BUG_ON_ZERO(NCAPINTS != 18)) 85 BUILD_BUG_ON_ZERO(NCAPINTS != 19))
84 86
85#define DISABLED_MASK_BIT_SET(feature_bit) \ 87#define DISABLED_MASK_BIT_SET(feature_bit) \
86 ( CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 0, feature_bit) || \ 88 ( CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 0, feature_bit) || \
@@ -101,8 +103,9 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
101 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 15, feature_bit) || \ 103 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 15, feature_bit) || \
102 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 16, feature_bit) || \ 104 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 16, feature_bit) || \
103 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 17, feature_bit) || \ 105 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 17, feature_bit) || \
106 CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 18, feature_bit) || \
104 DISABLED_MASK_CHECK || \ 107 DISABLED_MASK_CHECK || \
105 BUILD_BUG_ON_ZERO(NCAPINTS != 18)) 108 BUILD_BUG_ON_ZERO(NCAPINTS != 19))
106 109
107#define cpu_has(c, bit) \ 110#define cpu_has(c, bit) \
108 (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \ 111 (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
index 25b9375c1484..7b25cf30d25d 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -13,7 +13,7 @@
13/* 13/*
14 * Defines x86 CPU feature bits 14 * Defines x86 CPU feature bits
15 */ 15 */
16#define NCAPINTS 18 /* N 32-bit words worth of info */ 16#define NCAPINTS 19 /* N 32-bit words worth of info */
17#define NBUGINTS 1 /* N 32-bit bug flags */ 17#define NBUGINTS 1 /* N 32-bit bug flags */
18 18
19/* 19/*
@@ -206,8 +206,6 @@
206#define X86_FEATURE_RETPOLINE ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */ 206#define X86_FEATURE_RETPOLINE ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */
207#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* AMD Retpoline mitigation for Spectre variant 2 */ 207#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* AMD Retpoline mitigation for Spectre variant 2 */
208#define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory Number */ 208#define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory Number */
209#define X86_FEATURE_AVX512_4VNNIW ( 7*32+16) /* AVX-512 Neural Network Instructions */
210#define X86_FEATURE_AVX512_4FMAPS ( 7*32+17) /* AVX-512 Multiply Accumulation Single precision */
211 209
212#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ 210#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */
213#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* Fill RSB on context switches */ 211#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* Fill RSB on context switches */
@@ -319,6 +317,10 @@
319#define X86_FEATURE_SUCCOR (17*32+ 1) /* Uncorrectable error containment and recovery */ 317#define X86_FEATURE_SUCCOR (17*32+ 1) /* Uncorrectable error containment and recovery */
320#define X86_FEATURE_SMCA (17*32+ 3) /* Scalable MCA */ 318#define X86_FEATURE_SMCA (17*32+ 3) /* Scalable MCA */
321 319
320/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */
321#define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */
322#define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
323
322/* 324/*
323 * BUG word(s) 325 * BUG word(s)
324 */ 326 */
diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h
index e428e16dd822..c6a3af198294 100644
--- a/arch/x86/include/asm/disabled-features.h
+++ b/arch/x86/include/asm/disabled-features.h
@@ -71,6 +71,7 @@
71#define DISABLED_MASK15 0 71#define DISABLED_MASK15 0
72#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57) 72#define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57)
73#define DISABLED_MASK17 0 73#define DISABLED_MASK17 0
74#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) 74#define DISABLED_MASK18 0
75#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19)
75 76
76#endif /* _ASM_X86_DISABLED_FEATURES_H */ 77#endif /* _ASM_X86_DISABLED_FEATURES_H */
diff --git a/arch/x86/include/asm/required-features.h b/arch/x86/include/asm/required-features.h
index d91ba04dd007..fb3a6de7440b 100644
--- a/arch/x86/include/asm/required-features.h
+++ b/arch/x86/include/asm/required-features.h
@@ -106,6 +106,7 @@
106#define REQUIRED_MASK15 0 106#define REQUIRED_MASK15 0
107#define REQUIRED_MASK16 (NEED_LA57) 107#define REQUIRED_MASK16 (NEED_LA57)
108#define REQUIRED_MASK17 0 108#define REQUIRED_MASK17 0
109#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) 109#define REQUIRED_MASK18 0
110#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19)
110 111
111#endif /* _ASM_X86_REQUIRED_FEATURES_H */ 112#endif /* _ASM_X86_REQUIRED_FEATURES_H */
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 372ba3fb400f..e5d66e93ed81 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -745,6 +745,7 @@ void get_cpu_cap(struct cpuinfo_x86 *c)
745 cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx); 745 cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx);
746 c->x86_capability[CPUID_7_0_EBX] = ebx; 746 c->x86_capability[CPUID_7_0_EBX] = ebx;
747 c->x86_capability[CPUID_7_ECX] = ecx; 747 c->x86_capability[CPUID_7_ECX] = ecx;
748 c->x86_capability[CPUID_7_EDX] = edx;
748 } 749 }
749 750
750 /* Extended state features: level 0x0000000d */ 751 /* Extended state features: level 0x0000000d */
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
index d0e69769abfd..df11f5d604be 100644
--- a/arch/x86/kernel/cpu/scattered.c
+++ b/arch/x86/kernel/cpu/scattered.c
@@ -21,8 +21,6 @@ struct cpuid_bit {
21static const struct cpuid_bit cpuid_bits[] = { 21static const struct cpuid_bit cpuid_bits[] = {
22 { X86_FEATURE_APERFMPERF, CPUID_ECX, 0, 0x00000006, 0 }, 22 { X86_FEATURE_APERFMPERF, CPUID_ECX, 0, 0x00000006, 0 },
23 { X86_FEATURE_EPB, CPUID_ECX, 3, 0x00000006, 0 }, 23 { X86_FEATURE_EPB, CPUID_ECX, 3, 0x00000006, 0 },
24 { X86_FEATURE_AVX512_4VNNIW, CPUID_EDX, 2, 0x00000007, 0 },
25 { X86_FEATURE_AVX512_4FMAPS, CPUID_EDX, 3, 0x00000007, 0 },
26 { X86_FEATURE_CAT_L3, CPUID_EBX, 1, 0x00000010, 0 }, 24 { X86_FEATURE_CAT_L3, CPUID_EBX, 1, 0x00000010, 0 },
27 { X86_FEATURE_CAT_L2, CPUID_EBX, 2, 0x00000010, 0 }, 25 { X86_FEATURE_CAT_L2, CPUID_EBX, 2, 0x00000010, 0 },
28 { X86_FEATURE_CDP_L3, CPUID_ECX, 2, 0x00000010, 1 }, 26 { X86_FEATURE_CDP_L3, CPUID_ECX, 2, 0x00000010, 1 },