From 335f59e2e19af0552c04ee067bef32af2f3f9716 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Fri, 8 May 2009 18:52:24 +0200 Subject: [PATCH] --- yaml --- r: 147439 b: refs/heads/master c: f370e1e2f195ec1e6420e26fc83e0319595db578 h: refs/heads/master i: 147437: a086133a735c728a8f4ff1e6e18d1118555f756b 147435: 9090e1559a8dcaf831ad7f4cf857241a75f8df2a 147431: 1af177e14ff1b569e24f153a428a2b5d00670566 147423: 26ac0b54945c79b8edb01abaeb776747dffa0a0d v: v3 --- [refs] | 2 +- trunk/include/linux/perf_counter.h | 2 ++ trunk/kernel/perf_counter.c | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 9f290a8778a8..dd36ec658742 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a85f61abe11a46553c4562e74edb27ebc782aeb7 +refs/heads/master: f370e1e2f195ec1e6420e26fc83e0319595db578 diff --git a/trunk/include/linux/perf_counter.h b/trunk/include/linux/perf_counter.h index 0e6303d36c66..614f921d616a 100644 --- a/trunk/include/linux/perf_counter.h +++ b/trunk/include/linux/perf_counter.h @@ -105,6 +105,7 @@ enum perf_counter_record_format { PERF_RECORD_GROUP = 1U << 4, PERF_RECORD_CALLCHAIN = 1U << 5, PERF_RECORD_CONFIG = 1U << 6, + PERF_RECORD_CPU = 1U << 7, }; /* @@ -260,6 +261,7 @@ enum perf_event_type { * { u64 time; } && PERF_RECORD_TIME * { u64 addr; } && PERF_RECORD_ADDR * { u64 config; } && PERF_RECORD_CONFIG + * { u32 cpu, res; } && PERF_RECORD_CPU * * { u64 nr; * { u64 event, val; } cnt[nr]; } && PERF_RECORD_GROUP diff --git a/trunk/kernel/perf_counter.c b/trunk/kernel/perf_counter.c index c615f52aa408..d850a1fb8d4c 100644 --- a/trunk/kernel/perf_counter.c +++ b/trunk/kernel/perf_counter.c @@ -1956,6 +1956,9 @@ static void perf_counter_output(struct perf_counter *counter, struct perf_callchain_entry *callchain = NULL; int callchain_size = 0; u64 time; + struct { + u32 cpu, reserved; + } cpu_entry; header.type = 0; header.size = sizeof(header); @@ -1999,6 +2002,13 @@ static void perf_counter_output(struct perf_counter *counter, header.size += sizeof(u64); } + if (record_type & PERF_RECORD_CPU) { + header.type |= PERF_RECORD_CPU; + header.size += sizeof(cpu_entry); + + cpu_entry.cpu = raw_smp_processor_id(); + } + if (record_type & PERF_RECORD_GROUP) { header.type |= PERF_RECORD_GROUP; header.size += sizeof(u64) + @@ -2037,6 +2047,9 @@ static void perf_counter_output(struct perf_counter *counter, if (record_type & PERF_RECORD_CONFIG) perf_output_put(&handle, counter->hw_event.config); + if (record_type & PERF_RECORD_CPU) + perf_output_put(&handle, cpu_entry); + /* * XXX PERF_RECORD_GROUP vs inherited counters seems difficult. */