diff options
Diffstat (limited to 'arch/x86/kernel/process.c')
| -rw-r--r-- | arch/x86/kernel/process.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index e68bb9e30864..6d12f7e37f8c 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
| @@ -180,6 +180,9 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx) | |||
| 180 | 180 | ||
| 181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); | 181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); |
| 182 | if (!need_resched()) { | 182 | if (!need_resched()) { |
| 183 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
| 184 | clflush((void *)¤t_thread_info()->flags); | ||
| 185 | |||
| 183 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 186 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 184 | smp_mb(); | 187 | smp_mb(); |
| 185 | if (!need_resched()) | 188 | if (!need_resched()) |
| @@ -194,6 +197,9 @@ static void mwait_idle(void) | |||
| 194 | struct power_trace it; | 197 | struct power_trace it; |
| 195 | if (!need_resched()) { | 198 | if (!need_resched()) { |
| 196 | trace_power_start(&it, POWER_CSTATE, 1); | 199 | trace_power_start(&it, POWER_CSTATE, 1); |
| 200 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
| 201 | clflush((void *)¤t_thread_info()->flags); | ||
| 202 | |||
| 197 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 203 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
| 198 | smp_mb(); | 204 | smp_mb(); |
| 199 | if (!need_resched()) | 205 | if (!need_resched()) |
