drm/i915/gt: Don't cancel the interrupt shadow too early
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 23 Nov 2020 11:37:16 +0000 (11:37 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 23 Nov 2020 17:26:38 +0000 (17:26 +0000)
We currently want to keep the interrupt enabled until the interrupt after
which we have no more work to do. This heuristic was broken by us
kicking the irq-work on adding a completed request without attaching a
signaler -- hence it appearing to the irq-worker that an interrupt had
fired when we were idle.

Fixes: 2854d866327a ("drm/i915/gt: Replace intel_engine_transfer_stale_breadcrumbs")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201123113717.20500-3-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_breadcrumbs.c

index 43cfabb..cf6e05e 100644 (file)
@@ -229,7 +229,7 @@ static void signal_irq_work(struct irq_work *work)
         * interrupt draw less ire from other users of the system and tools
         * like powertop.
         */
-       if (b->irq_armed && list_empty(&b->signalers))
+       if (!signal && b->irq_armed && list_empty(&b->signalers))
                __intel_breadcrumbs_disarm_irq(b);
 
        list_for_each_entry_safe(ce, cn, &b->signalers, signal_link) {