[Intel-gfx] [PATCH] drm/i915: Allow interrupts when taking the timeline->mutex
Chris Wilson
chris at chris-wilson.co.uk
Mon Jun 10 11:11:57 UTC 2019
Quoting Tvrtko Ursulin (2019-06-10 12:08:40)
>
> 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?
None, just a thought occurred to me to check.
> 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.
There are a few places where we should not, that's the challenge. :)
-Chris
More information about the Intel-gfx
mailing list