aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSoeren Sandmann <sandmann@daimi.au.dk>2009-09-15 08:33:08 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-23 03:35:02 -0400
commit721a669b7225edeeb0ca8e2bf71b83882326a71b (patch)
tree51bc7438941db50224489091eed677ba67decf56 /include
parent2e600d01c131ee189f55ca1879cd364b9e056df8 (diff)
perf events: Fix swevent hrtimer sampling by keeping track of remaining time when enabling/disabling swevent hrtimers
Make the hrtimer based events work for sysprof. Whenever a swevent is scheduled out, the hrtimer is canceled. When it is scheduled back in, the timer is restarted. This happens every scheduler tick, which means the timer never expired because it was getting repeatedly restarted over and over with the same period. To fix that, save the remaining time when disabling; when reenabling, use that saved time as the period instead of the user-specified sampling period. Also, move the starting and stopping of the hrtimers to helper functions instead of duplicating the code. Signed-off-by: Søren Sandmann Pedersen <sandmann@redhat.com> LKML-Reference: <ye8vdi7mluz.fsf@camel16.daimi.au.dk> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r--include/linux/perf_event.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 2e6d95f97419..9e7012689a84 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -471,8 +471,8 @@ struct hw_perf_event {
471 unsigned long event_base; 471 unsigned long event_base;
472 int idx; 472 int idx;
473 }; 473 };
474 union { /* software */ 474 struct { /* software */
475 atomic64_t count; 475 s64 remaining;
476 struct hrtimer hrtimer; 476 struct hrtimer hrtimer;
477 }; 477 };
478 }; 478 };