[Intel-gfx] [PATCH 08/19] drm/i915: Fix runtime pm handling in i915_gem_shrink

Matthew Auld matthew.william.auld at gmail.com
Wed Sep 29 08:37:11 UTC 2021


On Mon, 30 Aug 2021 at 13:10, Maarten Lankhorst
<maarten.lankhorst at linux.intel.com> wrote:
>
> We forgot to call intel_runtime_pm_put on error, fix it!
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Fixes: cf41a8f1dc1e ("drm/i915: Finally remove obj->mm.lock.")
> Cc: Thomas Hellström <thomas.hellstrom at linux.intel.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: <stable at vger.kernel.org> # v5.13+

How does the err handling work? gem_shrink is meant to return the
number of pages reclaimed which is an unsigned long, and yet we are
also just returning the err here? Fortunately it looks like nothing is
calling gem_shrinker with an actual ww context, so nothing will hit
this yet? I think the interface needs to be reworked or something.

> ---
>  drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> index e382b7f2353b..5ab136ffdeb2 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> @@ -118,7 +118,7 @@ i915_gem_shrink(struct i915_gem_ww_ctx *ww,
>         intel_wakeref_t wakeref = 0;
>         unsigned long count = 0;
>         unsigned long scanned = 0;
> -       int err;
> +       int err = 0;
>
>         /* CHV + VTD workaround use stop_machine(); need to trylock vm->mutex */
>         bool trylock_vm = !ww && intel_vm_no_concurrent_access_wa(i915);
> @@ -242,12 +242,15 @@ i915_gem_shrink(struct i915_gem_ww_ctx *ww,
>                 list_splice_tail(&still_in_list, phase->list);
>                 spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
>                 if (err)
> -                       return err;
> +                       break;
>         }
>
>         if (shrink & I915_SHRINK_BOUND)
>                 intel_runtime_pm_put(&i915->runtime_pm, wakeref);
>
> +       if (err)
> +               return err;
> +
>         if (nr_scanned)
>                 *nr_scanned += scanned;
>         return count;
> --
> 2.32.0
>


More information about the Intel-gfx mailing list