On 09/11/17 09:59 AM, Christian König wrote:
> Deleted BOs with the same reservation object can be reaped even if they
> can't be reserved.
> 
> v2: rebase and we still need to remove/add the BO from/to the LRU.
> 
> Signed-off-by: Christian König <christian.koe...@amd.com>
> ---
>  drivers/gpu/drm/ttm/ttm_bo.c | 39 +++++++++++++++++++++++++++++++--------
>  1 file changed, 31 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 50a678b504f3..6545c4344684 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -735,20 +735,37 @@ bool ttm_bo_eviction_valuable(struct ttm_buffer_object 
> *bo,
>  EXPORT_SYMBOL(ttm_bo_eviction_valuable);
>  
>  static int ttm_mem_evict_first(struct ttm_bo_device *bdev,
> -                             uint32_t mem_type,
> -                             const struct ttm_place *place,
> -                             bool interruptible,
> -                             bool no_wait_gpu)
> +                            struct reservation_object *resv,
> +                            uint32_t mem_type,
> +                            const struct ttm_place *place,
> +                            bool interruptible,
> +                            bool no_wait_gpu)
>  {
>       struct ttm_bo_global *glob = bdev->glob;
>       struct ttm_mem_type_manager *man = &bdev->man[mem_type];
>       struct ttm_buffer_object *bo;
>       int ret = -EBUSY;
> +     bool locked;
>       unsigned i;
>  
>       spin_lock(&glob->lru_lock);
>       for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) {
>               list_for_each_entry(bo, &man->lru[i], lru) {
> +                     if (bo->resv == resv) {
> +                             if (list_empty(&bo->ddestroy))
> +                                     continue;
> +
> +                             if (place &&
> +                                 !bdev->driver->eviction_valuable(bo, place))
> +                                     continue;
> +
> +                             ttm_bo_del_from_lru(bo);

Is this necessary, despite the existing ttm_bo_del_from_lru call before
unlocking the LRU lock? If yes, why isn't this necessary in the bo->resv
!= resv case?


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to