[Intel-gfx] [PATCH v2 1/2] drm/i915: signal first fence from irq handler if complete
Chris Wilson
chris at chris-wilson.co.uk
Fri Feb 24 10:26:00 UTC 2017
On Fri, Feb 24, 2017 at 10:19:07AM +0000, Chris Wilson wrote:
> On Fri, Feb 24, 2017 at 10:04:23AM +0000, Tvrtko Ursulin wrote:
> > >diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > >index 027c93e34c97..5f2665aa817c 100644
> > >--- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > >+++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
> > >@@ -81,8 +81,11 @@ static void intel_breadcrumbs_fake_irq(unsigned long data)
> > > * every jiffie in order to kick the oldest waiter to do the
> > > * coherent seqno check.
> > > */
> > >- if (intel_engine_wakeup(engine))
> > >- mod_timer(&engine->breadcrumbs.fake_irq, jiffies + 1);
> > >+ if (!intel_engine_has_waiter(engine))
> > >+ return;
> > >+
> > >+ intel_engine_wakeup(engine);
> > >+ mod_timer(&engine->breadcrumbs.fake_irq, jiffies + 1);
> >
> > Not sure it is worth splitting this in two instead of just leaving
> > it as it was.
>
> The problem with the previous code was the timer stopped if the waiter
> was running at that moment. I am still playing to find something that
> doesn't look horrible. Just going back to the bool intel_engine_wakeup,
> which is now far too large to be an inline for an unimportant function.
Ah, found the complication. Here we want intel_engine_wakeup() to report
if there was a waiter, but in intel_breadcrumbs_hangcheck, we want to
know if we failed to wakeup the waiter.
Just grin and bear it for the moment. :|
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list