aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2009-05-05 11:50:23 -0400
committerIngo Molnar <mingo@elte.hu>2009-05-05 14:18:31 -0400
commit6de6a7b95705b859b61430fa3afa1403034eb3e6 (patch)
tree29214ae667a58aa005d0ed13e51c265fa675adf0 /kernel
parentc66de4a5be7913247bd83d79168f8e4420c9cfbc (diff)
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 'kernel')
-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)
1288 return events; 1288 return events;
1289} 1289}
1290 1290
1291static void perf_counter_reset(struct perf_counter *counter)
1292{
1293 atomic_set(&counter->count, 0);
1294}
1295
1291static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 1296static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1292{ 1297{
1293 struct perf_counter *counter = file->private_data; 1298 struct perf_counter *counter = file->private_data;
@@ -1303,6 +1308,9 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1303 case PERF_COUNTER_IOC_REFRESH: 1308 case PERF_COUNTER_IOC_REFRESH:
1304 perf_counter_refresh(counter, arg); 1309 perf_counter_refresh(counter, arg);
1305 break; 1310 break;
1311 case PERF_COUNTER_IOC_RESET:
1312 perf_counter_reset(counter);
1313 break;
1306 default: 1314 default:
1307 err = -ENOTTY; 1315 err = -ENOTTY;
1308 } 1316 }