diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-05-09 22:50:19 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-05-10 12:15:58 +0100 |
commit | 12e2def257484d475cddd05193a27496329688d3 (patch) | |
tree | 8e3905629fce5d04f048978358c130c828d36425 /benchmarks/gem_wsim.c | |
parent | d7bc419749d2f988f5632ba51c02197982da3c25 (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.c | 8 |
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]--; } |