Re: [PATCH 6/9] drm/i915: Disable waitboosting for fence_wait()

Chris Wilson
2016-07-15T11:06:23Z

On Fri, Jul 15, 2016 at 01:49:44PM +0300, Mika Kuoppala wrote:
> Chris Wilson <chris@chris-wilson.co.uk> writes:
>
> > We want to restrict waitboosting to known process contexts, where we can
> > track which clients are receiving waitboosts and prevent excessive power
> > wasting. For fence_wait() we do not have any client tracking and so that
> > leaves it open to abuse.
> >
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > ---
> > drivers/gpu/drm/i915/i915_gem_request.c | 7 ++++---
> > drivers/gpu/drm/i915/i915_gem_request.h | 1 +
> > 2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> > index 6528536878f2..bfec4a88707d 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_request.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> > @@ -70,7 +70,7 @@ static signed long i915_fence_wait(struct fence *fence,
> >
> > ret = __i915_wait_request(to_request(fence),
> > interruptible, timeout,
> > - NULL);
> > + NO_WAITBOOST);
> > if (ret == -ETIME)
> > return 0;
> >
> > @@ -642,7 +642,7 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
> > * forcing the clocks too high for the whole system, we only allow
> > * each client to waitboost once in a busy period.
> > */
> > - if (INTEL_GEN(req->i915) >= 6)
> > + if (!IS_ERR(rps) && INTEL_GEN(req->i915) >= 6)
> > gen6_rps_boost(req->i915, rps, req->emitted_jiffies);
> >
>
> The intention here is to boost even if rps client is NULL?
> Assuming so could you elaborate why.

Yes, NULL is the kernel request for rps boosting, not associated with
any client (and may be affecting multiple clients at any one time).
-Chris

--
Chris Wilson, Intel Open Source Technology Centre