overlay: Correct layout of ring/seqno in raw sample
authorChris Wilson <chris@chris-wilson.co.uk>
Sat, 17 Aug 2013 22:07:01 +0000 (23:07 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Sat, 17 Aug 2013 22:21:34 +0000 (23:21 +0100)
For seqno completion, the events are too coarse i.e. one event may
signal the completion of a few seqno. We will need to sort the events to
properly compute the busy times.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
overlay/gpu-perf.c
overlay/gpu-perf.h

index 56bc8b0..642d20c 100644 (file)
@@ -231,6 +231,7 @@ static int busy_start(struct gpu_perf *gp, const void *event)
        if (busy == NULL)
                return 0;
 
+       busy->ring = sample->raw[1];
        busy->seqno = sample->raw[2];
        busy->time = sample->time;
        busy->comm = comm;
@@ -246,6 +247,9 @@ static int busy_end(struct gpu_perf *gp, const void *event)
        struct gpu_perf_time *busy, **prev;
 
        for (prev = &gp->busy; (busy = *prev) != NULL; prev = &busy->next) {
+               if (busy->ring != sample->raw[1])
+                       continue;
+
                if (busy->seqno != sample->raw[2])
                        continue;
 
@@ -279,7 +283,8 @@ static int wait_begin(struct gpu_perf *gp, const void *event)
                return 0;
 
        wait->comm = comm;
-       wait->seqno = sample->raw[3];
+       wait->ring = sample->raw[1];
+       wait->seqno = sample->raw[2];
        wait->time = sample->time;
        wait->next = gp->wait;
        gp->wait = wait;
@@ -293,7 +298,10 @@ static int wait_end(struct gpu_perf *gp, const void *event)
        struct gpu_perf_time *wait, **prev;
 
        for (prev = &gp->wait; (wait = *prev) != NULL; prev = &wait->next) {
-               if (wait->seqno != sample->raw[3])
+               if (wait->ring != sample->raw[1])
+                       continue;
+
+               if (wait->seqno != sample->raw[2])
                        continue;
 
                wait->comm->wait_time += sample->time - wait->time;
index ced9379..c0e0030 100644 (file)
@@ -25,6 +25,7 @@ struct gpu_perf {
        struct gpu_perf_time {
                struct gpu_perf_time *next;
                struct gpu_perf_comm *comm;
+               int ring;
                uint32_t seqno;
                uint64_t time;
        } *wait, *busy;