drm/ttm: add wait for idle in all drivers bo_move functions
authorChristian König <christian.koenig@amd.com>
Mon, 6 Jun 2016 08:17:53 +0000 (10:17 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 7 Jul 2016 18:54:35 +0000 (14:54 -0400)
Wait for idle before moving the BO in all drivers implementing
an accelerated move function.

This should keep the current behavior when removing the pre move wait.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/qxl/qxl_ttm.c
drivers/gpu/drm/radeon/radeon_ttm.c
drivers/gpu/drm/virtio/virtgpu_ttm.c

index 3b9053af47629617544f8f55d6ec5b714063146c..0a6a6320b40eb60bfbbdcad83b64e574e84fae85 100644 (file)
@@ -390,6 +390,10 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo,
        struct ttm_mem_reg *old_mem = &bo->mem;
        int r;
 
+       r = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+       if (r)
+               return r;
+
        /* Can't move a pinned BO */
        abo = container_of(bo, struct amdgpu_bo, tbo);
        if (WARN_ON_ONCE(abo->pin_count > 0))
index 5e3f3e826476cc0b71b64bc12d615841191cebd7..a43f3095693b8556c0b5514e4e12b14c24c80ed1 100644 (file)
@@ -1289,6 +1289,10 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
        struct nouveau_drm_tile *new_tile = NULL;
        int ret = 0;
 
+       ret = ttm_bo_wait(bo, intr, no_wait_gpu);
+       if (ret)
+               return ret;
+
        if (nvbo->pin_refcnt)
                NV_WARN(drm, "Moving pinned object %p!\n", nvbo);
 
index 0738d74c8d049faf18f0153378de60a1978a49e7..89e8be944330a2e9958fb340070f7072ab0051a9 100644 (file)
@@ -350,6 +350,13 @@ static int qxl_bo_move(struct ttm_buffer_object *bo,
                       struct ttm_mem_reg *new_mem)
 {
        struct ttm_mem_reg *old_mem = &bo->mem;
+       int ret;
+
+       ret = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+       if (ret)
+               return ret;
+
+
        if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
                qxl_move_null(bo, new_mem);
                return 0;
index 590b0377fbe267f859b7cc7649b309b9c34d4436..1cc4870b3de8ba69c0a6379d1ae342d8b823c543 100644 (file)
@@ -403,6 +403,10 @@ static int radeon_bo_move(struct ttm_buffer_object *bo,
        struct ttm_mem_reg *old_mem = &bo->mem;
        int r;
 
+       r = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+       if (r)
+               return r;
+
        /* Can't move a pinned BO */
        rbo = container_of(bo, struct radeon_bo, tbo);
        if (WARN_ON_ONCE(rbo->pin_count > 0))
index a0580815629f52a4c6dc61a22ca330d977991570..80482ac5f95dc71ac06bdd2d3dacc68333e32006 100644 (file)
@@ -375,6 +375,12 @@ static int virtio_gpu_bo_move(struct ttm_buffer_object *bo,
                              bool no_wait_gpu,
                              struct ttm_mem_reg *new_mem)
 {
+       int ret;
+
+       ret = ttm_bo_wait(bo, interruptible, no_wait_gpu);
+       if (ret)
+               return ret;
+
        virtio_gpu_move_null(bo, new_mem);
        return 0;
 }