[Intel-gfx] [PATCH 1/9] drm/i915/selftests: Take a ref to the request we wait upon

Chris Wilson chris at chris-wilson.co.uk
Wed Nov 20 10:25:28 UTC 2019


Quoting Matthew Auld (2019-11-20 10:19:56)
> On Wed, 20 Nov 2019 at 09:33, Chris Wilson <chris at chris-wilson.co.uk> 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 at chris-wilson.co.uk>
> > ---
> >  .../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


More information about the Intel-gfx mailing list