Hi,

On 6/2/21 12:09 PM, Christian König wrote:
To improve the handling we want the establish the resource object as base
class for the backend allocations.

v2: add missing error handling

Signed-off-by: Christian König <christian.koe...@amd.com>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |  4 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    | 54 +++++++-------
  drivers/gpu/drm/nouveau/nouveau_bo.c       |  2 +-
  drivers/gpu/drm/radeon/radeon_ttm.c        |  2 +-
  drivers/gpu/drm/ttm/ttm_bo.c               | 83 ++++++++--------------
  drivers/gpu/drm/ttm/ttm_bo_util.c          | 43 ++++++-----
  drivers/gpu/drm/ttm/ttm_resource.c         | 31 +++++---
  drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c |  2 +-
  include/drm/ttm/ttm_bo_api.h               |  1 -
  include/drm/ttm/ttm_bo_driver.h            | 10 ++-
  include/drm/ttm/ttm_resource.h             |  4 +-
  11 files changed, 110 insertions(+), 126 deletions(-)
...
@@ -629,7 +628,7 @@ static void ttm_bo_move_pipeline_evict(struct ttm_buffer_object *bo,
        }
        spin_unlock(&from->move_lock);
- ttm_resource_free(bo, bo->resource);
+       ttm_resource_free(bo, &bo->resource);
dma_fence_put(bo->moving);
        bo->moving = dma_fence_get(fence);
@@ -678,11 +677,11 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
        if (ret)
                ttm_bo_wait(bo, false, false);
- ttm_resource_alloc(bo, &sys_mem, bo->resource);
+       ret = ttm_resource_alloc(bo, &sys_mem, &bo->resource);
        bo->ttm = NULL;
dma_resv_unlock(&ghost->base._resv);
        ttm_bo_put(ghost);
- return 0;
+       return ret;

Here we re-introduce a late point of failure, which I guess leaves the bo in an undefined state? Same thing with my optimization for the idle case. Needs fixing as soon as possible.

/Thomas


Reply via email to