summaryrefslogtreecommitdiff
path: root/benchmarks/gem_wsim.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-05-09 22:50:19 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-05-10 12:15:58 +0100
commit12e2def257484d475cddd05193a27496329688d3 (patch)
tree8e3905629fce5d04f048978358c130c828d36425 /benchmarks/gem_wsim.c
parentd7bc419749d2f988f5632ba51c02197982da3c25 (diff)
wsim: Avoid the workload_step being tracked simultaneously on multiple engines
If the workload is repeated without a full barrier, we may try to add the step onto a new request list before we remove it from its last. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'benchmarks/gem_wsim.c')
-rw-r--r--benchmarks/gem_wsim.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c
index bd973afc..bdaba473 100644
--- a/benchmarks/gem_wsim.c
+++ b/benchmarks/gem_wsim.c
@@ -90,6 +90,7 @@ struct w_step
/* Implementation details */
unsigned int idx;
struct igt_list rq_link;
+ unsigned int request;
struct drm_i915_gem_execbuffer2 eb;
struct drm_i915_gem_exec_object2 *obj;
@@ -427,6 +428,7 @@ static struct workload *parse_workload(char *_desc, unsigned int flags)
add_step:
step.idx = nr_steps++;
+ step.request = -1;
steps = realloc(steps, sizeof(step) * nr_steps);
igt_assert(steps);
@@ -1292,6 +1294,11 @@ run_workload(unsigned int id, struct workload *wrk,
w_sync_to(wrk, w, i - throttle);
gem_execbuf(fd, &w->eb);
+ if (w->request != -1) {
+ igt_list_del(&w->rq_link);
+ wrk->nrequest[w->request]--;
+ }
+ w->request = engine;
igt_list_add_tail(&w->rq_link, &wrk->requests[engine]);
wrk->nrequest[engine]++;
@@ -1318,6 +1325,7 @@ run_workload(unsigned int id, struct workload *wrk,
gem_sync(fd, s->obj[0].handle);
+ s->request = -1;
igt_list_del(&s->rq_link);
wrk->nrequest[engine]--;
}