aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2009-04-06 05:45:07 -0400
committerIngo Molnar <mingo@elte.hu>2009-04-07 04:48:58 -0400
commit79f146415623fe74f39af67c0f6adc208939a410 (patch)
tree2b8b3ac045b21cce1169b55bd298a93dba4a19b3 /include/linux
parent339f7c90b8a2f3aa2dd4267e79f797999e8a3c59 (diff)
perf_counter: counter overflow limit
Provide means to auto-disable the counter after 'n' overflow events. Create the counter with hw_event.disabled = 1, and then issue an ioctl(fd, PREF_COUNTER_IOC_REFRESH, n); to set the limit and enable the counter. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> LKML-Reference: <20090406094518.083139737@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/perf_counter.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
index 928a7fae0961..ef4dcbff75ab 100644
--- a/include/linux/perf_counter.h
+++ b/include/linux/perf_counter.h
@@ -155,8 +155,9 @@ struct perf_counter_hw_event {
155/* 155/*
156 * Ioctls that can be done on a perf counter fd: 156 * Ioctls that can be done on a perf counter fd:
157 */ 157 */
158#define PERF_COUNTER_IOC_ENABLE _IO('$', 0) 158#define PERF_COUNTER_IOC_ENABLE _IO ('$', 0)
159#define PERF_COUNTER_IOC_DISABLE _IO('$', 1) 159#define PERF_COUNTER_IOC_DISABLE _IO ('$', 1)
160#define PERF_COUNTER_IOC_REFRESH _IOW('$', 2, u32)
160 161
161/* 162/*
162 * Structure of the page that can be mapped via mmap 163 * Structure of the page that can be mapped via mmap
@@ -403,9 +404,14 @@ struct perf_counter {
403 /* poll related */ 404 /* poll related */
404 wait_queue_head_t waitq; 405 wait_queue_head_t waitq;
405 struct fasync_struct *fasync; 406 struct fasync_struct *fasync;
406 /* optional: for NMIs */ 407
408 /* delayed work for NMIs and such */
409 int pending_wakeup;
410 int pending_disable;
407 struct perf_pending_entry pending; 411 struct perf_pending_entry pending;
408 412
413 atomic_t event_limit;
414
409 void (*destroy)(struct perf_counter *); 415 void (*destroy)(struct perf_counter *);
410 struct rcu_head rcu_head; 416 struct rcu_head rcu_head;
411#endif 417#endif