lkml.org 
[lkml]   [2009]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 4/5] perf_counter: PERF_RECORD_CONFIG
Much like CONFIG_RECORD_GROUP records the hw_event.config to identify the
values, allow to record this for all counters.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
include/linux/perf_counter.h | 2 ++
kernel/perf_counter.c | 8 ++++++++
2 files changed, 10 insertions(+)
Index: linux-2.6/include/linux/perf_counter.h
===================================================================
--- linux-2.6.orig/include/linux/perf_counter.h
+++ linux-2.6/include/linux/perf_counter.h
@@ -104,6 +104,7 @@ enum perf_counter_record_format {
PERF_RECORD_ADDR = 1U << 3,
PERF_RECORD_GROUP = 1U << 4,
PERF_RECORD_CALLCHAIN = 1U << 5,
+ PERF_RECORD_CONFIG = 1U << 6,
};

/*
@@ -258,6 +259,7 @@ enum perf_event_type {
* { u32 pid, tid; } && PERF_RECORD_TID
* { u64 time; } && PERF_RECORD_TIME
* { u64 addr; } && PERF_RECORD_ADDR
+ * { u64 config; } && PERF_RECORD_CONFIG
*
* { u64 nr;
* { u64 event, val; } cnt[nr]; } && PERF_RECORD_GROUP
Index: linux-2.6/kernel/perf_counter.c
===================================================================
--- linux-2.6.orig/kernel/perf_counter.c
+++ linux-2.6/kernel/perf_counter.c
@@ -1992,6 +1992,11 @@ static void perf_counter_output(struct p
header.size += sizeof(u64);
}

+ if (record_type & PERF_RECORD_CONFIG) {
+ header.type |= PERF_RECORD_CONFIG;
+ header.size += sizeof(u64);
+ }
+
if (record_type & PERF_RECORD_GROUP) {
header.type |= PERF_RECORD_GROUP;
header.size += sizeof(u64) +
@@ -2027,6 +2032,9 @@ static void perf_counter_output(struct p
if (record_type & PERF_RECORD_ADDR)
perf_output_put(&handle, addr);

+ if (record_type & PERF_RECORD_CONFIG)
+ perf_output_put(&handle, counter->hw_event.config);
+
/*
* XXX PERF_RECORD_GROUP vs inherited counters seems difficult.
*/
--



\
 
 \ /
  Last update: 2009-05-08 20:21    [from the cache]
©2003-2011 Jasper Spaans