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

Matthew Auld matthew.william.auld at gmail.com
Wed Nov 20 10:19:56 UTC 2019


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) ?

> +                                       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) ?


More information about the Intel-gfx mailing list