summaryrefslogtreecommitdiffstats
path: root/kernel/perf_counter.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2009-05-05 17:50:23 +0200
committerIngo Molnar <mingo@elte.hu>2009-05-05 20:18:31 +0200
commit6de6a7b95705b859b61430fa3afa1403034eb3e6 (patch)
tree29214ae667a58aa005d0ed13e51c265fa675adf0 /kernel/perf_counter.c
parentperf_counter: uncouple data_head updates from wakeups (diff)
downloadlinux-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.c8
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;
}