drm/amdgpu: freeing pinned objects is illegal now
authorChristian König <christian.koenig@amd.com>
Wed, 14 Apr 2021 13:51:24 +0000 (15:51 +0200)
committerChristian König <christian.koenig@amd.com>
Mon, 19 Apr 2021 12:20:36 +0000 (14:20 +0200)
We want to drop support in TTM for this.

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Leo Liu <leo.liu@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210415084730.2057-2-christian.koenig@amd.com
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

index 984dcf5..aee8b7b 100644 (file)
  *
  */
 
-/**
- * amdgpu_bo_subtract_pin_size - Remove BO from pin_size accounting
- *
- * @bo: &amdgpu_bo buffer object
- *
- * This function is called when a BO stops being pinned, and updates the
- * &amdgpu_device pin_size values accordingly.
- */
-static void amdgpu_bo_subtract_pin_size(struct amdgpu_bo *bo)
-{
-       struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
-
-       if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
-               atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size);
-               atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo),
-                            &adev->visible_pin_size);
-       } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
-               atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size);
-       }
-}
-
 static void amdgpu_bo_destroy(struct ttm_buffer_object *tbo)
 {
        struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
        struct amdgpu_bo *bo = ttm_to_amdgpu_bo(tbo);
 
-       if (bo->tbo.pin_count > 0)
-               amdgpu_bo_subtract_pin_size(bo);
-
        amdgpu_bo_kunmap(bo);
 
        if (bo->tbo.base.import_attach)
@@ -1000,14 +976,22 @@ int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain)
  */
 void amdgpu_bo_unpin(struct amdgpu_bo *bo)
 {
+       struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+
        ttm_bo_unpin(&bo->tbo);
        if (bo->tbo.pin_count)
                return;
 
-       amdgpu_bo_subtract_pin_size(bo);
-
        if (bo->tbo.base.import_attach)
                dma_buf_unpin(bo->tbo.base.import_attach);
+
+       if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
+               atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size);
+               atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo),
+                            &adev->visible_pin_size);
+       } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
+               atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size);
+       }
 }
 
 /**