summaryrefslogtreecommitdiff
path: root/arch/x86/include/asm
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2013-12-19 11:58:16 -0800
committerH. Peter Anvin <hpa@linux.intel.com>2013-12-19 11:58:16 -0800
commit7e98b71920464b8d15fa95c74366416cd3c88861 (patch)
treee33e2af9f6a1813490aa686619de72c67b159e81 /arch/x86/include/asm
parent16824255394f55adf31b9a96a9965d8c15bdac4c (diff)
downloadlwn-7e98b71920464b8d15fa95c74366416cd3c88861.tar.gz
lwn-7e98b71920464b8d15fa95c74366416cd3c88861.zip
x86, idle: Use static_cpu_has() for CLFLUSH workaround, add barriers
Use static_cpu_has() to conditionalize the CLFLUSH workaround, and add memory barriers around it since the documentation is explicit that CLFLUSH is only ordered with respect to MFENCE. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Len Brown <len.brown@intel.com> Link: http://lkml.kernel.org/r/CA%2B55aFzGxcML7j8CEvQPYzh0W81uVoAAVmGctMOUZ7CZ1yYd2A@mail.gmail.com
Diffstat (limited to 'arch/x86/include/asm')
-rw-r--r--arch/x86/include/asm/mwait.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/include/asm/mwait.h b/arch/x86/include/asm/mwait.h
index 361b02ef128c..19b71c439256 100644
--- a/arch/x86/include/asm/mwait.h
+++ b/arch/x86/include/asm/mwait.h
@@ -43,8 +43,11 @@ static inline void __mwait(unsigned long eax, unsigned long ecx)
static inline void mwait_idle_with_hints(unsigned long eax, unsigned long ecx)
{
if (!current_set_polling_and_test()) {
- if (this_cpu_has(X86_FEATURE_CLFLUSH_MONITOR))
+ if (static_cpu_has(X86_FEATURE_CLFLUSH_MONITOR)) {
+ mb();
clflush((void *)&current_thread_info()->flags);
+ mb();
+ }
__monitor((void *)&current_thread_info()->flags, 0, 0);
if (!need_resched())