diff options
Diffstat (limited to 'include/asm-x86/system.h')
-rw-r--r-- | include/asm-x86/system.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/asm-x86/system.h b/include/asm-x86/system.h index 6c7d1fda499..39474f2957a 100644 --- a/include/asm-x86/system.h +++ b/include/asm-x86/system.h @@ -5,6 +5,7 @@ #include <asm/segment.h> #include <asm/cpufeature.h> #include <asm/cmpxchg.h> +#include <asm/nops.h> #include <linux/kernel.h> #include <linux/irqflags.h> @@ -395,5 +396,17 @@ void default_idle(void); #define set_mb(var, value) do { var = value; barrier(); } while (0) #endif +/* + * Stop RDTSC speculation. This is needed when you need to use RDTSC + * (or get_cycles or vread that possibly accesses the TSC) in a defined + * code region. + * + * (Could use an alternative three way for this if there was one.) + */ +static inline void rdtsc_barrier(void) +{ + alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC); + alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC); +} #endif |