[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