summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra2015-07-27 10:35:07 +0200
committerThomas Gleixner2015-07-27 13:52:19 +0200
commit00a2916f7f82c348a2a94dbb572874173bc308a3 (patch)
treeec5cf352c1cb61b944a9e6c2e969489441370f09
parentLinux 4.2-rc4 (diff)
downloadkernel-qcow2-linux-00a2916f7f82c348a2a94dbb572874173bc308a3.tar.gz
kernel-qcow2-linux-00a2916f7f82c348a2a94dbb572874173bc308a3.tar.xz
kernel-qcow2-linux-00a2916f7f82c348a2a94dbb572874173bc308a3.zip
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 <vincent.weaver@maine.edu> Fixes: 72f669c0086f ("perf: Update shadow timestamp before add event") Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: stable@vger.kernel.org # 4.1 Cc: Shaohua Li <shli@fb.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--kernel/events/core.c4
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++)