diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-05-05 17:50:23 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-05-05 20:18:31 +0200 |
commit | 6de6a7b95705b859b61430fa3afa1403034eb3e6 (patch) | |
tree | 29214ae667a58aa005d0ed13e51c265fa675adf0 /kernel/perf_counter.c | |
parent | perf_counter: uncouple data_head updates from wakeups (diff) | |
download | linux-6de6a7b95705b859b61430fa3afa1403034eb3e6.tar.xz linux-6de6a7b95705b859b61430fa3afa1403034eb3e6.zip |
perf_counter: add ioctl(PERF_COUNTER_IOC_RESET)
Provide a way to reset an existing counter - this eases PAPI
libraries around perfcounters.
Similar to read() it doesn't collapse pending child counters.
[ Impact: new perfcounter fd ioctl method to reset counters ]
Suggested-by: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <20090505155437.022272933@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to '')
-rw-r--r-- | kernel/perf_counter.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c index ba5e921e1f36..6e6834e0587e 100644 --- a/kernel/perf_counter.c +++ b/kernel/perf_counter.c @@ -1288,6 +1288,11 @@ static unsigned int perf_poll(struct file *file, poll_table *wait) return events; } +static void perf_counter_reset(struct perf_counter *counter) +{ + atomic_set(&counter->count, 0); +} + static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct perf_counter *counter = file->private_data; @@ -1303,6 +1308,9 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case PERF_COUNTER_IOC_REFRESH: perf_counter_refresh(counter, arg); break; + case PERF_COUNTER_IOC_RESET: + perf_counter_reset(counter); + break; default: err = -ENOTTY; } |