perf: Update shadow timestamp before add event
authorShaohua Li <shli@fb.com>
Thu, 5 Feb 2015 23:55:31 +0000 (15:55 -0800)
committerIngo Molnar <mingo@kernel.org>
Wed, 18 Feb 2015 16:01:44 +0000 (17:01 +0100)
Update the shadow timestamp before start event, because .add might
use the timestamp.

Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul Mackerras <paulus@samba.org>
Link: http://lkml.kernel.org/r/9cd0276d6a047cb7c2885994f25e3a1f7c8c28af.1423180257.git.shli@fb.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/events/core.c

index 13209a90b751d11ba9e7d05334997916f7e5c609..e580e0f41ac6957a865b598c7e6b755c87323041 100644 (file)
@@ -1881,6 +1881,10 @@ 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);
+
        if (event->pmu->add(event, PERF_EF_START)) {
                event->state = PERF_EVENT_STATE_INACTIVE;
                event->oncpu = -1;
@@ -1888,10 +1892,6 @@ event_sched_in(struct perf_event *event,
                goto out;
        }
 
-       event->tstamp_running += tstamp - event->tstamp_stopped;
-
-       perf_set_shadow_time(event, ctx, tstamp);
-
        if (!is_software_event(event))
                cpuctx->active_oncpu++;
        if (!ctx->nr_active++)