[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