Quoting Matthew Auld (2019-11-20 10:19:56) > 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) ? Yes. Still distinct lack of coffee. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx