[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