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:
committed by
Ingo Molnar
parent
bfbd3381e6
commit
e6e18ec79b
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user