drm/i915: Only trigger missed-seqno checking next to boundary
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 27 Jun 2018 20:13:02 +0000 (21:13 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 28 Jun 2018 19:56:35 +0000 (20:56 +0100)
If we have more interrupts pending (because we know there are more
breadcrumb signals before the completion), then we do not need to
trigger an irq_seqno_barrier or even wakeup the task on this interrupt
as there will be another. To allow some margin of error (we are trying
to work around incoherent seqno after all), we wakeup the breadcrumb
before the target as well as on the target.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180627201304.15817-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_irq.c

index 8893e795f6720028d4dc0a05d5e99ed22cc3f151..4f137eeaf3951a42f150e4612623422a942b7a2f 100644 (file)
@@ -1191,7 +1191,8 @@ static void notify_ring(struct intel_engine_cs *engine)
 
                        tsk = wait->tsk;
                } else {
-                       if (engine->irq_seqno_barrier) {
+                       if (engine->irq_seqno_barrier &&
+                           i915_seqno_passed(seqno, wait->seqno - 1)) {
                                set_bit(ENGINE_IRQ_BREADCRUMB,
                                        &engine->irq_posted);
                                tsk = wait->tsk;