[Intel-gfx] [PATCH] drm/i915/selftests: Wait request to finish

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Oct 18 07:49:35 UTC 2021


On 18/10/2021 04:42, Oak Zeng wrote:
> Caller of function igt_gpu_fill_dw assumes when this function
> returns, the gpu command to fill dword is already finished.
> Caller usually checks the GPU filling result immediately, see
> the usage in function __igt_write_huge. If there is no wait,
> when function igt_gpu_fill_dw returns, the GPU command is not
> guaranteed to be finished. So wait for request to finish.

There is more than one caller and the first one I looked at already does 
wait so the above is not fully accurate.

I your example of __igt_write_huge you have i915_gem_object_prepare_read 
called before the assert which does object wait, so that too is not a 
missing wait.

I haven't checked the rest. So perhaps say what failure you are trying 
to fix with a link to a CI report or something?

> 
> Signed-off-by: Oak Zeng <oak.zeng at intel.com>
> ---
>   drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c b/drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c
> index b35c1219c852..5fa595ed30b1 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.c
> @@ -157,6 +157,7 @@ int igt_gpu_fill_dw(struct intel_context *ce,
>   	if (err)
>   		i915_request_set_error_once(rq, err);
>   	i915_request_add(rq);
> +	err = i915_request_wait(rq, 0, HZ/5);

For you reference this exploded in CI because as soon as 
i915_request_add() you are giving your rq reference to the backend and 
i915_request_wait can/will therefore ooops. If you used this pattern 
somewhere you'd need to do:

i915_request_get()
i915_request_add()
i915_request_wait()
i915_request_put()

Regards,

Tvrtko

>   err_batch:
>   	i915_vma_unpin_and_release(&batch, 0);
>   	return err;
> 


More information about the Intel-gfx mailing list