Skip to content

Commit 8998567

Browse files
committed
drm/i915: Defer declaration of missed-interrupt until the waiter is asleep
If the waiter was currently running, assume it hasn't had a chance to process the pending interrupt (e.g, low priority task on a loaded system) and wait until it sleeps before declaring a missed interrupt. References: https://bugs.freedesktop.org/show_bug.cgi?id=99816 Signed-off-by: Chris Wilson <[email protected]> Cc: Tvrtko Ursulin <[email protected]> Cc: Mika Kuoppala <[email protected]> Reviewed-by: Tvrtko Ursulin <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent c33ed06 commit 8998567

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/gpu/drm/i915/intel_breadcrumbs.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ static void intel_breadcrumbs_hangcheck(unsigned long data)
4545
return;
4646
}
4747

48+
/* If the waiter was currently running, assume it hasn't had a chance
49+
* to process the pending interrupt (e.g, low priority task on a loaded
50+
* system) and wait until it sleeps before declaring a missed interrupt.
51+
*/
52+
if (!intel_engine_wakeup(engine)) {
53+
mod_timer(&b->hangcheck, wait_timeout());
54+
return;
55+
}
56+
4857
DRM_DEBUG("Hangcheck timer elapsed... %s idle\n", engine->name);
4958
set_bit(engine->id, &engine->i915->gpu_error.missed_irq_rings);
5059
mod_timer(&engine->breadcrumbs.fake_irq, jiffies + 1);

0 commit comments

Comments
 (0)