diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-06-22 08:34:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-06-25 15:39:05 -0400 |
commit | 7f8b4e4e0988dadfd22330fd147ad2453e19f510 (patch) | |
tree | b57c6b0fbfd3718dbc6f27bd7f422bb276c11469 | |
parent | 41f95331b972a039f519ae0c70f051b7121f7346 (diff) |
perf_counter: Add scale information to the mmap control page
Add the needed time scale to the self-profile mmap information.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | include/linux/perf_counter.h | 4 | ||||
-rw-r--r-- | kernel/perf_counter.c | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index 489d5cbfbcca..bcbf1c43ed42 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -232,12 +232,14 @@ struct perf_counter_mmap_page { | |||
232 | __u32 lock; /* seqlock for synchronization */ | 232 | __u32 lock; /* seqlock for synchronization */ |
233 | __u32 index; /* hardware counter identifier */ | 233 | __u32 index; /* hardware counter identifier */ |
234 | __s64 offset; /* add to hardware counter value */ | 234 | __s64 offset; /* add to hardware counter value */ |
235 | __u64 time_enabled; /* time counter active */ | ||
236 | __u64 time_running; /* time counter on cpu */ | ||
235 | 237 | ||
236 | /* | 238 | /* |
237 | * Hole for extension of the self monitor capabilities | 239 | * Hole for extension of the self monitor capabilities |
238 | */ | 240 | */ |
239 | 241 | ||
240 | __u64 __reserved[125]; /* align to 1k */ | 242 | __u64 __reserved[123]; /* align to 1k */ |
241 | 243 | ||
242 | /* | 244 | /* |
243 | * Control data for the mmap() data buffer. | 245 | * Control data for the mmap() data buffer. |
diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c index c2b19c111718..23614adab475 100644 --- a/kernel/perf_counter.c +++ b/kernel/perf_counter.c | |||
@@ -1782,6 +1782,12 @@ void perf_counter_update_userpage(struct perf_counter *counter) | |||
1782 | if (counter->state == PERF_COUNTER_STATE_ACTIVE) | 1782 | if (counter->state == PERF_COUNTER_STATE_ACTIVE) |
1783 | userpg->offset -= atomic64_read(&counter->hw.prev_count); | 1783 | userpg->offset -= atomic64_read(&counter->hw.prev_count); |
1784 | 1784 | ||
1785 | userpg->time_enabled = counter->total_time_enabled + | ||
1786 | atomic64_read(&counter->child_total_time_enabled); | ||
1787 | |||
1788 | userpg->time_running = counter->total_time_running + | ||
1789 | atomic64_read(&counter->child_total_time_running); | ||
1790 | |||
1785 | barrier(); | 1791 | barrier(); |
1786 | ++userpg->lock; | 1792 | ++userpg->lock; |
1787 | preempt_enable(); | 1793 | preempt_enable(); |