[Intel-gfx] [PATCH] drm/i915: Simplify i915_gem_release_all_mmaps()

Paulo Zanoni przanoni at gmail.com
Thu Jan 16 14:56:38 CET 2014


2014/1/16 Chris Wilson <chris at chris-wilson.co.uk>:
> An object can only have an active gtt mapping if it is currently bound
> into the global gtt. Therefore we can simply walk the list of all bound
> objects and check the flag upon those for an active gtt mapping.
>
> From commit 48018a57a8f5900e7e53ffaa0adeb784095accfb
> Author: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Date:   Fri Dec 13 15:22:31 2013 -0200
>
>     drm/i915: release the GTT mmaps when going into D3
>
> Also note that the WARN is inappropriate for this function as GPU
> activity is orthogonal to GTT mmap status. Rather it is the caller that
> relies upon this condition and so it should assert that the GPU is idle
> itself.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi at gmail.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  drivers/gpu/drm/i915/i915_gem.c | 25 +++++++++----------------
>  1 file changed, 9 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 39c25ebc36b7..74f583fcab3e 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1562,22 +1562,6 @@ out:
>         return ret;
>  }
>
> -void i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
> -{
> -       struct i915_vma *vma;
> -
> -       /*
> -        * Only the global gtt is relevant for gtt memory mappings, so restrict
> -        * list traversal to objects bound into the global address space. Note
> -        * that the active list should be empty, but better safe than sorry.
> -        */
> -       WARN_ON(!list_empty(&dev_priv->gtt.base.active_list));
> -       list_for_each_entry(vma, &dev_priv->gtt.base.active_list, mm_list)
> -               i915_gem_release_mmap(vma->obj);
> -       list_for_each_entry(vma, &dev_priv->gtt.base.inactive_list, mm_list)
> -               i915_gem_release_mmap(vma->obj);
> -}
> -
>  /**
>   * i915_gem_release_mmap - remove physical page mappings
>   * @obj: obj in question
> @@ -1602,6 +1586,15 @@ i915_gem_release_mmap(struct drm_i915_gem_object *obj)
>         obj->fault_mappable = false;
>  }
>
> +void
> +i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
> +{
> +       struct drm_i915_gem_object *obj;
> +
> +       list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
> +               i915_gem_release_mmap(obj);
> +}
> +

This was exactly what I wrote in the first version:
http://lists.freedesktop.org/archives/intel-gfx/2013-November/036310.html
I had written this based on a description by Daniel. I asked his help
due to my lack of experience with this code.

But then later he changed his mind and guided me to implement what is
currently merged today:
http://lists.freedesktop.org/archives/intel-gfx/2013-December/037263.html

So your patch does work and it does pass the pm_pc8.c test suite,
because I tested it in the past. Based on that, you have my
Reviewed-by: Paulo Zanoni <paulo.r.zanoni at intel.com>

I also counted the amount of times we call i915_gem_release_mmap() on
both versions, and for the pm_pc8.c test suite, as far as I remember,
it was the same. But, of course, pm_pc8.c doesn't really reflect a
real use-case environment.

But I think you and Daniel should discuss and really decide which
version you want merged. I don't have any strong opinions here.

Thanks,
Paulo

>  uint32_t
>  i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
>  {
> --
> 1.8.5.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Paulo Zanoni



More information about the Intel-gfx mailing list