OSDN Git Service

drm/ttm: move unbind into the tt destroy.
authorDave Airlie <airlied@redhat.com>
Thu, 17 Sep 2020 03:24:50 +0000 (13:24 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 17 Sep 2020 20:15:24 +0000 (06:15 +1000)
This moves unbind into the driver side on destroy paths.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200917043040.146575-4-airlied@gmail.com
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_sgdma.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c

index dbe3f90..2028b9e 100644 (file)
@@ -1267,6 +1267,7 @@ static void amdgpu_ttm_backend_destroy(struct ttm_bo_device *bdev,
 {
        struct amdgpu_ttm_tt *gtt = (void *)ttm;
 
+       amdgpu_ttm_backend_unbind(bdev, ttm);
        ttm_tt_destroy_common(bdev, ttm);
        if (gtt->usertask)
                put_task_struct(gtt->usertask);
index b239381..4a020a3 100644 (file)
@@ -1372,6 +1372,7 @@ nouveau_ttm_tt_destroy(struct ttm_bo_device *bdev,
 #if IS_ENABLED(CONFIG_AGP)
        struct nouveau_drm *drm = nouveau_bdev(bdev);
        if (drm->agp.bridge) {
+               ttm_agp_unbind(ttm);
                ttm_tt_destroy_common(bdev, ttm);
                ttm_agp_destroy(ttm);
                return;
index 0dfaa6f..806d9ec 100644 (file)
@@ -20,6 +20,7 @@ nouveau_sgdma_destroy(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
        struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)ttm;
 
        if (ttm) {
+               nouveau_sgdma_unbind(bdev, ttm);
                ttm_tt_destroy_common(bdev, ttm);
                ttm_dma_tt_fini(&nvbe->ttm);
                kfree(nvbe);
index 76e24c6..03e5ae4 100644 (file)
@@ -576,6 +576,7 @@ static void radeon_ttm_backend_destroy(struct ttm_bo_device *bdev, struct ttm_tt
 {
        struct radeon_ttm_tt *gtt = (void *)ttm;
 
+       radeon_ttm_backend_unbind(bdev, ttm);
        ttm_tt_destroy_common(bdev, ttm);
 
        ttm_dma_tt_fini(&gtt->ttm);
@@ -757,6 +758,7 @@ static void radeon_ttm_tt_destroy(struct ttm_bo_device *bdev,
        struct radeon_device *rdev = radeon_get_rdev(bdev);
 
        if (rdev->flags & RADEON_IS_AGP) {
+               ttm_agp_unbind(ttm);
                ttm_tt_destroy_common(bdev, ttm);
                ttm_agp_destroy(ttm);
                return;
index 4741c73..b814d0c 100644 (file)
@@ -1619,7 +1619,6 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo)
        if (bo->ttm == NULL)
                return;
 
-       ttm_bo_tt_unbind(bo);
        ttm_tt_destroy(bo->bdev, bo->ttm);
        bo->ttm = NULL;
 }
index d464261..7454f79 100644 (file)
@@ -636,6 +636,7 @@ static void vmw_ttm_destroy(struct ttm_bo_device *bdev, struct ttm_tt *ttm)
        struct vmw_ttm_tt *vmw_be =
                container_of(ttm, struct vmw_ttm_tt, dma_ttm.ttm);
 
+       vmw_ttm_unbind(bdev, ttm);
        ttm_tt_destroy_common(bdev, ttm);
        vmw_ttm_unmap_dma(vmw_be);
        if (vmw_be->dev_priv->map_mode == vmw_dma_alloc_coherent)