On 16/02/2017 09:29, Chris Wilson wrote:
If the timer expires for enabling the fake interrupt, check to see if there is a real interrupt queued before making the decision to start polling. This helps in situations where we have a very slow irq-seqno barrier that may accrue more breadcrumb interrupts before it is able to catch up. It still leaves a hole for the timer to expire as we are processing the last irq-seqno barrier, but it appears to help reduce the frequency of "missed-interrupts" on Ironlake, at least. References: https://bugs.freedesktop.org/show_bug.cgi?id=99816 Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_breadcrumbs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c index ef3adfd37d7d..21269421bd2a 100644 --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c @@ -41,6 +41,11 @@ static void intel_breadcrumbs_hangcheck(unsigned long data) return; } + if (test_bit(ENGINE_IRQ_BREADCRUMB, &engine->irq_posted)) { + mod_timer(&b->hangcheck, jiffies + 1); + return; + } + DRM_DEBUG("Hangcheck timer elapsed... %s idle\n", engine->name); set_bit(engine->id, &engine->i915->gpu_error.missed_irq_rings); mod_timer(&engine->breadcrumbs.fake_irq, jiffies + 1);
Another hmm :), barriers are so much shorter than the hangcheck interval (1500ms) so I don't quite understand what is the problem.
Should we instead put a mod_timer when raising the user irq? Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx