drm/i915: Drop racy markup of missed-irqs from idle-worker
During the idle-worker we disable the hangcheck and so kick any waiters that should have been completed (since the GPU is now idle). Unlike the hangcheck, we do not take any care to avoid the race between the irq handler and ourselves, and so it is possible for us to declare a missed interrupt even as the bottom-half is being scheduled to run. Let's ignore this race to stop a potential false-positive error. References: https://bugs.freedesktop.org/show_bug.cgi?id=96974 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1469351421-13493-1-git-send-email-chris@chris-wilson.co.uk
This commit is contained in:
parent
54b4f68f18
commit
2529d57050
|
@ -2705,11 +2705,14 @@ i915_gem_idle_work_handler(struct work_struct *work)
|
|||
dev_priv->gt.awake = false;
|
||||
rearm_hangcheck = false;
|
||||
|
||||
/* As we have disabled hangcheck, we need to unstick any waiters still
|
||||
* hanging around. However, as we may be racing against the interrupt
|
||||
* handler or the waiters themselves, we skip enabling the fake-irq.
|
||||
*/
|
||||
stuck_engines = intel_kick_waiters(dev_priv);
|
||||
if (unlikely(stuck_engines)) {
|
||||
DRM_DEBUG_DRIVER("kicked stuck waiters...missed irq\n");
|
||||
dev_priv->gpu_error.missed_irq_rings |= stuck_engines;
|
||||
}
|
||||
if (unlikely(stuck_engines))
|
||||
DRM_DEBUG_DRIVER("kicked stuck waiters (%x)...missed irq?\n",
|
||||
stuck_engines);
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 6)
|
||||
gen6_rps_idle(dev_priv);
|
||||
|
|
Loading…
Reference in New Issue