perf_events: Fix time tracking for events with pid != -1 and cpu != -1
commitfa66f07aa1f0950e1dc78b7ab39728b3f8aa77a1
authorStephane Eranian <eranian@google.com>
Thu, 26 Aug 2010 14:40:01 +0000 (26 16:40 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 30 Aug 2010 10:16:55 +0000 (30 12:16 +0200)
tree4ad4612c2fc07f159e192fae9145f9d87a697592
parent5225c45899e872383ca39f5533d28ec63c54b39e
perf_events: Fix time tracking for events with pid != -1 and cpu != -1

Per-thread events with a cpu filter, i.e., cpu != -1, were not
reporting correct timings when the thread never ran on the
monitored cpu. The time enabled was reported as a negative
value.

This patch fixes the problem by updating tstamp_stopped,
tstamp_running in event_sched_out() for events with filters and
which are marked as INACTIVE.

The function group_sched_out() is modified to systematically
call into event_sched_out() to avoid duplicating the timing
adjustment code twice.

With the patch, I now get:

$ task_cpu -i -e unhalted_core_cycles,unhalted_core_cycles
noploop 2 noploop for 2 seconds
CPU0 0    unhalted_core_cycles (ena=1,991,136,594, run=0)
CPU0 0    unhalted_core_cycles (ena=1,991,136,594, run=0)

CPU1 0    unhalted_core_cycles (ena=1,991,136,594, run=0)
CPU1 0    unhalted_core_cycles (ena=1,991,136,594, run=0)

CPU2 0    unhalted_core_cycles (ena=1,991,136,594, run=0)
CPU2 0    unhalted_core_cycles (ena=1,991,136,594, run=0)

CPU3 4,747,990,931 unhalted_core_cycles (ena=1,991,136,594, run=1,991,136,594)
CPU3 4,747,990,931 unhalted_core_cycles (ena=1,991,136,594, run=1,991,136,594)

Signed-off-by: Stephane Eranian <eranian@gmail.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: paulus@samba.org
Cc: davem@davemloft.net
Cc: fweisbec@gmail.com
Cc: perfmon2-devel@lists.sf.net
Cc: eranian@google.com
LKML-Reference: <4c76802d.aae9d80a.115d.70fe@mx.google.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/perf_event.c