Chris Wilson <[email protected]> writes:

> Always try to stop the rings, even if the GPU reset itself has been
> disabled (via modparam i915.reset). This should at least stop the hw
> from spinning in the background consuming resources (e.g. power and
> memory bandwidth) letting the system rest-in-peace.
>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=103260
> Signed-off-by: Chris Wilson <[email protected]>
> Cc: Mika Kuoppala <[email protected]>

Reviewed-by: Mika Kuoppala <[email protected]>

> ---
>  drivers/gpu/drm/i915/intel_uncore.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
> b/drivers/gpu/drm/i915/intel_uncore.c
> index 983617b5b338..20e3c65c0999 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -1403,6 +1403,9 @@ static void i915_stop_engines(struct drm_i915_private 
> *dev_priv,
>       struct intel_engine_cs *engine;
>       enum intel_engine_id id;
>  
> +     if (INTEL_GEN(dev_priv) < 3)
> +             return;
> +
>       for_each_engine_masked(engine, dev_priv, engine_mask, id)
>               gen3_stop_engine(engine);
>  }
> @@ -1742,16 +1745,12 @@ static reset_func intel_get_gpu_reset(struct 
> drm_i915_private *dev_priv)
>  
>  int intel_gpu_reset(struct drm_i915_private *dev_priv, unsigned engine_mask)
>  {
> -     reset_func reset;
> +     reset_func reset = intel_get_gpu_reset(dev_priv);
>       int retry;
>       int ret;
>  
>       might_sleep();
>  
> -     reset = intel_get_gpu_reset(dev_priv);
> -     if (reset == NULL)
> -             return -ENODEV;
> -
>       /* If the power well sleeps during the reset, the reset
>        * request may be dropped and never completes (causing -EIO).
>        */
> @@ -1771,7 +1770,9 @@ int intel_gpu_reset(struct drm_i915_private *dev_priv, 
> unsigned engine_mask)
>                */
>               i915_stop_engines(dev_priv, engine_mask);
>  
> -             ret = reset(dev_priv, engine_mask);
> +             ret = -ENODEV;
> +             if (reset)
> +                     ret = reset(dev_priv, engine_mask);
>               if (ret != -ETIMEDOUT)
>                       break;
>  
> -- 
> 2.15.0.rc0
>
> _______________________________________________
> Intel-gfx mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to