overlay: Correct layout of ring/seqno in raw sample
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>
diff --git a/overlay/gpu-perf.c b/overlay/gpu-perf.c
index 56bc8b0..642d20c 100644
--- a/overlay/gpu-perf.c
+++ b/overlay/gpu-perf.c
@@ -231,6 +231,7 @@
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 @@
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 @@
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 @@
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;