diff options
| author | Ross Zwisler <ross.zwisler@linux.intel.com> | 2014-02-26 14:06:49 -0500 |
|---|---|---|
| committer | H. Peter Anvin <hpa@linux.intel.com> | 2014-02-27 11:23:28 -0500 |
| commit | 171699f7630c92d0a928f83e5fb3aeabe35398c0 (patch) | |
| tree | eab1cdc0b44666d92f391d345b5f2d668e4138d0 | |
| parent | c2bc11f10a39527cd1bb252097b5525664560956 (diff) | |
x86: Add support for the clflushopt instruction
Add support for the new clflushopt instruction. This instruction was
announced in the document "Intel Architecture Instruction Set Extensions
Programming Reference" with Ref # 319433-018.
http://download-software.intel.com/sites/default/files/managed/50/1a/319433-018.pdf
[ hpa: changed the feature flag to simply X86_FEATURE_CLFLUSHOPT - if
that is what we want to report in /proc/cpuinfo anyway... ]
Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Link: http://lkml.kernel.org/r/1393441612-19729-2-git-send-email-ross.zwisler@linux.intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
| -rw-r--r-- | arch/x86/include/asm/cpufeature.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/special_insns.h | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index 5f1296872aed..bc507d7640f8 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
| @@ -221,6 +221,7 @@ | |||
| 221 | #define X86_FEATURE_RDSEED (9*32+18) /* The RDSEED instruction */ | 221 | #define X86_FEATURE_RDSEED (9*32+18) /* The RDSEED instruction */ |
| 222 | #define X86_FEATURE_ADX (9*32+19) /* The ADCX and ADOX instructions */ | 222 | #define X86_FEATURE_ADX (9*32+19) /* The ADCX and ADOX instructions */ |
| 223 | #define X86_FEATURE_SMAP (9*32+20) /* Supervisor Mode Access Prevention */ | 223 | #define X86_FEATURE_SMAP (9*32+20) /* Supervisor Mode Access Prevention */ |
| 224 | #define X86_FEATURE_CLFLUSHOPT (9*32+23) /* CLFLUSHOPT instruction */ | ||
| 224 | #define X86_FEATURE_AVX512PF (9*32+26) /* AVX-512 Prefetch */ | 225 | #define X86_FEATURE_AVX512PF (9*32+26) /* AVX-512 Prefetch */ |
| 225 | #define X86_FEATURE_AVX512ER (9*32+27) /* AVX-512 Exponential and Reciprocal */ | 226 | #define X86_FEATURE_AVX512ER (9*32+27) /* AVX-512 Exponential and Reciprocal */ |
| 226 | #define X86_FEATURE_AVX512CD (9*32+28) /* AVX-512 Conflict Detection */ | 227 | #define X86_FEATURE_AVX512CD (9*32+28) /* AVX-512 Conflict Detection */ |
diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h index 645cad2c95ff..e820c080a4e9 100644 --- a/arch/x86/include/asm/special_insns.h +++ b/arch/x86/include/asm/special_insns.h | |||
| @@ -191,6 +191,14 @@ static inline void clflush(volatile void *__p) | |||
| 191 | asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p)); | 191 | asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p)); |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | static inline void clflushopt(volatile void *__p) | ||
| 195 | { | ||
| 196 | alternative_io(".byte " __stringify(NOP_DS_PREFIX) "; clflush %P0", | ||
| 197 | ".byte 0x66; clflush %P0", | ||
| 198 | X86_FEATURE_CLFLUSHOPT, | ||
| 199 | "+m" (*(volatile char __force *)__p)); | ||
| 200 | } | ||
| 201 | |||
| 194 | #define nop() asm volatile ("nop") | 202 | #define nop() asm volatile ("nop") |
| 195 | 203 | ||
| 196 | 204 | ||
