drm/i915: Allow interrupts when taking the timeline->mutex
Before we commit ourselves to writing commands into the ringbuffer and submitting the request, allow signals to interrupt acquisition of the timeline mutex. We allow ourselves to be interrupted at any time later if we need to block for space in the ring, anyway. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190610103610.19883-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
f398bbde9e
commit
f4d57d838c
|
@ -113,10 +113,11 @@ static inline void intel_context_put(struct intel_context *ce)
|
|||
kref_put(&ce->ref, ce->ops->destroy);
|
||||
}
|
||||
|
||||
static inline void intel_context_timeline_lock(struct intel_context *ce)
|
||||
static inline int __must_check
|
||||
intel_context_timeline_lock(struct intel_context *ce)
|
||||
__acquires(&ce->ring->timeline->mutex)
|
||||
{
|
||||
mutex_lock(&ce->ring->timeline->mutex);
|
||||
return mutex_lock_interruptible(&ce->ring->timeline->mutex);
|
||||
}
|
||||
|
||||
static inline void intel_context_timeline_unlock(struct intel_context *ce)
|
||||
|
|
|
@ -784,8 +784,11 @@ struct i915_request *
|
|||
i915_request_create(struct intel_context *ce)
|
||||
{
|
||||
struct i915_request *rq;
|
||||
int err;
|
||||
|
||||
intel_context_timeline_lock(ce);
|
||||
err = intel_context_timeline_lock(ce);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
/* Move our oldest request to the slab-cache (if not in use!) */
|
||||
rq = list_first_entry(&ce->ring->request_list, typeof(*rq), ring_link);
|
||||
|
|
Loading…
Reference in New Issue