Quoting Chris Wilson (2019-04-17 08:56:26) > @@ -294,8 +304,8 @@ void i915_request_cancel_breadcrumb(struct i915_request *rq) > { > struct intel_breadcrumbs *b = &rq->engine->breadcrumbs; > > - if (!test_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) > - return; > + lockdep_assert_held(&rq->lock); > + lockdep_assert_irqs_disabled(); > > spin_lock(&b->irq_lock); > if (test_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) { @@ -307,6 +307,12 @@ void i915_request_cancel_breadcrumb(struct i915_request *rq) lockdep_assert_held(&rq->lock); lockdep_assert_irqs_disabled(); + /* + * We must wait for b->irq_lock so that we know the interrupt handler + * has released its reference to the intel_context and has completed + * the DMA_FENCE_FLAG_SIGNALED_BIT/I915_FENCE_FLAG_SIGNAL dance (if + * required). + */ spin_lock(&b->irq_lock); if (test_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) { struct intel_context *ce = rq->hw_context; Just a touch of explanation, -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx