mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 08:15:03 +07:00
drm/i915/gem: Honour O_NONBLOCK before throttling execbuf submissions
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@linux.intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Steve Carbonari <steven.carbonari@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200225192206.1107336-3-chris@chris-wilson.co.uk
This commit is contained in:
parent
88be76cdaf
commit
cb4d5dc3e7
@ -2327,15 +2327,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;
|
||||
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;
|
||||
}
|
||||
|
||||
i915_request_put(rq);
|
||||
}
|
||||
|
||||
eb->engine = ce->engine;
|
||||
|
Loading…
Reference in New Issue
Block a user