[Intel-gfx] [PATCH] drm/i915: Honour O_NONBLOCK before throttling execbuf submissions

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Fri Oct 11 08:21:27 UTC 2019


On 10/10/2019 14:48, Chris Wilson wrote:
> Check the user's flags on the struct file before deciding whether or not
> to stall before submitting a request. This allows us to reasonably
> cheaply honour O_NONBLOCK without checking at more critical phases
> during request submission.
> 
> Suggested-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> ---
>   .../gpu/drm/i915/gem/i915_gem_execbuffer.c    | 21 ++++++++++++-------
>   1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
> index 98816c35ffc3..bc6bcb8f6d79 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
> @@ -2189,15 +2189,22 @@ static int __eb_pin_engine(struct i915_execbuffer *eb, struct intel_context *ce)
>   	intel_context_timeline_unlock(tl);
>   
>   	if (rq) {
> -		if (i915_request_wait(rq,
> -				      I915_WAIT_INTERRUPTIBLE,
> -				      MAX_SCHEDULE_TIMEOUT) < 0) {
> -			i915_request_put(rq);
> -			err = -EINTR;
> -			goto err_exit;
> -		}
> +		bool nonblock = eb->file->filp->f_flags & O_NONBLOCK;
> +		long timeout;
> +
> +		timeout = MAX_SCHEDULE_TIMEOUT;
> +		if (nonblock)
> +			timeout = 0;
>   
> +		timeout = i915_request_wait(rq,
> +					    I915_WAIT_INTERRUPTIBLE,
> +					    timeout);
>   		i915_request_put(rq);
> +
> +		if (timeout < 0) {
> +			err = nonblock ? -EWOULDBLOCK : timeout;
> +			goto err_exit;
> +		}
>   	}
>   
>   	eb->engine = ce->engine;
> 

Why not, if there is userspace! :)

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list