Commit 1dfbea04 authored by Chris Wilson's avatar Chris Wilson

drm/i915/breadcrumbs: Drop assertion that we've already enabled irqs

The motivation for introducing the check that we only enable breadcrumb
irqs if the device's irq was installed was once upon a time we waited
during suspend after disabling interrupts (which was quite slow until
the bug was discovered). Since then we have the notion of pinning the
breadcrumb irq, broadening it from the sole purpose of user interrupt
notification and waiting, and more importantly decoupling it from a very
defined time period during which enabling the irq was expected. So stop
insisting the irq is installed before we setup our IMR masks, if the IER
isn't yet enabled, nothing will happen and we will timeout instead,
revealing the lack of irq in the hang debug messages.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190117233126.30165-1-chris@chris-wilson.co.uk
parent 6ddbb12e
...@@ -158,30 +158,24 @@ static void intel_breadcrumbs_fake_irq(struct timer_list *t) ...@@ -158,30 +158,24 @@ static void intel_breadcrumbs_fake_irq(struct timer_list *t)
static void irq_enable(struct intel_engine_cs *engine) static void irq_enable(struct intel_engine_cs *engine)
{ {
/* if (!engine->irq_enable)
* FIXME: Ideally we want this on the API boundary, but for the return;
* sake of testing with mock breadcrumbs (no HW so unable to
* enable irqs) we place it deep within the bowels, at the point
* of no return.
*/
GEM_BUG_ON(!intel_irqs_enabled(engine->i915));
/* Caller disables interrupts */ /* Caller disables interrupts */
if (engine->irq_enable) { spin_lock(&engine->i915->irq_lock);
spin_lock(&engine->i915->irq_lock); engine->irq_enable(engine);
engine->irq_enable(engine); spin_unlock(&engine->i915->irq_lock);
spin_unlock(&engine->i915->irq_lock);
}
} }
static void irq_disable(struct intel_engine_cs *engine) static void irq_disable(struct intel_engine_cs *engine)
{ {
if (!engine->irq_disable)
return;
/* Caller disables interrupts */ /* Caller disables interrupts */
if (engine->irq_disable) { spin_lock(&engine->i915->irq_lock);
spin_lock(&engine->i915->irq_lock); engine->irq_disable(engine);
engine->irq_disable(engine); spin_unlock(&engine->i915->irq_lock);
spin_unlock(&engine->i915->irq_lock);
}
} }
void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine) void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment