aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/process.c')
-rw-r--r--arch/x86/kernel/process.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index 071166a4ba8..7b60e390688 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -9,7 +9,7 @@
9#include <linux/pm.h> 9#include <linux/pm.h>
10#include <linux/clockchips.h> 10#include <linux/clockchips.h>
11#include <linux/random.h> 11#include <linux/random.h>
12#include <trace/power.h> 12#include <trace/events/power.h>
13#include <asm/system.h> 13#include <asm/system.h>
14#include <asm/apic.h> 14#include <asm/apic.h>
15#include <asm/syscalls.h> 15#include <asm/syscalls.h>
@@ -25,9 +25,6 @@ EXPORT_SYMBOL(idle_nomwait);
25 25
26struct kmem_cache *task_xstate_cachep; 26struct kmem_cache *task_xstate_cachep;
27 27
28DEFINE_TRACE(power_start);
29DEFINE_TRACE(power_end);
30
31int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) 28int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
32{ 29{
33 *dst = *src; 30 *dst = *src;
@@ -299,9 +296,7 @@ static inline int hlt_use_halt(void)
299void default_idle(void) 296void default_idle(void)
300{ 297{
301 if (hlt_use_halt()) { 298 if (hlt_use_halt()) {
302 struct power_trace it; 299 trace_power_start(POWER_CSTATE, 1);
303
304 trace_power_start(&it, POWER_CSTATE, 1);
305 current_thread_info()->status &= ~TS_POLLING; 300 current_thread_info()->status &= ~TS_POLLING;
306 /* 301 /*
307 * TS_POLLING-cleared state must be visible before we 302 * TS_POLLING-cleared state must be visible before we
@@ -314,7 +309,7 @@ void default_idle(void)
314 else 309 else
315 local_irq_enable(); 310 local_irq_enable();
316 current_thread_info()->status |= TS_POLLING; 311 current_thread_info()->status |= TS_POLLING;
317 trace_power_end(&it); 312 trace_power_end(0);
318 } else { 313 } else {
319 local_irq_enable(); 314 local_irq_enable();
320 /* loop is done by the caller */ 315 /* loop is done by the caller */
@@ -372,9 +367,7 @@ EXPORT_SYMBOL_GPL(cpu_idle_wait);
372 */ 367 */
373void mwait_idle_with_hints(unsigned long ax, unsigned long cx) 368void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
374{ 369{
375 struct power_trace it; 370 trace_power_start(POWER_CSTATE, (ax>>4)+1);
376
377 trace_power_start(&it, POWER_CSTATE, (ax>>4)+1);
378 if (!need_resched()) { 371 if (!need_resched()) {
379 if (cpu_has(&current_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) 372 if (cpu_has(&current_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
380 clflush((void *)&current_thread_info()->flags); 373 clflush((void *)&current_thread_info()->flags);
@@ -384,15 +377,14 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
384 if (!need_resched()) 377 if (!need_resched())
385 __mwait(ax, cx); 378 __mwait(ax, cx);
386 } 379 }
387 trace_power_end(&it); 380 trace_power_end(0);
388} 381}
389 382
390/* Default MONITOR/MWAIT with no hints, used for default C1 state */ 383/* Default MONITOR/MWAIT with no hints, used for default C1 state */
391static void mwait_idle(void) 384static void mwait_idle(void)
392{ 385{
393 struct power_trace it;
394 if (!need_resched()) { 386 if (!need_resched()) {
395 trace_power_start(&it, POWER_CSTATE, 1); 387 trace_power_start(POWER_CSTATE, 1);
396 if (cpu_has(&current_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) 388 if (cpu_has(&current_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
397 clflush((void *)&current_thread_info()->flags); 389 clflush((void *)&current_thread_info()->flags);
398 390
@@ -402,7 +394,7 @@ static void mwait_idle(void)
402 __sti_mwait(0, 0); 394 __sti_mwait(0, 0);
403 else 395 else
404 local_irq_enable(); 396 local_irq_enable();
405 trace_power_end(&it); 397 trace_power_end(0);
406 } else 398 } else
407 local_irq_enable(); 399 local_irq_enable();
408} 400}
@@ -414,13 +406,11 @@ static void mwait_idle(void)
414 */ 406 */
415static void poll_idle(void) 407static void poll_idle(void)
416{ 408{
417 struct power_trace it; 409 trace_power_start(POWER_CSTATE, 0);
418
419 trace_power_start(&it, POWER_CSTATE, 0);
420 local_irq_enable(); 410 local_irq_enable();
421 while (!need_resched()) 411 while (!need_resched())
422 cpu_relax(); 412 cpu_relax();
423 trace_power_end(&it); 413 trace_power_end(0);
424} 414}
425 415
426/* 416/*