Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > Never go to sleep waiting on the GPU without first ensuring that we will > get woken up. > > We have a choice of queuing the hangcheck before every schedule() or the > first time we wakeup. In order to simply accommodate both the signaler > and the ordinary waiter, move the queuing to the common point of > enabling the irq. We lose the paranoid safety of ensuring that the > hangcheck is active before the sleep, but avoid code duplication (and > redundant hangcheck queuing). > > Testcase: igt/prime_busy > Fixes: c81d46138da6 ("drm/i915: Convert trace-irq to the breadcrumb waiter") > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem.c | 9 --------- > drivers/gpu/drm/i915/intel_breadcrumbs.c | 9 +++++++++ > 2 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 8f50919ba9b4..7fd44980798f 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -1501,15 +1501,6 @@ int __i915_wait_request(struct drm_i915_gem_request *req, > break; > } > > - /* Ensure that even if the GPU hangs, we get woken up. > - * > - * However, note that if no one is waiting, we never notice > - * a gpu hang. Eventually, we will have to wait for a resource > - * held by the GPU and so trigger a hangcheck. In the most > - * pathological case, this will be upon memory starvation! > - */ > - i915_queue_hangcheck(req->i915); > - > timeout_remain = io_schedule_timeout(timeout_remain); > if (timeout_remain == 0) { > ret = -ETIME; > diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c > index d89b2c963618..b074f3d6d127 100644 > --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c > +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c > @@ -93,6 +93,15 @@ static void __intel_breadcrumbs_enable_irq(struct intel_breadcrumbs *b) > if (!b->irq_enabled || > test_bit(engine->id, &i915->gpu_error.missed_irq_rings)) > mod_timer(&b->fake_irq, jiffies + 1); > + > + /* Ensure that even if the GPU hangs, we get woken up. > + * > + * However, note that if no one is waiting, we never notice > + * a gpu hang. Eventually, we will have to wait for a resource > + * held by the GPU and so trigger a hangcheck. In the most > + * pathological case, this will be upon memory starvation! > + */ > + i915_queue_hangcheck(i915); > } > > static void __intel_breadcrumbs_disable_irq(struct intel_breadcrumbs *b) > -- > 2.8.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx