diff options
author | Peter Zijlstra <peterz@infradead.org> | 2010-04-08 17:03:20 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-05-07 05:31:02 -0400 |
commit | ab608344bcbde4f55ec4cd911b686b0ce3eae076 (patch) | |
tree | ebd38efabfaab59d6de11a24143d70e1eec36fae /include/linux | |
parent | 2b0b5c6fe9b383f3cf35a0a6371c9d577bd523ff (diff) |
perf, x86: Improve the PEBS ABI
Rename perf_event_attr::precise to perf_event_attr::precise_ip and
widen it to 2 bits. This new field describes the required precision of
the PERF_SAMPLE_IP field:
0 - SAMPLE_IP can have arbitrary skid
1 - SAMPLE_IP must have constant skid
2 - SAMPLE_IP requested to have 0 skid
3 - SAMPLE_IP must have 0 skid
And modify the Intel PEBS code accordingly. The PEBS implementation
now supports up to precise_ip == 2, where we perform the IP fixup.
Also s/PERF_RECORD_MISC_EXACT/&_IP/ to clarify its meaning, this bit
should be set for each PERF_SAMPLE_IP field known to match the actual
instruction triggering the event.
This new scheme allows for a PEBS mode that uses the buffer for more
than a single event.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Stephane Eranian <eranian@google.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/perf_event.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 6be4a0f9137c..23cd0057a681 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -203,9 +203,19 @@ struct perf_event_attr { | |||
203 | enable_on_exec : 1, /* next exec enables */ | 203 | enable_on_exec : 1, /* next exec enables */ |
204 | task : 1, /* trace fork/exit */ | 204 | task : 1, /* trace fork/exit */ |
205 | watermark : 1, /* wakeup_watermark */ | 205 | watermark : 1, /* wakeup_watermark */ |
206 | precise : 1, /* OoO invariant counter */ | 206 | /* |
207 | 207 | * precise_ip: | |
208 | __reserved_1 : 48; | 208 | * |
209 | * 0 - SAMPLE_IP can have arbitrary skid | ||
210 | * 1 - SAMPLE_IP must have constant skid | ||
211 | * 2 - SAMPLE_IP requested to have 0 skid | ||
212 | * 3 - SAMPLE_IP must have 0 skid | ||
213 | * | ||
214 | * See also PERF_RECORD_MISC_EXACT_IP | ||
215 | */ | ||
216 | precise_ip : 2, /* skid constraint */ | ||
217 | |||
218 | __reserved_1 : 47; | ||
209 | 219 | ||
210 | union { | 220 | union { |
211 | __u32 wakeup_events; /* wakeup every n events */ | 221 | __u32 wakeup_events; /* wakeup every n events */ |
@@ -296,7 +306,12 @@ struct perf_event_mmap_page { | |||
296 | #define PERF_RECORD_MISC_GUEST_KERNEL (4 << 0) | 306 | #define PERF_RECORD_MISC_GUEST_KERNEL (4 << 0) |
297 | #define PERF_RECORD_MISC_GUEST_USER (5 << 0) | 307 | #define PERF_RECORD_MISC_GUEST_USER (5 << 0) |
298 | 308 | ||
299 | #define PERF_RECORD_MISC_EXACT (1 << 14) | 309 | /* |
310 | * Indicates that the content of PERF_SAMPLE_IP points to | ||
311 | * the actual instruction that triggered the event. See also | ||
312 | * perf_event_attr::precise_ip. | ||
313 | */ | ||
314 | #define PERF_RECORD_MISC_EXACT_IP (1 << 14) | ||
300 | /* | 315 | /* |
301 | * Reserve the last bit to indicate some extended misc field | 316 | * Reserve the last bit to indicate some extended misc field |
302 | */ | 317 | */ |