On Wed, 20 Nov 2019 at 09:33, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > i915_request_add() consumes the passed in reference to the i915_request, > so if the selftest caller wishes to wait upon it afterwards, it needs to > take a reference for itself. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > .../drm/i915/gem/selftests/i915_gem_context.c | 38 ++++++++++++++----- > 1 file changed, 29 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c > index 9a509c18b7c7..16df814f3efd 100644 > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c > @@ -73,25 +73,34 @@ static int live_nop_switch(void *arg) > } > > for_each_uabi_engine(engine, i915) { > - struct i915_request *rq; > + struct i915_request *rq = NULL; > unsigned long end_time, prime; > ktime_t times[2] = {}; > > times[0] = ktime_get_raw(); > for (n = 0; n < nctx; n++) { > - rq = igt_request_alloc(ctx[n], engine); > - if (IS_ERR(rq)) { > - err = PTR_ERR(rq); > + struct i915_request *this; > + > + this = igt_request_alloc(ctx[n], engine); > + if (IS_ERR(this)) { > + err = PTR_ERR(this); > goto out_file; > } > - i915_request_add(rq); > + if (rq) { > + i915_request_await_dma_fence(this, &rq->fence); > + i915_request_put(rq); > + } > + rq = i915_request_get(this); > + i915_request_add(this); > } > if (i915_request_wait(rq, 0, HZ / 5) < 0) { > pr_err("Failed to populated %d contexts\n", nctx); > intel_gt_set_wedged(&i915->gt); > + i915_request_put(rq); > err = -EIO; > goto out_file; > } > + i915_request_put(rq); > > times[1] = ktime_get_raw(); > > @@ -106,13 +115,21 @@ static int live_nop_switch(void *arg) > for_each_prime_number_from(prime, 2, 8192) { > times[1] = ktime_get_raw(); > > + rq = NULL; > for (n = 0; n < prime; n++) { > - rq = igt_request_alloc(ctx[n % nctx], engine); > - if (IS_ERR(rq)) { > - err = PTR_ERR(rq); > + struct i915_request *this; > + > + this = igt_request_alloc(ctx[n % nctx], engine); > + if (IS_ERR(this)) { > + err = PTR_ERR(this); > goto out_file; > } > > + if (this) { /* Force submission order */ if (rq) ? > + i915_request_await_dma_fence(this, &rq->fence); > + i915_request_put(rq); > + } > + > /* > * This space is left intentionally blank. > * > @@ -127,14 +144,17 @@ static int live_nop_switch(void *arg) > * for latency. > */ > > - i915_request_add(rq); rq = i915_request_get(this) ? _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx