Re: [PATCH v2 1/3] drm/i915: Drop racy markup of missed-irqs from idle-worker

Tvrtko Ursulin
2016-07-21T09:58:08Z

On 21/07/16 07:57, Chris Wilson wrote:
> 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.

If the bottom half is scheduled to run then then..

> 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>
> ---
> drivers/gpu/drm/i915/i915_gem.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 40047eb48826..9e826585edb2 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2706,10 +2706,9 @@ i915_gem_idle_work_handler(struct work_struct *work)
> rearm_hangcheck = false;
>
> stuck_engines = intel_kick_waiters(dev_priv);

... this will not return a stucked engine since the there is a bh task
assigned all until the bh exits.

So I don't get it. :)

Regards,

Tvrtko

> - 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);