diff options
| author | Robert Schöne <robert.schoene@tu-dresden.de> | 2010-06-14 07:37:20 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-06-18 05:35:10 -0400 |
| commit | c882e0feb937af4e5b991cbd1c81536f37053e86 (patch) | |
| tree | 9484ed7de5de761441b3e5128efadf4674dbbd1a /arch/x86 | |
| parent | 646b1db4956ba8bf748b835b5eba211133d91c2e (diff) | |
x86, perf: Add power_end event to process_*.c cpu_idle routine
Systems using the idle thread from process_32.c and process_64.c
do not generate power_end events which could be traced using
perf. This patch adds the event generation for such systems.
Signed-off-by: Robert Schoene <robert.schoene@tu-dresden.de>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <1276515440.5441.45.camel@localhost>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86')
| -rw-r--r-- | arch/x86/kernel/process_32.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/process_64.c | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 8d128783af47..96586c3cbbbf 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -57,6 +57,8 @@ | |||
| 57 | #include <asm/syscalls.h> | 57 | #include <asm/syscalls.h> |
| 58 | #include <asm/debugreg.h> | 58 | #include <asm/debugreg.h> |
| 59 | 59 | ||
| 60 | #include <trace/events/power.h> | ||
| 61 | |||
| 60 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); | 62 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); |
| 61 | 63 | ||
| 62 | /* | 64 | /* |
| @@ -111,6 +113,8 @@ void cpu_idle(void) | |||
| 111 | stop_critical_timings(); | 113 | stop_critical_timings(); |
| 112 | pm_idle(); | 114 | pm_idle(); |
| 113 | start_critical_timings(); | 115 | start_critical_timings(); |
| 116 | |||
| 117 | trace_power_end(smp_processor_id()); | ||
| 114 | } | 118 | } |
| 115 | tick_nohz_restart_sched_tick(); | 119 | tick_nohz_restart_sched_tick(); |
| 116 | preempt_enable_no_resched(); | 120 | preempt_enable_no_resched(); |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 3c2422a99f1f..3d9ea531ddd1 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
| @@ -51,6 +51,8 @@ | |||
| 51 | #include <asm/syscalls.h> | 51 | #include <asm/syscalls.h> |
| 52 | #include <asm/debugreg.h> | 52 | #include <asm/debugreg.h> |
| 53 | 53 | ||
| 54 | #include <trace/events/power.h> | ||
| 55 | |||
| 54 | asmlinkage extern void ret_from_fork(void); | 56 | asmlinkage extern void ret_from_fork(void); |
| 55 | 57 | ||
| 56 | DEFINE_PER_CPU(unsigned long, old_rsp); | 58 | DEFINE_PER_CPU(unsigned long, old_rsp); |
| @@ -138,6 +140,9 @@ void cpu_idle(void) | |||
| 138 | stop_critical_timings(); | 140 | stop_critical_timings(); |
| 139 | pm_idle(); | 141 | pm_idle(); |
| 140 | start_critical_timings(); | 142 | start_critical_timings(); |
| 143 | |||
| 144 | trace_power_end(smp_processor_id()); | ||
| 145 | |||
| 141 | /* In many cases the interrupt that ended idle | 146 | /* In many cases the interrupt that ended idle |
| 142 | has already called exit_idle. But some idle | 147 | has already called exit_idle. But some idle |
| 143 | loops can be woken up without interrupt. */ | 148 | loops can be woken up without interrupt. */ |
