[Intel-gfx] [PATCH] drm/i915: Limit number of reads to stabilize rc6 counter reads

Mika Kuoppala mika.kuoppala at linux.intel.com
Mon Mar 27 10:07:58 UTC 2017


Chris Wilson <chris at chris-wilson.co.uk> writes:

> We have only 8bits of precise timestamps in which to complete our
> upper/load reads, along with the switch between precision. This is not
> always enough time to read the upper counter twice within the same time
> slice, leading to hard lockups. Limit the number of times to prevent
> an inifite loop (my fault for assuming we would have no trouble doing
> the write + reads fast enough).
>

We get here only with kasan enabled? Or even without?


> Fixes: 47c21d9a1a7b ("drm/i915: Extend vlv/chv residency resolution")
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100377
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index aece0ff88a5d..63ce70329e6e 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -8355,6 +8355,7 @@ static u64 vlv_residency_raw(struct drm_i915_private *dev_priv,
>  			     const i915_reg_t reg)
>  {
>  	u32 lower, upper, tmp;
> +	int loop = 2;

loop could be larger, like 4 but as we very seldom
get a less than usec error, I am fine with this too.

Reviewed-by: Mika Kuoppala <mika.kuoppala at intel.com>

>  
>  	/* The register accessed do not need forcewake. We borrow
>  	 * uncore lock to prevent concurrent access to range reg.
> @@ -8383,7 +8384,7 @@ static u64 vlv_residency_raw(struct drm_i915_private *dev_priv,
>  		I915_WRITE_FW(VLV_COUNTER_CONTROL,
>  			      _MASKED_BIT_ENABLE(VLV_COUNT_RANGE_HIGH));
>  		upper = I915_READ_FW(reg);
> -	} while (upper != tmp);
> +	} while (upper != tmp && --loop);
>  
>  	/* Everywhere else we always use VLV_COUNTER_CONTROL with the
>  	 * VLV_COUNT_RANGE_HIGH bit set - so it is safe to leave it set
> -- 
> 2.11.0


More information about the Intel-gfx mailing list