[Intel-gfx] [PATCH 2/3] drm/i915: Add hint to intel_wait_for_register_fw()
Chris Wilson
chris at chris-wilson.co.uk
Fri Apr 7 14:23:51 UTC 2017
On Fri, Apr 07, 2017 at 04:10:29PM +0200, Michal Wajdeczko wrote:
> On Fri, Apr 07, 2017 at 02:58:17PM +0100, Tvrtko Ursulin wrote:
> >
> > On 07/04/2017 14:32, Michal Wajdeczko wrote:
> > > In some cases we may want to spend more time in atomic wait than
> > > hardcoded 2us. Let's add additional hint parameter to allow extending
> > > internal atomic timeout to 10us before switching into heavy wait.
> > >
> > > Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> > > Suggested-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > > Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> > > Cc: Chris Wilson <chris at chris-wilson.co.uk>
> > > ---
> > > @@ -1670,7 +1676,7 @@ static int gen8_request_engine_reset(struct intel_engine_cs *engine)
> > > RING_RESET_CTL(engine->mmio_base),
> > > RESET_CTL_READY_TO_RESET,
> > > RESET_CTL_READY_TO_RESET,
> > > - 700);
> > > + true, 700);
> > > if (ret)
> > > DRM_ERROR("%s: reset request timeout\n", engine->name);
> > >
> > >
> >
> > I would recommend a different solution here.
> >
> > Rename and change the prototype of intel_wait_for_register_fw to:
> >
> > int __intel_wait_for_register_fw(dev_priv, reg, mask, vlaue, fast_timeout_us, timeout_ms)
> > {
> > ..existing function body, just replace "2" with fast_timeout_us...
> > }
> >
> > int intel_wait_for_register_fw(dev_priv, reg, mask, vlaue, timeout_ms
> > {
> > return __intel_wait_for_register_fw(dev_priv, reg, mask, value, 2, timeout_ms);
> > }
> >
> > And use the __ version from the GuC code.
> >
> > There is no churn elsewhere in the code like this and it is also
> > more flexible for potential other new users.
>
> That was my initial approach, *but* this would require further changes,
> as wait_for_us() expects timeout parameter to be compile time constant.
Hmm.
> #define wait_for_us(COND, US) \
> ...
> BUILD_BUG_ON(!__builtin_constant_p(US));
>
> Possible alternate solutions were:
> a) use internal macro _wait_for_atomic() directly with explicit ATOMIC=0
> b) add another variant of wait_for_atomic_us() that will use ATOMIC=0
I'd vote to reducing the number of wait_for_us we have in the driver,
ideally limiting it to intel_uncore.c as the only user. Given how slow
mmio reads are, there's no good excuse against having an extra function
call. Is that achievable?
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list