drm/i915: Only attempt to signal the request once from the interrupt handler
Check that request has not been signaled before acquiring a reference to the request for signaling later in the interrupt handler. The loading of the cacheline (for request->fence.flags) should be "free" when followed by the locked increment of the request->fence.refcount (which then sets the cacheline to exclusive mode), i.e. the cost of test_bit prior to an atomic_inc should be negligible. This should benefit us when we have a pile of bare breadcrumbs (interrupted execbuf) where we may get interrupts faster than we can get rid of the intel_wait, or if the device is too slow to run the bottom-half between interrupts. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170315210726.12095-5-chris@chris-wilson.co.uk
This commit is contained in:
parent
908a6cbf84
commit
db93991bf5
|
@ -1056,7 +1056,9 @@ static void notify_ring(struct intel_engine_cs *engine)
|
|||
* and many waiters.
|
||||
*/
|
||||
if (i915_seqno_passed(intel_engine_get_seqno(engine),
|
||||
wait->seqno))
|
||||
wait->seqno) &&
|
||||
!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
|
||||
&wait->request->fence.flags))
|
||||
rq = i915_gem_request_get(wait->request);
|
||||
|
||||
wake_up_process(wait->tsk);
|
||||
|
|
Loading…
Reference in New Issue