aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2009-04-08 09:01:26 -0400
committerIngo Molnar <mingo@elte.hu>2009-04-08 12:53:27 -0400
commit6fab01927e8bdbbc77bafba2abb4810c5591ad52 (patch)
tree44e375d89034d15072e100494559b05fe321ae1e
parente30e08f65c7ef6c230424264f09c3d53f117f58b (diff)
perf_counter: provide misc bits in the event header
Limit the size of each record to 64k (or should we count in multiples of u64 and have a 512K limit?), this gives 16 bits or spare room in the header, which we can use for misc bits, so as to not have to grow the record with u64 every time we have a few bits to report. 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: <20090408130408.769271806@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/linux/perf_counter.h6
-rw-r--r--kernel/perf_counter.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
index 7f5d353d78ac..5bd8817b12d4 100644
--- a/include/linux/perf_counter.h
+++ b/include/linux/perf_counter.h
@@ -201,9 +201,13 @@ struct perf_counter_mmap_page {
201 __u32 data_head; /* head in the data section */ 201 __u32 data_head; /* head in the data section */
202}; 202};
203 203
204#define PERF_EVENT_MISC_KERNEL (1 << 0)
205#define PERF_EVENT_MISC_USER (1 << 1)
206
204struct perf_event_header { 207struct perf_event_header {
205 __u32 type; 208 __u32 type;
206 __u32 size; 209 __u16 misc;
210 __u16 size;
207}; 211};
208 212
209enum perf_event_type { 213enum perf_event_type {
diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c
index 84a39081344c..4af98f943d3b 100644
--- a/kernel/perf_counter.c
+++ b/kernel/perf_counter.c
@@ -1831,6 +1831,9 @@ static void perf_counter_output(struct perf_counter *counter,
1831 header.type = PERF_EVENT_COUNTER_OVERFLOW; 1831 header.type = PERF_EVENT_COUNTER_OVERFLOW;
1832 header.size = sizeof(header); 1832 header.size = sizeof(header);
1833 1833
1834 header.misc = user_mode(regs) ?
1835 PERF_EVENT_MISC_USER : PERF_EVENT_MISC_KERNEL;
1836
1834 if (record_type & PERF_RECORD_IP) { 1837 if (record_type & PERF_RECORD_IP) {
1835 ip = instruction_pointer(regs); 1838 ip = instruction_pointer(regs);
1836 header.type |= __PERF_EVENT_IP; 1839 header.type |= __PERF_EVENT_IP;