[PATCH] drm/ttm: Make NO_EVICT bos available to shrinkers pending destruction

Jakob Bornecrantz wallbraker at gmail.com
Tue Oct 29 14:55:27 CET 2013


On Thu, Oct 10, 2013 at 8:22 PM, Thomas Hellstrom <thellstrom at vmware.com> wrote:
> NO_EVICT bos that are not idle when all references are dropped are put on
> the delayed destroy list. However, since they are not on LRU lists, they
> are not available to shrinkers at that point, and buffers on the delayed
> destroy list are not checked very often for idle.
>
> So when these buffers are put on the delayed destroy list, clear the
> NO_EVICT flag and put them on the right LRU list. This way they are
> immediately available for eviction or shrinkers and will not cause false
> OOMS.
>
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>

Reviewed-by: Jakob Bornecrantz <jakob at vmware.com>

> ---
>  drivers/gpu/drm/ttm/ttm_bo.c |   14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index f1a857e..6c1a38f 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -429,8 +429,20 @@ static void ttm_bo_cleanup_refs_or_queue(struct ttm_buffer_object *bo)
>                 sync_obj = driver->sync_obj_ref(bo->sync_obj);
>         spin_unlock(&bdev->fence_lock);
>
> -       if (!ret)
> +       if (!ret) {
> +
> +               /*
> +                * Make NO_EVICT bos immediately available to
> +                * shrinkers, now that they are queued for
> +                * destruction.
> +                */
> +               if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT) {
> +                       bo->mem.placement &= ~TTM_PL_FLAG_NO_EVICT;
> +                       ttm_bo_add_to_lru(bo);
> +               }
> +
>                 ww_mutex_unlock(&bo->resv->lock);
> +       }
>
>         kref_get(&bo->list_kref);
>         list_add_tail(&bo->ddestroy, &bdev->ddestroy);
> --
> 1.7.10.4
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list