perf_counter: provide misc bits in the event header
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Wed, 8 Apr 2009 13:01:26 +0000 (15:01 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 8 Apr 2009 16:53:27 +0000 (18:53 +0200)
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>
include/linux/perf_counter.h
kernel/perf_counter.c

index 7f5d353d78ac595ad9a5ec63497174c4a0766f66..5bd8817b12d4ac990dd7641eecbdc7d736246385 100644 (file)
@@ -201,9 +201,13 @@ struct perf_counter_mmap_page {
        __u32   data_head;              /* head in the data section */
 };
 
+#define PERF_EVENT_MISC_KERNEL (1 << 0)
+#define PERF_EVENT_MISC_USER   (1 << 1)
+
 struct perf_event_header {
        __u32   type;
-       __u32   size;
+       __u16   misc;
+       __u16   size;
 };
 
 enum perf_event_type {
index 84a39081344c85e6d2e7cc4228878d3c61ae8232..4af98f943d3b504ef5d44bd5fa58e17676e91e3c 100644 (file)
@@ -1831,6 +1831,9 @@ static void perf_counter_output(struct perf_counter *counter,
        header.type = PERF_EVENT_COUNTER_OVERFLOW;
        header.size = sizeof(header);
 
+       header.misc = user_mode(regs) ?
+               PERF_EVENT_MISC_USER : PERF_EVENT_MISC_KERNEL;
+
        if (record_type & PERF_RECORD_IP) {
                ip = instruction_pointer(regs);
                header.type |= __PERF_EVENT_IP;