diff options
author | Peter Zijlstra <[email protected]> | 2015-07-27 10:35:07 +0200 |
---|---|---|
committer | Thomas Gleixner <[email protected]> | 2015-07-27 13:52:19 +0200 |
commit | 00a2916f7f82c348a2a94dbb572874173bc308a3 (patch) | |
tree | ec5cf352c1cb61b944a9e6c2e969489441370f09 | |
parent | cbfe8fa6cd672011c755c3cd85c9ffd4e2d10a6f (diff) |
perf: Fix running time accounting
A recent fix to the shadow timestamp inadvertly broke the running time
accounting.
We must not update the running timestamp if we fail to schedule the
event, the event will not have ran. This can (and did) result in
negative total runtime because the stopped timestamp was before the
running timestamp (we 'started' but never stopped the event -- because
it never really started we didn't have to stop it either).
Reported-and-Tested-by: Vince Weaver <[email protected]>
Fixes: 72f669c0086f ("perf: Update shadow timestamp before add event")
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Cc: [email protected] # 4.1
Cc: Shaohua Li <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
-rw-r--r-- | kernel/events/core.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index d3dae3419b99..10d076b2572c 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -1868,8 +1868,6 @@ event_sched_in(struct perf_event *event, perf_pmu_disable(event->pmu); - event->tstamp_running += tstamp - event->tstamp_stopped; - perf_set_shadow_time(event, ctx, tstamp); perf_log_itrace_start(event); @@ -1881,6 +1879,8 @@ event_sched_in(struct perf_event *event, goto out; } + event->tstamp_running += tstamp - event->tstamp_stopped; + if (!is_software_event(event)) cpuctx->active_oncpu++; if (!ctx->nr_active++) |