[Intel-gfx] [PATCH] drm/i915: Allow interrupts when taking the timeline->mutex
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Jun 10 11:08:40 UTC 2019
On 10/06/2019 11:36, Chris Wilson wrote:
> 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 at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/gt/intel_context.h | 5 +++--
> drivers/gpu/drm/i915/i915_request.c | 5 ++++-
> 2 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
> index 63392c88cd98..6d5453ba2c1e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context.h
> +++ b/drivers/gpu/drm/i915/gt/intel_context.h
> @@ -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)
> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
> index da1e6984a8cc..e9b59eea4f10 100644
> --- a/drivers/gpu/drm/i915/i915_request.c
> +++ b/drivers/gpu/drm/i915/i915_request.c
> @@ -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);
>
Patch triggered by a bug, issue, report?
We had this conundrum in a few of the other patches which added new
mutexes. Sometimes it is less important, but in this case I suppose it
is better to handle signals.
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list