perf_counter: Rework the sample ABI

The PERF_EVENT_READ implementation made me realize we don't
actually need the sample_type int the output sample, since
we already have that in the perf_counter_attr information.

Therefore, remove the PERF_EVENT_MISC_OVERFLOW bit and the
event->type overloading, and imply put counter overflow
samples in a PERF_EVENT_SAMPLE type.

This also fixes the issue that event->type was only 32-bit
and sample_type had 64 usable bits.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Peter Zijlstra
2009-06-25 11:27:12 +02:00
committed by Ingo Molnar
parent bfbd3381e6
commit e6e18ec79b
5 changed files with 49 additions and 48 deletions

View File

@ -392,11 +392,11 @@ static void record_ip(u64 ip, int counter)
samples--;
}
static void process_event(u64 ip, int counter)
static void process_event(u64 ip, int counter, int user)
{
samples++;
if (ip < min_ip || ip > max_ip) {
if (user) {
userspace_samples++;
return;
}
@ -509,9 +509,10 @@ static void mmap_read_counter(struct mmap_data *md)
old += size;
if (event->header.misc & PERF_EVENT_MISC_OVERFLOW) {
if (event->header.type & PERF_SAMPLE_IP)
process_event(event->ip.ip, md->counter);
if (event->header.type == PERF_EVENT_SAMPLE) {
int user =
(event->header.misc & PERF_EVENT_MISC_CPUMODE_MASK) == PERF_EVENT_MISC_USER;
process_event(event->ip.ip, md->counter, user);
}
}