After we move BO to a new memory region, we should put it to the new memory manager's lru list regardless we unlock the resv or not.
Cc: stable@vger.kernel.org Reviewed-by: Christian König christian.koenig@amd.com Signed-off-by: xinhui pan xinhui.pan@amd.com --- drivers/gpu/drm/ttm/ttm_bo.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index f1367107925b..e307004f0b28 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -701,6 +701,8 @@ int ttm_mem_evict_first(struct ttm_device *bdev, ret = ttm_bo_evict(bo, ctx); if (locked) ttm_bo_unreserve(bo); + else + ttm_bo_move_to_lru_tail_unlocked(bo);
ttm_bo_put(bo); return ret;
BO might sit in a wrong lru list as there is a small period of memory moving and lru list updating.
Lets skip eviction if we hit such mismatch.
Suggested-by: Christian König christian.koenig@amd.com Signed-off-by: xinhui pan xinhui.pan@amd.com --- drivers/gpu/drm/ttm/ttm_bo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index e307004f0b28..0137a302f261 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -594,7 +594,8 @@ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, *busy = !ret; }
- if (ret && place && !bo->bdev->funcs->eviction_valuable(bo, place)) { + if (ret && place && (bo->resource->mem_type != place->mem_type || + !bo->bdev->funcs->eviction_valuable(bo, place))) { ret = false; if (*locked) { dma_resv_unlock(bo->base.resv);
Am 10.11.21 um 05:31 schrieb xinhui pan:
BO might sit in a wrong lru list as there is a small period of memory moving and lru list updating.
Lets skip eviction if we hit such mismatch.
Suggested-by: Christian König christian.koenig@amd.com Signed-off-by: xinhui pan xinhui.pan@amd.com
Reviewed-by: Christian König christian.koenig@amd.com for the series.
Going to add a CC: stable to the second patch and push it to drm-misc-fixes.
Thanks, Christian.
drivers/gpu/drm/ttm/ttm_bo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index e307004f0b28..0137a302f261 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -594,7 +594,8 @@ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, *busy = !ret; }
- if (ret && place && !bo->bdev->funcs->eviction_valuable(bo, place)) {
- if (ret && place && (bo->resource->mem_type != place->mem_type ||
ret = false; if (*locked) { dma_resv_unlock(bo->base.resv);!bo->bdev->funcs->eviction_valuable(bo, place))) {
dri-devel@lists.freedesktop.org